天天看點

SpringMVC架構簡單搭建和前背景傳值

  1. 建立web項目并導入jar包
    1. SpringMVC架構簡單搭建和前背景傳值
  2.  在web.xml中進行servlet的配置
    1. <?xml version="1.0" encoding="UTF-8"?>
      <web-app version="2.5" 
      	xmlns="http://java.sun.com/xml/ns/javaee" 
      	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
      	xsi:schemaLocation="http://java.sun.com/xml/ns/javaee 
      	http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
        <display-name></display-name>	
        <welcome-file-list>
          <welcome-file>index.jsp</welcome-file>
        </welcome-file-list>
        
        <!-- 以servlet的方式配置SpringMVC的核心控制器 -->
        <servlet>
        	<servlet-name>springMvc</servlet-name>
        	<!-- springMVC的核心類(前端控制器) -->
        	<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
        	
        	<!-- 通過初始化參數配置springMVC的核心配置配檔案的位置 -->
        	<init-param>
        		<param-name>contextConfigLocation</param-name>
        		<!-- classpath:表示源檔案夾下 -->
        		<param-value>classpath:springmvc-servlet.xml</param-value>
        	</init-param>
        	<!-- 加載的順序 -->
        	<load-on-startup>1</load-on-startup>
        </servlet>
        
        <servlet-mapping>
        	<servlet-name>springMvc</servlet-name>
        	<!-- 攔截所有的請求 -->
        	<url-pattern>/</url-pattern>
        </servlet-mapping>
      </web-app>
                 
  3. 在項目下建立一個源檔案夾(conf)放springmvc-servlet.xml
    1. SpringMVC架構簡單搭建和前背景傳值
  4. 配置springmvc-servlet.xml
    1. <?xml version="1.0" encoding="UTF-8"?>
      <beans xmlns="http://www.springframework.org/schema/beans"
          xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
          xmlns:mvc="http://www.springframework.org/schema/mvc"
          xmlns:p="http://www.springframework.org/schema/p"
          xmlns:context="http://www.springframework.org/schema/context"
          xsi:schemaLocation="
              http://www.springframework.org/schema/beans
              http://www.springframework.org/schema/beans/spring-beans-3.2.xsd
              http://www.springframework.org/schema/context
              http://www.springframework.org/schema/context/spring-context-3.2.xsd
              http://www.springframework.org/schema/mvc
              http://www.springframework.org/schema/mvc/spring-mvc-3.2.xsd">
        
        	<!--配置處理映射器( 通過頁面請求的url路徑映射到控制器的bean名稱,決定跳到那個控制器controller) -->
      	<bean name="/test1" class="com.controller.TestController"></bean>
      	
      	<!-- 配置自動掃描注解的包 -->
      	<context:component-scan base-package="com.controller"></context:component-scan>
      	
      	<!-- 配置讀取SpringMVC的注解的驅動 -->
      	<mvc:annotation-driven></mvc:annotation-driven>
      	
      	<!-- 配置視圖解析器 -->
      	<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
      		<!-- 字首 -->
      		<property name="prefix" value="/"></property>
      		<!-- 字尾 -->
      		<property name="suffix" value=".jsp"></property>
      	</bean>
      </beans>
      
                 
  5. 建立controller控制器(包括前背景=裝)
    1.  第一種是繼承AbstractController
      1. package com.controller;
        
        import javax.servlet.http.HttpServletRequest;
        import javax.servlet.http.HttpServletResponse;
        
        import org.springframework.web.servlet.ModelAndView;
        import org.springframework.web.servlet.mvc.AbstractController;
        
        
        /**
         * 控制器controller
         * @author asus
         *
         */
        
        public class TestController extends AbstractController {
        
        	@Override
        	protected ModelAndView handleRequestInternal(HttpServletRequest arg0,
        			HttpServletResponse arg1) throws Exception {
        		
        		System.out.println("你好!SpringMVC");
        		//成功後跳轉到success.jsp中
        		ModelAndView mv= new ModelAndView("success");
        		return mv;
        	}
        
        }
                   
    2. 使用@Controller注解的方式定義
      1. 首先要配置
        1. SpringMVC架構簡單搭建和前背景傳值
      2. package com.controller;
        
        import org.springframework.stereotype.Controller;
        import org.springframework.web.bind.annotation.RequestMapping;
        
        @Controller   //使用注解定義一個控制器
        public class IndexController {
        	
        	@RequestMapping("/hello")
        	public String a1(){
        		System.out.println("使用注解的方式通路controller");
        		return "success";//需要跳轉的view
        	}
        }
                   
  6. 前背景傳值的方法
    1. SpringMVC架構簡單搭建和前背景傳值
    2. SpringMVC架構簡單搭建和前背景傳值
  7. 實作的代碼
    1. 通路的jsp
      1. <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
        <%
        String path = request.getContextPath();
        String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
        %>
        
        <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
        <html>
          <head>
            <base href="<%=basePath%>" target="_blank" rel="external nofollow" >
            
            <title>My JSP 'index.jsp' starting page</title>
        	<meta http-equiv="pragma" content="no-cache">
        	<meta http-equiv="cache-control" content="no-cache">
        	<meta http-equiv="expires" content="0">    
        	<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
        	<meta http-equiv="description" content="This is my page">
        	<!--
        	<link rel="stylesheet" type="text/css" href="styles.css" target="_blank" rel="external nofollow" >
        	-->
          </head>
          
          <body>
        	<a href="test1" target="_blank" rel="external nofollow" >第一個springMVC</a>
        	<a href="hello" target="_blank" rel="external nofollow" >使用注解的方式通路controller1</a>
        	<a href="test/hello" target="_blank" rel="external nofollow" >前台向背景傳值測試1(空值)</a>
        	<a href="test/hello1?userName=zhangsan1" target="_blank" rel="external nofollow" >前台向背景傳值測試2</a>
        	<a href="test/hello2?name=zhangsan2" target="_blank" rel="external nofollow" >前台向背景傳值測試3</a>
        	<a href="test/hello3?userName=張三&password=123&age=18" target="_blank" rel="external nofollow" >前台向背景傳值測試4(對象)</a>
        	<a href="test/hello4?userName=張三" target="_blank" rel="external nofollow" >前台向背景傳值測試5(request)</a>
        	
          </body>
        </html>
                   
    2. controller控制器層
      1. package com.controller;
        
        import java.util.Map;
        
        import javax.servlet.http.HttpServletRequest;
        
        import org.springframework.stereotype.Controller;
        import org.springframework.ui.Model;
        import org.springframework.web.bind.annotation.RequestMapping;
        import org.springframework.web.bind.annotation.RequestParam;
        import org.springframework.web.servlet.ModelAndView;
        
        
        import com.pojo.Student;
        //使用注解定義一個控制器
        @Controller
        @RequestMapping("/test")//表示第一層路徑
        public class HelloController {
        
        	@RequestMapping("/hello")
        	// 如果前台沒有傳值,背景接收了使用 @RequestParam(value="name",required=false)進行指定就不會報錯
        	public String a1(
        			@RequestParam(value = "name", required = false) String userName) {
        		System.out.println("傳值測試1:" + userName);
        		return "show";//需要跳轉的頁面
        	}
        
        	@RequestMapping("/hello1")
        	// 直接擷取(參數名稱要跟前台傳的參數名稱一緻)
        	public ModelAndView a2(String userName) {
        		System.out.println("傳值測試2:" + userName);
        		ModelAndView mv=new ModelAndView();
        		mv.addObject("userName", userName);//使用ModelAndView對象儲存參數值
        		mv.setViewName("show");//需要跳轉的頁面
        		return mv;
        	}
        
        	@RequestMapping("/hello2")
        	// 使用配置的方式擷取(名稱不一緻可以使用配置@RequestParam配置)
        	public String a3(@RequestParam("name") String userName,Model model) {
        		System.out.println("傳值測試3:" + userName);
        	  	model.addAttribute("userName", userName);//使用model進行儲存
        		return "show";//需要跳轉的頁面
        	}
        
        	@RequestMapping("/hello3")
        	// 使用對象來擷取(前台參數必須和類裡面的屬性名一緻)
        	public String a4(Student student,Map<String, Object> map) {
        		System.out.println("傳值測試4(對象):" + student.getUserName() + "-"
        				+ student.getPassword() + "-" + student.getAge());
        		map.put("userName", student.getUserName());//使用map集合進行儲存
        		return "show";//需要跳轉的頁面
        	}
         
        	@RequestMapping("/hello4")
        	// 使用HttpServletRequest來擷取
        	public String a5(HttpServletRequest request) {
        		System.out.println("傳值測試5(request):" + request.getParameter("userName"));
        		String userName=request.getParameter("userName");//擷取前台傳過來的資料
        		request.setAttribute("userName", userName);//使用request将值儲存在作用域中
        		return "show";//需要跳轉的頁面
        	}
        }
                   
    3. 跳轉後的頁面,直接用${}取值
      1. <%@ page language="java" contentType="text/html; charset=UTF-8"
            pageEncoding="UTF-8"%>
        <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
        <html>
        <head>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
        <title>Insert title here</title>
        </head>
        <body>
        	歡迎: ${userName }
        </body>
        </html>
                   

繼續閱讀