建立SpringMVC專案(註解式)
阿新 • • 發佈:2019-01-10
註解式的springmvc專案
註解式的springmvc:就是使用註解@Controller,建立處理器物件。
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-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> </servlet-mapping> </web-app>
2)DispatcherServlet(中央排程器)作用:接收使用者的請求, 把處理結果顯示給使用者。
DispatcherServlet可以看做是springmvc專案的入口。
3)DispatcherServlet也叫做前端控制器(front controller)
4.新建jsp,發起一個請求。
5.新建處理器類,普通的java類
1)在類的上面加入@Controller, 表示建立處理器類的物件
2)在類中定義方法, 在方法的上面加入@RequestMapping()
6.新建jsp,顯示請求的處理結果。
7.定義sringmvc的配置檔案(等同spring的配置檔案)
1)宣告元件掃描器,指定@Controller註解所在的包名
<?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根據“/”判斷當前的物件能否處理請求。
“/”是用來區別處理器物件和其他普通物件的。
-->
<context:component-scan base-package="com.zm.controllers"/>
<!-- 靜態資源 -->
<mvc:default-servlet-handler/>
<!-- 註解驅動 -->
<mvc:annotation-driven/>
</beans>
2)宣告檢視解析器,處理檢視的建立
<!--
宣告檢視解析器物件, 處理檢視的(指定檢視檔案的路徑和副檔名):
中央排程器會呼叫檢視解析器處理檢視的 .
實現ViewResolver介面的類,叫做檢視解析器。
-->
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<!-- 指定字首:檢視的目錄 -->
<property name="prefix" value="/WEB-INF/jsp/" />
<!-- 指定字尾:檢視的檔案的副檔名 -->
<property name="suffix" value=".jsp" />
</bean>
8.修改處理器方法,使用邏輯檢視名稱。
/**
* @Controller:建立處理器類的物件, 預設是單例物件
* 位置:在類的上面
*
*/
@Controller
@RequestMapping("test") //模組名稱 如127.0.0.1:8080/myspringmvc/test/some.do
public class MyController {
/**
* 定義方法, 處理請求。
* @RequestMapping: 請求對映。
* 作用:把請求對映到某個方法, 由這個方法處理請求。把請求繫結到方法。
* 屬性:1.value,表示請求的uri地址(資源名稱), uri的值是唯一的。不能重複。
* uri可以用“/”開頭, “/”開頭表示絕對路徑,從web專案的根目錄開始
* 也可以不加“/”,相對地址
*
* 位置: 1.在方法的上面
* 2.在類的上面
*
* 處理器方法:使用@RequestMapping修飾的方法。叫做處理器方法
*/
//value可以省略 如@RequestMapping("/some.do")
//method 只處理post請求 預設是get 不指定的話沒有限制
@RequestMapping(value={"/some.do","/first.do"},method = RequestMethod.POST)
public ModelAndView doSome(){ //預設doGet doSome()名字可以隨意定義
ModelAndView mv = new ModelAndView();
//呼叫Service,處理請求, 把結果輸出給瀏覽器
mv.addObject("msg", "SpringMVC Annotation");
mv.addObject("fun", "doSome");
//指定檢視
mv.setViewName("show");
return mv;
}
//指定some.do中必須有name ,age兩個引數, 可以有其他引數
@RequestMapping(value="some.do",params={"name","age"})
//other.do必須有age ,不能有name ,可以有其他引數
@RequestMapping(value="other.do",params={"!name","age"})
//first.do必有name ,age ,同時name的值必須是zs, age的值必須是23;可以有其他引數
@RequestMapping(value = "first.do",params={"name=zs","age=23"})
//可以定義多個處理器方法
//@RequestMapping(value={"other.do","second.do"})
public ModelAndView doOther(){ //doGet
ModelAndView mv = new ModelAndView();
//呼叫Service,處理請求, 把結果輸出給瀏覽器
mv.addObject("msg", "SpringMVC Annotation");
mv.addObject("fun", "doOther");
//指定檢視
mv.setViewName("show");
return mv;
}
/**
* 逐個接收請求的引數:要求是請求中的引數名和處理器方法的形參名一樣,按名稱對應一一賦值
* 框架接收引數:
* 1.使用request.getParameter()接收引數
* String strName = request.getParameter("name");
* String strAge = request.getParameter("age");
*
* 2. 當處理器的介面卡物件呼叫處理器方法doSome()的時候,按名稱給引數賦值
* doSome(strName, Integer.parseInt(strAge))
* 框架提供了String到int , long ,float ,double的型別轉換。
*/
@RequestMapping(value="some.do")
public ModelAndView doSome(Integer age,String name){
//如果用int age的話,當沒有獲取到age引數時,型別轉換會報錯,如果用包裝類Integer會給他初始化為null
ModelAndView mv = new ModelAndView();
System.out.println("name:"+name+"|age:"+age);
//呼叫Service,處理請求, 把結果輸出給瀏覽器
mv.addObject("myname", name);
mv.addObject("myage", age);
//指定檢視
mv.setViewName("show");
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">發起請求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>