配置式(不使用注解):在springmvc的配置檔案中,使用标簽建立對象
步驟:
1.建立 web 項目
2.導入jar包:
1)spring的核心jar:spring-beans.jar,spring-core.jar,spring-context.jar,spring-exression.jar
2)spring-aop.jar
3)spring-web.jar
4)springmvc架構(spring架構的一個子產品):spring-webmvc.jar
5)日志:commons-logging.jar, log4j.jar
3.重點:修改web.xml
1)注冊springmvc中核心對象 DispatcherServlet(中央排程器), 它的父類是繼承HttpServlet.
DispatcherServlet是一個Servlet. 用Servlet的方式使用它。
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://xmlns.jcp.org/xml/ns/javaee" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd" id="WebApp_ID" version="3.1">
<display-name>test-springmvc</display-name>
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
<!--
注冊中央排程器(DispatherServlet)
DispatcherServlet在被建立後,會調用Servlet的init()方法,在方法中會建立springmvc的容器對象DispatcherServlet在被建立後,會調用Servlet的init()方法,在方法中會建立springmvc的容器對象
建立容器(WebApplicationContext)對象時,會加載配置檔案,配置檔案的預設路徑是/WEB-INF/<servlet-name>-servlet.xml
如: /WEB-INF/myweb-servlet.xml
/WEB-INF/springmvc-servlet.xml/WEB-INF/springmvc-servlet.xml
-->
<servlet>
<servlet-name>springmvc</servlet-name>
<!--
Servlet對象建立的時候,會調用初始方法 init()
-->
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<!--
指定自定義的配置檔案 springmvc.xml就是自定義的配置檔案名
-->
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:springmvc.xml</param-value>
</init-param>
<!--
在伺服器(tomcat)啟動的時候,建立對象的。 load-on-startup标簽的值是 大于等于 0的整數
數值越小,伺服器建立對象的時間越早。
-->
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>springmvc</servlet-name>
<!--
配置<url-pattern>,目的是把請求的交給中央排程器對象, 隻有把請求交給中央排程器,才是經過springmvc架構處理
中央排程器是springmvc架構的入口,門戶。
<url-pattern>在架構中的使用,主要有兩種方式
1.擴充名: *.xxxx , xxx就是自定義的擴充名, 例如*.do, *.action, *.mvc等等,不能使用(*.jsp)
http://localhost:8080/myweb/some.do
http://localhost:8080/myweb/user/listUser.do
2.斜杠"/"
-->
//<url-pattern>*.do</url-pattern>
//如果改為/的話 項目中的靜态資源如js檔案\圖檔等會無法加載,因為沒有對應的處理器,這時需要在springmvc.xml中進行配置
<url-pattern>/</url-pattern>
</servlet-mapping>
</web-app>
2)DispatcherServlet(中央排程器)作用:接收使用者的請求, 把處理結果顯示給使用者。
DispatcherServlet可以看做是springmvc項目的入口。
3)DispatcherServlet也叫做前端控制器(front controller)
4.建立jsp,發起一個請求。
5.建立處理器類,配置式方式處理器類需要實作Controller接口
6.建立jsp,顯示請求的處理結果。
7.定義sringmvc的配置檔案(等同spring的配置檔案)
1)聲明處理器對象, 讓他接收某個請求。
<?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: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/mvc
http://www.springframework.org/schema/mvc/spring-mvc.xsd">
<!-- 聲明處理器對象, 讓他處理某個請求
class:處理器類的全限定名稱
id:對象的名稱, 對象的名稱表示請求的uri位址。
要求以“/”開頭,springmvc根據“/”判斷目前的對象能否處理請求。
“/”是用來差別處理器對象和其他普通對象的。
-->
<!-- 配置式的方式 -->
<bean id="/some.do" class="com.zm.test.controller.MyController" />
</beans>
2)聲明視圖解析器,處理視圖的建立
<!--
聲明視圖解析器對象, 處理視圖的(指定視圖檔案的路徑和擴充名):
中央排程器會調用視圖解析器處理視圖的 .
實作ViewResolver接口的類,叫做視圖解析器。
-->
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<!-- 指定字首:視圖的目錄 -->
<property name="prefix" value="/WEB-INF/jsp/" />
<!-- 指定字尾:視圖的檔案的擴充名 -->
<property name="suffix" value=".jsp" />
</bean>
<!-- 處理靜态資源的通路, 把靜态資源的請求,交給伺服器(tomcat),由伺服器一個名字叫default的Servlet處理靜态資源的通路。 -->
<!-- 以下方法二選一,推薦使用第二種-- >
<!--1. 預設把靜态資源的請求交給“default” -->
<mvc:default-servlet-handler/>
<!-- 如果伺服器不是tomcat,沒有“default",這個時候需要指定處理靜态資源的Servlet名稱
例如使用WebLogic服務, 處理靜态資源的Servlet:FileServlet
-->
<!-- <mvc:default-servlet-handler default-servlet-name="FileServlet"/> -->
<!--2.或者使用 <mvc:resources> -->
<!-- 處理靜态資源,由架構自己處理
架構會建立一個處理器對象ResourcesHttpRequestHandler (MyController),
ResourcesHttpRequestHandler處理靜态資源請求的, 這種方式由架構自己内部處理靜态資源的。
location:靜态資源在web應用中的目錄(不能是/WEB-INF)
mapping:通路靜态資源的uri位址
通配符 :
1. * :表示任意的檔案
2. ** :表示任意的目錄和檔案
-->
<mvc:resources location="/html/" mapping="/html/**" />
<mvc:resources location="/images/" mapping="/images/**" />
8.修改處理器方法,使用邏輯視圖名稱。
public class MyController implements Controller {
/**
* 在處理器類中定義的方法叫做處理器方法。
*
* handleRequest()可以做是Servlet中的doGet,doPost
*
* Servlet中儲存資料 request.setAttribute();
* Servlet中指定視圖 request.getRequestDispather("/xxx.jsp").forward();
*
* 傳回值:ModelAndView
* Model:表示資料的(MVC中M)
* View:表示視圖的(MVC中V)
*/
@Override
public ModelAndView handleRequest(HttpServletRequest request, HttpServletResponse response) throws Exception {
System.out.println("MyController的handleRequest()");
//調用Service處理請求,把結果顯示到視圖頁面。
ModelAndView mv = new ModelAndView();
//儲存資料 ,架構對addObject()的操作是執行request.setAttribute("msg","Hello SpringMVC");
mv.addObject("msg","Hello SpringMVC");
//指定視圖:視圖的完整路徑
//架構對視圖的處理:request.getRequestDispather("/show.jsp").forward();
//mv.setViewName("/show.jsp");
//mv.setViewName("/WEB-INF/jsp/show.jsp");
//mv.setViewName("/WEB-INF/jsp/other.jsp");
//在配置檔案中配置了視圖解析器之後
//使用視圖的邏輯名稱(視圖檔案的名字),配合視圖解析器, 組成完整的視圖路徑
//等同于mv.setViewName("/WEB-INF/jsp/show.jsp");
mv.setViewName("show");
//當處理器方法傳回mv對象後,才執行request.setAttibute, forward()
return mv;
}
}
index.jsp代碼
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
index.jsp <br>
<a href="some.do" target="_blank" rel="external nofollow" >發起請求some.do</a>
</body>
</html>
show.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
/WEB-INF/jsp/show.jsp,使用了視圖解析器<br>
msg: ${msg }
</body>
</html>
other.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
/WEB-INF/jsp/other.jsp<br>
msg: ${msg }
</body>
</html>