SpringMVC
參考網站how2java教程
一,springmvc入門
###1,導入jar包###
2,配置web.xml###
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee
http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
<servlet>
<servlet-name>springmvc</servlet-name>
<!-- DispatcherServlet就是一個Servlet,也是對請求進行轉發的Servlet。在這裏就是把所有的請求交給Servlet處理,而DispatcherServlet的工作就是把請求進行分發(把請求交給具體的Controller)-->
<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>/</url-pattern> <!--會攔截URL中帶“/”的請求。 -->
</servlet-mapping>
</web-app>
DispatcherServlet的作用:
1、文件上傳解析,如果請求類型是multipart將通過MultipartResolver進行文件上傳解析;
2、通過HandlerMapping,將請求映射到處理器(返回一個HandlerExecutionChain,它包括一個處理器、多個HandlerInterceptor攔截器);
3、通過HandlerAdapter支持多種類型的處理器(HandlerExecutionChain中的處理器);
4、通過ViewResolver解析邏輯視圖名到具體視圖實現;
5、本地化解析;
6、渲染具體的視圖等;
7、如果執行過程中遇到異常將交給HandlerExceptionResolver來解析。
3,配置springmvc-servlet.xml
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd">
<beans>
<bean id="simpleUrlHandlerMapping"
class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">
<property name="mappinng">
<props>
<prop key="/index">indexController</prop><!-- 訪問的路徑爲/index時候,映射交給id爲indexController的bean去處理。 -->
</props>
</property>
</bean>
<!-- id=indexController的bean配置爲類:IndexController -->
<bean id="indexController" class="controller.IndexController"></bean>
</beans>
4,控制類IndexController
springmvc通過ModelAndView對象把視圖(view)和模型(數據:Model)結合起來
package controller;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.mvc.Controller;
public class IndexController implements Controller {
public ModelAndView handleRequest(HttpServletRequest request, HttpServletResponse response) throws Exception {
ModelAndView mav = new ModelAndView("index.jsp");
mav.addObject("message", "Hello Spring MVC");
return mav;
}
}
springmvc通過ModelAndView對象把視圖(view)和模型(數據:Model)結合起來
ModelAndView mav = new ModelAndView("index.jsp");
mav.addObject("message", "Hello Spring MVC");
index.jsp代表視圖
模型代表message,內容是Hello Spring MVC
5,創建index.jsp
在WebContent目錄下創建index.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8" isELIgnored="false"%>
<h1>${message}</h1>
6,測試
輸入 http://localhost:8080/項目名/index
結果:
7,原理圖
二,視圖定位
作用:1,不是所有的視圖都會使用jsp來做,還可以是JSF,html 等其他的方式。
用這樣的手段,如果要把視圖從index.jsp改爲index.html,就不需要修改代碼,而僅僅需要修改配置文件即可。
2,另一個便利之處在於,如果要批量修改視圖文件所處於的位置,按照以前的辦法,也需要對每個類逐一修改,工作量大,容易出錯。 而使用這種方式,維護成本就小多了。
1,web.xml
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee
http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
<servlet>
<servlet-name>springmvc</servlet-name>
<!-- DispatcherServlet就是一個Servlet,也是對請求進行轉發的Servlet。在這裏就是把所有的請求交給Servlet處理,而DispatcherServlet的工作就是把請求進行分發(把請求交給具體的Controller)-->
<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>/</url-pattern> <!--會攔截URL中帶“/”的請求。 -->
</servlet-mapping>
</web-app>
2,springmvc-servlet.xml
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd">
<beans>
<!--作用是把視圖約定在 /WEB-INF/page/*.jsp 這個位置 -->
<bean id="viewResolver"
class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<!-- 前綴:ModelAndView mav = new ModelAndView("index")中的index文件放到WEB-INF/page目錄下 -->
<property name="prefix" value="/WEB-INF/page/"/>
<!-- 後綴:index文件格式爲jsp -->
<property name="suffix" value=".jsp"/>
</bean>
<bean id="simpleUrlHandlerMapping"
class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">
<property name="mapping">
<props>
<prop key="/index">indexController</props>
</props>
</property>
</bean>
<bean id="indexController" class="controller.IndexController"></bean>
</beans>
3,IndexController
package controller;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.mvc.Controller;
public class IndexController implements Controller {
public ModelAndView handleRequest(HttpServletRequest request, HttpServletResponse response) throws Exception {
ModelAndView mav = new ModelAndView("index");//視圖定位就是把index.jsp改爲index
mav.addObject("message", "Hello Spring MVC");
return mav;
}
}
4,index.jsp
把index.jsp移動到WEB-INF下的新建目錄page
三,註解方式
1,IndexController
package 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 IndexController {
@RequestMapping("/index")//表示路徑/index會映射到該方法上
public ModelAndView handleRequest(HttpServletRequest request, HttpServletResponse response) throws Exception {
ModelAndView mav = new ModelAndView("index");
mav.addObject("message", "Hello Spring MVC");
return mav;
}
}
2,springmvc-servlet.xml
<?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"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-3.0.xsd">
<context:component-scan base-package="controller" /><!-- 表示從包controller下掃描有@Controller註解的類-->
<bean id="irViewResolver"
class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix" value="/WEB-INF/page/" />
<property name="suffix" value=".jsp" />
</bean>
</beans>