1. 程式人生 > >Java框架(十四)之springMVC的註解開發

Java框架(十四)之springMVC的註解開發

一、註解入門

1.配置springMVC配置檔案

<!-- 添加註解掃描 -->
<context:component-scan base-package="com.qf"></context:component-scan>
<!-- 添加註解對映器 -->
<bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping"></bean>
<!-- 註解介面卡 -->
<bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter"></bean>
<!-- 檢視解析器 -->
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix" value="/WEB-INF/jsps/"></property>
<property name="suffix" value=".jsp"></property>
</bean>		

對映器和介面卡的註解版

2.配置web.xml檔案

 <!-- springmvc的核心控制器
  	DispatcherServlet
   -->
   <servlet>
   		<servlet-name>springmvc</servlet-name>
   		<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
   		<!-- 指定springmvc的配置檔案 
   			預設路徑是:/WEB-INF/servlet的name-servlet.xml
   		-->
   		<init-param>
   			<param-name>contextConfigLocation</param-name>
   			<param-value>classpath:springmvc-servlet.xml</param-value>
   		</init-param>
   </servlet>
   <servlet-mapping>
   		<servlet-name>springmvc</servlet-name>
   		<url-pattern>/</url-pattern><!-- /*:jsp也會被攔截 -->
   </servlet-mapping>
   
   <!-- 處理post請求亂碼 -->
   <filter>
	   	<filter-name>encodingFilter</filter-name>
	   	<filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
	   	<init-param>
	   		<param-name>encoding</param-name>
	   		<param-value>utf-8</param-value>
	   	</init-param>
   </filter>
   <filter-mapping>
	   	<filter-name>encodingFilter</filter-name>
	   	<url-pattern>/*</url-pattern>
   </filter-mapping>

二、Controller

@Controller:用於標識是處理器類.表示把我的控制器物件交給spring來建立。

<!-- 添加註解掃描!!! -->
	<context:component-scan base-package="com.zxy.controller"></context:component-scan>

三、RequestMapping

@RequestMapping:請求到處理器功能方法的對映規則; URL路徑對映:@RequestMapping(value="/user")@RequestMapping("/user")

@RequestMapping("/useredit/{userid}")
    	public String useredit(@PathVariable String userid) throws Exception{
    		//方法中使用@PathVariable獲取useried的值,		model.addAttribute("userid", userid);
    		return"/user/useredit";
    	}   useredit?id=1;
    實現restFul,所有的url都是一個資源的連結,有利於搜尋引擎對網址收錄。
    多個佔位符:
    @RequestMapping("/useredit/{groupid}/{userid}")
    public String useredit(@PathVariable String groupid,@PathVariable String userid) throws Exception{
    		//方法中使用@PathVariable獲取useried的值		model.addAttribute("groupid", groupid);
    		return"/user/useredit";
    	}

四、RequestParam

value:引數名字,即入參的請求引數名字,如value=“studentid”表示請求的引數區中的名字為studentid的引數的值將傳入; required:是否必須,預設是true,表示請求中一定要有相應的引數,否則將報400錯誤碼; defaultValue:預設值,表示如果請求中沒有同名引數時的預設值

public String userlist(			@RequestParam(defaultValue="2",value="group",required=true) String groupid) {
}

形參名稱為groupid,但是這裡使用value="group"限定引數名為group,所以頁面傳遞引數的名必須為group。這裡通過required=true限定groupid引數為必需傳遞,如果不傳遞則報400錯誤,由於使用了defaultvalue=”2”預設值即使不傳group引數它的值為”2”,所以頁面不傳遞group也不會報錯,如果去掉defaultvalue=”2”且定義required=true則如果頁面不傳遞group則會報錯。

五、Redirect

Controller方法返回結果重定向到一個url地址,如果方式:

return "redirect:/user/userlist.do";

注意: • redirect:add.do 與 redirect:/user/add.do" 同一個類 在同一個類裡面進行跳轉。上面2個都可以實現跳轉。但是有區別: 第一個是同一個根路徑下面跳轉。第二個是在專案路徑下進行跳轉。 • 不同的類進行跳轉 不同的類進行跳轉只能使用:redirect:/user/add.do進行跳轉。即是從專案路徑下來查詢。 redirect方式相當於“response.sendRedirect()”,轉發後瀏覽器的位址列變為轉發後的地址,因為轉發即執行了一個新的request和response。 由於新發起一個request原來的引數在轉發時就不能傳遞到下一個url,如果要傳引數可以/user/userlist.do後邊加引數,如下: /user/userlist.action?groupid=2&……

六、Forward

controller方法執行後繼續執行另一個controller方法。

return "forward:/user/userlist.action";

forward方式相當於“request.getRequestDispatcher().forward(request,response)”,轉發後瀏覽器位址列還是原來的地址。轉發並沒有執行新的request和response,而是和轉發前的請求共用一個request和response。所以轉發前請求的引數在轉發後仍然可以讀取到。

@RequestMapping("/c")
	public String c(String groupid,UserVo userVo)throws Exception{		
		System.out.println("...c...."+groupid+"...user..."+userVo.getUser());
		return "forward:/to/d.action";
	}	
	@RequestMapping("/d")
	public String d(String groupid,UserVo userVo)throws Exception{		
		System.out.println("...d...."+groupid+"...user..."+userVo.getUser());
		return "success";
}

注意:@ResponseBody (把方法的返回值轉成json) @RequestBody