簡單的實例
學習了SpringMVC 的整體架構,SpringMVC應用開發一般包括以下幾步
- 配置web.xml,指定業務層對應的Spring配置文件,定義DispatcherServlet(也可以編程配置)
- 編寫處理請求的控制器
- 編寫視圖對象
- 配置SpringMVC的配置文件,使控制器 、視圖解析器等生效
以下是項目結構
1.1 web.xml
上一頁已經很詳細的講解了
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
version="4.0">
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/appcationContext.xml</param-value>
</context-param>
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<servlet>
<servlet-name>springmvc</servlet-name>
<servlet-class>
org.springframework.web.servlet.DispatcherServlet
</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>springmvc</servlet-name>
<url-pattern>*.html</url-pattern>
</servlet-mapping>
</web-app>
1.2.Java配置 與web.xml 配置等效
package com.config;
import org.springframework.web.WebApplicationInitializer;
import org.springframework.web.context.support.XmlWebApplicationContext;
import org.springframework.web.servlet.DispatcherServlet;
import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.ServletRegistration;
public class SpringmvcApplicationInitializer implements WebApplicationInitializer {
@Override
public void onStartup(ServletContext servletContext) throws ServletException {
XmlWebApplicationContext appContext = new XmlWebApplicationContext();
appContext.setConfigLocation("/WEB-INF/springmvc-servlet.xml");
ServletRegistration.Dynamic dynamic = servletContext.addServlet("dispatcher", new DispatcherServlet(appContext));
dynamic.setLoadOnStartup(1);
dynamic.addMapping("*.html*");
}
}
- 編寫處理請求的控制器
package com.sjy;
@Controller // 使用Controller 註解將一個POJO轉化爲處理請求的控制器
@RequestMapping("/user")//通過RequestMapping爲控制器指定處理那些URL的請求
public class UserController {
@RequestMapping("/register")
public String register(){
return "register";
}
@RequestMapping(method = RequestMethod.GET)
public ModelAndView user(){
ModelAndView modelAndView = new ModelAndView();
modelAndView.setViewName("c");
modelAndView.addObject("sjy","天天向上");
return modelAndView;
}
@RequestMapping("/s")
@ResponseBody
public String s(){
return "register";
}
}
3.視圖對象
register.jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>添加用戶</title>
</head>
<body>
<div>
<%-- 用於跳轉路徑 --%>
<a href="${pageContext.request.contextPath}/user.html">sssss</a>
</div>
</body>
</html>
c.jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" pageEncoding="utf-8"%>
<html>
<head>
<title>成功</title>
</head>
<body>
<div>
恭喜,用戶${sjy} ,嘻嘻
</div>
</body>
</html>
- 配置Spring MVC的配置文件
springmvc-servlet.xml
<?xml version="1.0" encoding="UTF-8"?>
<?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.xsd
http://www.springframework.org/schema/mvc
http://www.springframework.org/schema/mvc/spring-mvc.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context.xsd">
<!--使Spring掃描com.sjy包下的所有類,讓標註Spring註解的類生效-->
<context:component-scan base-package="com.sjy"/>
<!--定義了一個視圖名稱解析器,將視圖邏輯名解析爲/WEB_INF/views/<viewsName.jsp> -->
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"
p:prefix="/WEB-INF/views/"
p:suffix=".jsp"/>
</beans>
tomcat運行
回顧SpringMVC處理請求的整個過程
- DispatcherServlet接受到客戶端的/user.html請求
- DispatcherServlet使用DefaultAnnotationHandlerMapping查找負責處理該請求的處理器
- DispatcherServlet將請求分發給名爲/user.html的UserController處理器。
- 處理器完成業務處理後,返回ModelAndView對象,其中View名字爲c,包含一個鍵位sjy的字符串。
- DispatcherServlet調用InternalResourceViewResolver組件,對ModelAndView中的邏輯視圖名進行解析,得到真實的/WEB-INF/views/c.jsp視圖對象。
- DispatcherServlet使用/WEB-INF/views/c.jsp對模型的中的”天天向上“進行渲染。
- 返回響應