SpringMVC應用的配置步驟:
1,將所有的jar包導入到lib文件夾下;
jar在spring框架包-->libs-->所有的RELEASEjar包;
2,先配置一個DispatcherServlet前端控制器;
這個控制器實質上是一個web.xml文件,在里面配置內容包括
<?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"> <servlet> <servlet-name>SpringMVCTest1</servlet-name> <servlet-class> org.springframework.web.servlet.DispatcherServlet </servlet-class> <init-param> <param-name>contextConfigLocation</param-name> <param-value>/WEB-INF/springmvc-config.xml</param-value> </init-param> <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <servlet-name>SpringMVCTest1</servlet-name> <url-pattern>/</url-pattern> </servlet-mapping> </web-app>
3,配置完前端控制器之后,接下來的步驟看你是打算用xml文件配置,還是用注解的方式了,在Spring2.5之后,都是推行:約定優於配置;
先講xml配置文件的方法:
其實,不管是哪一個,你都需要一個配置文件:springmvc-config.xml,在xml配置文件方法中,你需要在這個配置文件中配置handle,映射/hello請求;其實通俗地講就是要給你等一下輸網址的時候的最后那個請求,配置好這個請求的映射關系,當接收到這個請求之后,系統知道要調用哪個Controller來處理;下面這個是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" xsi:schemaLocation=" http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd"> <bean name = "/hello" class = "org.fkit.controller.HelloController"/> <bean class = "org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping"/> <bean class = "org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter"/> <bean class = "org.spirngframework.web.serlvet.view.InternalResourceViewResolver"/> </beans>
實際上這個springmvc-config就相當於一個橋梁,連接起了前端的請求和后台要處理的Controller之間的聯系;
4,那么接下來,我們就要正式開始寫controller了,也就是后台具體的業務邏輯;
在前面的<bean name = "/hello" class = "org.fkit.controller.HelloController"/>中我們已經寫出了這個HelloController控制器的路徑了,記得要前后一致,不然這個”springmvc-config橋梁“就顯得毫無意義了;
其中,用xml配置方法和注解方法也是有所不同的,xml配置方法主要是使用接口的方式,代碼如下;
package org.fkit.controller; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.springframework.web.servlet.ModelAndView; import org.springframework.web.servlet.mvc.Controller; public class HelloController implements Controller{ private static final Log logger = LogFactory.getLog(HelloController.class); @Override public ModelAndView handleRequest(HttpServletRequest request,HttpServletResponse response){ logger.info("handleRequest被調用"); ModelAndView mv = new ModelAndView(); //添加模型數據,可以是任意的POJO對象 mv.addObject("message","Hello World"); //設置邏輯視圖名,視圖解析器會根據該名字解析到具體的視圖頁面 mv.setViewName("/WEB-INF/content/welcome.jsp"); //返回ModelAndView對象 return mv; } }
5,這個Controller控制器在接受到請求之后,做了相關處理之后,要將數據返回到視圖中,使用了SpringMVC專有的ModelAndView數據傳輸模型,所以接下來,我們還要建一個jsp頁面來接收Controller發送過來的模型數據。並用顯示邏輯顯示出來;
這里要提一下,所有的jsp頁面都是放在WEB-INF/content目錄下,這樣做可以避免用戶直接訪問jsp頁面。做到SpringMVC的非侵入性;下面是welcome.jsp的代碼;
<%@ page language="java" contentType="text/html; charset=ISO-8859-1" pageEncoding="ISO-8859-1"%> <!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=ISO-8859-1"> <title>Insert title here</title> </head> <body> ${requestScope.message} </body> </html>
這里還用到了一點EL表達式的內容,關於EL表達式無法在jsp頁面中正常使用的問題,請自行百度喲。。。
6,測試應用;
做了這么多,嗶嗶了這么多,當然要測試一下來看看對不對啦。。
輸入網址:
http://localhost:8080/SpringMVCTest/hello 即可,注意到這里更以前不同的地方在於不需要寫.jsp文件后綴了。因為這只是一個請求而已;
好的,以上就是xml配置文件方法的SpringMVC應用的開發步驟;下面要講的是通過注解的方式來開發的步驟;
這里要提一點,其實這兩種不同的方式也是Spring的一大特色,而SpringMVC也是Spring的一部分;所以個人建議在學習SpringMVC之前可以先去學學Spring,當然了,Spring作為一個經老不衰的框架,所接觸的只是皮毛而已;個人而言;
跟xml配置方法相比,需要改動的步驟有兩個部分,一個是橋梁spingmvc-config,另一個是Controller控制器;其他的步驟都是一樣的;
springmvc-config.xml文件的改動,我們現在已經不再是通過xml配置的方式來尋找Controller了,而是通過掃描的方式來尋找Controller,
如果說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:mvc="http://www.springframework.org/schema/mvc" 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"> <context:component-scan base-package = "org.fkit.controller"/> <bean class = "org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping"/> <bean class = "org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter"/> <bean class = "org.springframework.web.servlet.view.InternalResourceViewResolver"/> </beans>
少了一個<bean name = "/hello" class = "org.fkit.controller.HelloController"/>,而多了一個路徑掃描,而且引進了另外兩個依賴約束mvc和context,看上去好像更麻煩了,但是從軟件工程化的角度來看,這樣更加靈活便利;因為你不用再每寫一個控制器就來這邊寫一個xml配置路徑了;
接下來是Controller控制器的改變了, 我們要通過注解方式給控制器注解一個辨識,這樣的話,才能讓springmvc-config掃描到;
上代碼;
package org.fkit.controller; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.servlet.ModelAndView; @Controller public class HelloController{ private static final Log logger = LogFactory.getLog(HelloController.class); @RequestMapping("/hello") public ModelAndView hello(){ logger.info("hello方法被調用"); ModelAndView mv = new ModelAndView(); mv.addObject("message","Hello World"); mv.setViewName("/WEB-INF/content/welcome.jsp"); return mv; } }
其中,@Controller是標注在這個Controller類里面,證明他是個Controller,然后springmvc-config會進來掃描這里面是否有@RequestMapping("***")標識,如果有的話,又是屬於哪一個的,這樣一直不停的尋找。