天天看點

建立SpringMVC項目及配置檔案(配置式)配置式(不使用注解):在springmvc的配置檔案中,使用标簽建立對象

配置式(不使用注解):在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>
           

繼續閱讀