spring mvc基礎篇(二):初識檢視解析器,核心配置檔案的位置,亂碼處理
2.1 檢視技術簡介
通常像spring mvc 這樣的web框架都會有相應的定位檢視技術,spring提供了檢視解析器來解析ModelAndView模型資料到特定的檢視上,spring提供了ViewResolver和View兩個特別重要的介面,ViewResolver提供了從檢視名稱到實際檢視的對映,View處理請求的準備的工作,並將該請求提交給某種具體的檢視解析器。
2.2 開發環境
開發工具:myeclipse8.6.1
資料庫:mysql5.5.23
伺服器: tomcat6.0.37
框架版本: spring3.2.2
2.3 案例開發步驟
步驟一:在myeclipse8.6中新建web工程springmvc02,拷貝如下包到lib目下:
步驟二:編寫web.xml 配置檔案,程式碼如下:
=================================web.xml========================
<?xmlversion="1.0" encoding="UTF-8"?>
<web-appversion="2.4" xmlns="http://java.sun.com/xml/ns/j2ee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee
http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
<!-- 配置spring的字符集過濾 -->
<filter>
<filter-name>encode</filter-name>
<filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>UTF-8</
</init-param>
<init-param>
<param-name>forceEncoding</param-name>
<param-value>true</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>encode</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<servlet>
<servlet-name>springmvc</servlet-name>
<servlet-class>
org.springframework.web.servlet.DispatcherServlet
</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:configs/mymvc.xml</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>springmvc</servlet-name>
<url-pattern>*.do</url-pattern>
</servlet-mapping>
</web-app>
================================================================
知識講解:<init-param>是用來配置springmvc核心配置檔案的位置(如果我們不想讓它在預設路徑下的話),這時候,它就可以放到專案的src目錄下,如圖所示:
這時候就不用放到web-inf路徑下了。那麼,有同學會問了:<param-name>contextConfigLocation</param-name>這個裡面的contextConfigLocation可以不可以隨便亂寫,當然不可以啦。前面提到過DispatcherServlet還與spring 的IOC容器完全整合在一起,從而可以更好地使用spring 的其它功能。這時就用到spring的依賴注入功能:根據contextConfigLocation把路徑注入到DispatcherServlet中以供解析。我們可以從它的原始碼裡面找到依賴注入的蛛絲馬跡,如下圖所示:
DispatcherServlet繼承自FrameworkServlet,繼續開啟FrameworkServlet的原始碼,可以找到真相:
在上面還可以找到定義【private String contextConfigLocation;】,這是不是我們spring裡面學的典型的依賴注入?!
對字元亂碼處理的講解:<filter>到<filter-mapping>的這一段都是為了處理post請求的中文亂碼問題的。對於get請求,建議大家用字串轉碼的方式,因為這種情況不是很多,
當然我們也可以編寫過濾器的方式集中解決。字串轉碼的方式:
userName=new String(userName.getBytes("iso-8859-1"),"utf-8");
步驟三:建立Login.jsp,如下所示:
=========================Login.jsp===================================
<body>
<divid="show">
<formaction="login.do"method="post">
<tableborder="1px"cellpadding="0">
<tr><td>請輸入使用者名稱:</td>
<td><inputtype="text"name="userName"/></td></tr>
<tr><td>請輸入密碼:</td>
<td><inputtype="password"name="passWord"/></td></tr>
<tr><tdcolspan="2">
<inputtype="submit"value="提交"/></td></tr>
</table>
</form>
</div>
</body>
=====================================================================
步驟四:在核心配置檔案mymvc.xml裡面完善如下配置
================================mymvc.xml==========================
<beans>
<beanid="simpleUrlMapping" class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">
<propertyname="mappings">
<props>
<propkey="/login.do">loginControl</prop>
</props>
</property>
</bean>
<bean id="resourceView" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<propertyname="prefix"value="/pages/"></property>
<propertyname="suffix"value=".jsp"></property>
</bean>
<bean id="loginControl" class="com.wx.controls.LoginControl"></bean>
</beans>
====================================================================
知識講解:【<beanid="resourceView">】這段是配置一個檢視解析器,有上面好處呢?跟第一案例相比,它提供了一個檢視定位的功能。例如我們控制器裡面返回的是”index”,那麼它能自動定位到/pages/index.jsp,也就是說自動加上了字首和字尾。Prefix表示字首,suffix表示字尾。
步驟五:在com.wx.controls包下面編寫控制器LoginControl.java,如下:
==========================LoginControl.java==========================
public class LoginControlimplements Controller {
public ModelAndView handleRequest(HttpServletRequest request,
HttpServletResponseresponse) throws Exception {
String userName=request.getParameter("userName");
ModelAndView mav = new ModelAndView("ShowUser");
mav.addObject("userStr", userName);
return mav;
}
}
==================================================================
步驟六:在webroot目錄下建立目錄pages,然後在裡面建立ShowUser.jsp
================================ShowUser.jsp=======================
<body>
<h1>歡迎您:${requestScope.userStr}</h1>
</body>
==================================================================
步驟七: 啟動tomcat,釋出專案,在位址列輸入 http://localhost:8080/springmvc02/Login.jsp 進行測試,得到結果:
聯絡作者