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