上一篇我們結束了配置式開發,配置式開發目前在企業中用的并不是很多,大部分企業都在使用注解式開發,是以今天我們就來學習注解式開發。所謂SpringMVC注解式開發是指,處理器是基于注解的類的開發方式。對于每一個定義的處理器,無需在配置檔案中逐個注冊,隻需在代碼中通過對類與方法的注解,便可完成注冊。
一、注冊元件掃描器
這裡說的元件即處理器,需要指定處理器所在的基本包。
<?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:context="http://www.springframework.org/schema/context"
xmlns:aop="http://www.springframework.org/schema/aop"
xmlns:tx="http://www.springframework.org/schema/tx"
xmlns:mvc="http://www.springframework.org/schema/mvc"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context.xsd
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop.xsd
http://www.springframework.org/schema/tx
http://www.springframework.org/schema/tx/spring-tx.xsd
http://www.springframework.org/schema/mvc
http://www.springframework.org/schema/mvc/spring-mvc.xsd">
<!-- 注冊元件掃描器 -->
<context:component-scan base-package="cn.wechatbao.controller"></context:component-scan>
</beans>
二、第一個注解式Demo
1:Controller
package cn.wechatbao.controller;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.servlet.ModelAndView;
@Controller
public class MyController {
@RequestMapping("/my.do")
public ModelAndView first(HttpServletRequest request,
HttpServletResponse response) throws Exception {
ModelAndView mv = new ModelAndView();
mv.addObject("message", "第一個注解式開發程式");
mv.setViewName("/WEB-INF/jsp/welcome.jsp");
return new ModelAndView("");
}
}
2:JSP頁面(welcome.jsp)
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>SpringMVC1</title>
</head>
<body>
${message }
</body>
</html>
3:完整的項目結構
![](https://img.laitimes.com/img/9ZDMuAjOiMmIsIjOiQnIsISM9AnYldnJwAzN9c3Pn5GcuQ0MlMWbidXND1ENZpmT6NGRNRTVU1EdrpWTxkkeNNTTU1EeNRVT6FEVPhXQq1EdrR0T0UEROBDO510drRVT3lkeMVzZE9EeRRkT2NmMiNnSywEd5ITW110MaZHetlVdO1GT0UERNl3YXJGc5kHT20ESjBjUIF2Lc12bj5SYphXa5VWen5WY35iclN3Ztl2Lc9CX6MHc0RHaiojIsJye.png)
三、命名空間的配置
一般情況下,我們開發時,一個Controller類就是一個子產品,而裡面的所有處理器方法就是該子產品的不同業務功能。這個時候,我們Controller與Controller之間就要用路徑來區分開來。以表示不同的業務子產品。這個時候,隻需要在類上再加上@RequestMapping("/test")注解就OK了。
完整的類如下:
package cn.wechatbao.controller;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.servlet.ModelAndView;
@Controller
@RequestMapping("/test")
public class MyController {
@RequestMapping("/first.do")
public ModelAndView first(HttpServletRequest request,
HttpServletResponse response) throws Exception {
ModelAndView mv = new ModelAndView();
mv.addObject("message", "第一個注解式開發程式方法一");
mv.setViewName("/WEB-INF/jsp/welcome.jsp");
return mv;
}
@RequestMapping("/second.do")
public ModelAndView second(HttpServletRequest request,
HttpServletResponse response) throws Exception {
ModelAndView mv = new ModelAndView();
mv.addObject("message", "第一個注解式開發程式方法二");
mv.setViewName("/WEB-INF/jsp/welcome.jsp");
return mv;
}
}
四、請求中通配符的使用
在實際開發的過程中,我們可能會遇到請求中的方法開頭或結尾是固定的,其它字元是可變的,比如:
http://localhost:8080/SpringMVC/usermanager/user-add.do
http://localhost:8080/SpringMVC/usermanager/user-edit.do
假設上面URL中usermanager是子產品名(也就是我們說的命名空間),user-add.do和user-edit.do是具體的請求。但是添加和修改我們完全可以用一個處理器方法來解決。這個時候用通配符就簡單多了。其實配置起來也特别簡單,隻需要在處理器方法上面的注解裡加*就可以了。如下
@RequestMapping("/user-*.do")
public ModelAndView userAddOrUpdate(HttpServletRequest request,
HttpServletResponse response) throws Exception {
ModelAndView mv = new ModelAndView();
mv.addObject("message", "使用者的添加或修改功能");
mv.setViewName("/WEB-INF/jsp/welcome.jsp");
return mv;
}