springMVC基礎知識小結
阿新 • • 發佈:2018-05-08
路徑 如何 aop path 區別 ESS encoding 解析 無法找到
SpringMVC學習筆記 第一講 簡單使用SpringMVC框架 通過springMVC做一個簡單的登錄功能,從而簡單了解一下SpringMVC的運行流程: 1.導入相應的jar包 spring-webmvc.jar包 2.SpringMVC配置文件springmvc.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:aop="http://www.springframework.org/schema/aop" xmlns:tx="http://www.springframework.org/schema/tx" 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/aop http://www.springframework.org/schema/aop/spring-aop-3.0.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-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="com.xt.controller"></context:component-scan> <!-- 前後綴 --> <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"> <property name="prefix" value="/WEB-INF/views/"></property> <property name="suffix" value=".jsp"></property> </bean> </beans> 3.在web.xml中,配置springmvc的入口,以及初始參數 <?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>spring</servlet-name> <!-- SpringMVC入口 --> <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> <init-param> <param-name>contextConfigLocation</param-name> <!-- spring配置文件所在的路徑 如果不配置需要將配置文件的名稱設置為spring-servlet.xml --> <param-value>classpath:springmvc.xml</param-value> </init-param> <!-- 啟動加載 --> <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <servlet-name>spring</servlet-name> <url-pattern>/</url-pattern> </servlet-mapping> </web-app> 4.login.jsp: <form action="login/userLogin" method="post"> <ul> <li>用戶名:<input type="text" name="userName"/></li> <li>密碼:<input type="password" name="pwd"></li> <li> <input type="submit" name="登錄"> </li> </ul> </form> 5.LoginController.class文件: @Controller @RequestMapping("/userLogin") public class LoginController{ @RequestMapping("/login") public String login(String userName,String pwd){ Systom.out.println("用戶名:"+userName); Systom.out.println("密碼:"+pwd); if(userName.equals("張三")&&pwd.equals("123")) return "success"; else return "error"; } } 解析: (1).因為在LoginController.class中,使用了註解,所以,在springmvc的配置文件中,我們需要 配置對註解的掃描範圍。因為LoginController.class在com.xt.controller包下,所以我們就掃描 該包下的所有註解。base-package就是要掃描的包。否則註解無效 (2). 對於轉發,我們通常會在COntroller層中返回一個字符串,該字符串是即將跳轉的目標地址。不含 後綴名。所以,在配置文件中會配置前後綴。 <property name="prefix" value="/WEB-INF/views/"></property>代表目標文件所在的位置; <property name="suffix" value=".jsp"></property>代表目標文件的文件類型 (3).在web.xml文件的配置中,我們需要註意的是首先要配置springmvc的入口,其次是配置文件springmvc.xml 的位置路徑以及文件名稱。 (4).對於普通的從頁面到controller層的參數傳遞,有多種方式。在這裏我們首先學習最基本的傳參方式。 也就是頁面的name屬性的值與controller層的方法中的形參名稱相同。還有多種傳參方式,在下一章中 進行詳細解說。 (5).僅僅到這裏,我們基本完成了從頁面傳參以及轉發的過程,可以進行簡單的開發了。但是需要註意的是, 我們發現,當頁面傳遞參數到controller層中時,發生了亂碼的現象。處理方法就是在web.xml中配置一個 字符編碼的過濾器。即: <!-- 字符編碼過濾器 --> <filter> <filter-name>encodingFilter</filter-name> <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class> <init-param> <param-name>encoding</param-name> <param-value>UTF-8</param-value> </init-param> <init-param> <param-name>forceEncoding</param-name> <param-value>true</param-value> </init-param> </filter> <filter-mapping> <filter-name>encodingFilter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> 這樣就解決了傳參亂碼的現象。當然也可以不在web.xml中寫,可以創建一個filter類進行攔截。 第二講 springMVC的傳參方式 在之前的講解中,我們使用了最簡單的傳參方式,就是讓頁面的name屬性與controller層中方法中的 形參名稱相同。還有一種傳參的方式是由一名程序員在項目開發中實現的,叫做RestFul。這並不是 一種新的編碼方式,而是一種風格。 例如: @RequestMapping("/login/{userName}/{pwd}") public String login(@PathVariable String userName,@PathVariable String pwd){ ....... } 在login.jsp中: <a href="login/張三/123456">登錄</a> 這樣也可以將參數傳到後臺。 註意: 在@RequestMapping("/login/{userName}/{pwd}")中,{}與{}之間是用什麽分隔符隔開,在前臺就要用 相同的分隔符隔開,否則會找不到請求路徑。 例如: @RequestMapping("/login/{userName}_{pwd}") 那麽在前臺中: <a href="login/張三_123456">登錄</a> 在剛才的例子中,我們使用到了註解@PathVariable。否則參數無法傳遞到後臺,結果是null。細心的 同學會發現,在剛才的例子中,@RequestMapping中的參數名稱與方法中的形參名稱相同,即: @RequestMapping("/login/{userName}/{pwd}") public String login(@PathVariable String userName,@PathVariable String pwd){ ....... } 如果不相同就會報錯: 在請求路徑中無法找到方法中所需的參數。 那麽,假如哪天我就是想讓它們不相同怎麽辦? 例如: @RequestMapping("/login/{a}/{b}") public String login(@PathVariable String userName,@PathVariable String pwd){ ....... } 這樣肯定會報錯,那麽該怎麽處理呢? 很簡單,就是在@PathVariable中指明參數: @RequestMapping("/login/{a}/{b}") public String login(@PathVariable("a") String userName,@PathVariable("b") String pwd){ ....... } 第三講 SpringMVC的轉發與重定向以及靜態資源的放行 1.轉發 在開發過程中,為了提升安全性,我們通常會將jsp頁面放在web-inf目錄下。因為在web-inf目錄下的文件是 不能直接訪問的。那麽我們該如何訪問這些文件呢? (1).首先我們要在springMVC的配置文件中,配置視圖解析。也就是前後綴: <!-- 前後綴 --> <bean> class="org.springframework.web.servlet.view.InternalResourceViewResolver"> <property name="prefix" value="/WEB-INF/views/"></property> <property name="suffix" value=".jsp"></property> </bean> prefix:前綴(路徑) suffix:後綴 (2).在controller中,在進行轉發的時候,直接返回一個字符串,該字符串就是即將要轉發到的文件的名稱。 例如: @RequestMapping("/login") public String login(String userName,String pwd){ System.out.println(userName); System.out.println(pwd); if(userName.equals("張三")&&pwd.equals("123456")) return "success"; else return "error"; } return "success"就是轉發到success.jsp。 (3).使用ModelAndView進行轉發 官方為我們提供了一個類叫做ModelAndView,使用該類也可進行轉發與重定向。 例如: @RequestMapping("/login") public ModelAndView login(String userName,String pwd){ ModelAndView mv = null; if(2>1){ mv = new ModelAndView("success"); mv.add("userName",userName); mv.add("pwd",pwd); }else{ mv = new ModelAndView("error"); } return mv; } 解析: ModelAndView類為我們提供了有參構造方法,該構造方法的參數就是我們即將要轉發到的目標文件名稱。 add()方法能夠將要轉發所帶的的參數帶到目標位置。 2.重定向 (1).在進行重定向的時候,可以使用redirect 例如: @RequestMapping("/login") public String login(String userName,String pwd){ System.out.println(userName); System.out.println(pwd); if(userName.equals("張三")&&pwd.equals("123456")) return "redirect:/success.jsp"; else return "redirect:/error.jsp"; } 註意: 在進行重定向 的時候,加"/"與不加"/"是有區別的: (1).加"/"表示從根目錄進行查找 (2).不加"/"表示從本類開始查找 (2).靜態資源的放行 在開發過程中,我們會引入很多js或者css文件,那麽springMVC攔截器可能會將這些文件攔截, 所以此時需要對這些文件進行放行。 <!-- 靜態資源放行 --> <servlet-mapping> <servlet-name>default</servlet-name> <url-pattern>*.js</url-pattern> </servlet-mapping> <servlet-mapping> <servlet-name>default</servlet-name> <url-pattern>*.css</url-pattern> </servlet-mapping>
springMVC基礎知識小結