1. 程式人生 > >spring mvc基礎篇(二):初識檢視解析器,核心配置檔案的位置,亂碼處理

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</

param-value>

    </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 進行測試,得到結果:

 

聯絡作者