spring MVC筆記3——傳遞參數和解決中文亂碼

一、 簡單環境的搭建:

          1、創建項目並加入jar

               

          2、配置web.xml

                <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:spring_mvc.xml</param-value>

                        </init-param>

                        <load-on-startup>1</load-on-startup>

                </servlet>

                <servlet-mapping>

                      <servlet-name>springMVC</servlet-name>

                      <url-pattern>/</url-pattern>

                </servlet-mapping>

        

         3、 配置spring_mvc.mxl(啓動掃描機制和配置視圖解析器)

                <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-3.2.xsd

                              http://www.springframework.org/schema/context

                              http://www.springframework.org/schema/context/spring-context-3.2.xsd

                              http://www.springframework.org/schema/mvc  

                              http://www.springframework.org/schema/mvc/spring-mvc-3.1.xsd">

   

                             <mvc:annotation-driven/>

                             <context:component-scan base-package="controller"/>

   

                             <bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">        

                                        <property name="prefix" value="/"/>     

                                        <property name="suffix" value=".jsp"/>     

                              </bean>    

                </beans>

               

          4、src目錄下創建一SpringCotnroller(有登陸方法)

                @Component

                @RequestMapping(value="/springController")

                publicclass SpringController extends MultiActionController{

          

                        @RequestMapping(value="/login", method=RequestMethod.POST)

                        public ModelAndView login(String name, String password){

                                     System.out.println(name);

                                     System.out.println(password);

                                    

                                     ModelAndView mv = new ModelAndView();

                                     mv.addObject("name",name);

                                     mv.addObject("password",password);

                                     mv.setViewName("/helloWorld");

                                     return mv;

                        }

                }

               環境搭建完成,詳細搭建前兩章有

 

二、參數傳遞

        1、直接傳參:

              這種方法很簡單,就像上面搭建環境時,在login()裏面添加namepassword兩參數,只需頁面傳入參數時有對應的參數名時,他

              就會自動接收到對於的參數。

              簡單的例子:

              添加一登陸頁面login.jsp和一相應頁面helloWorld.jsp

              login.jsp

              <body>

                     <form action="<%=path%>/springController/login">

                           名字<input type="text" name="name"><br>

                           密碼<input type="password" name="password"><br>

                           <input type="submit" value="提交">

                     </form>

              </body>

              helloWorld.jsp

              <body>

                    ${name}<br>

                    ${password}<br>

                    傳參成功

              </body>

              此時啓動服務器,輸入http://localhost:8080/springMVC/login.jsp  在login.jsp面中輸入名字和密碼,點擊登陸時,在控制檯打印出了名

              字和密碼,同時跳helloWorld.jsp頁面輸出相應的信息。

              

        2、實體傳參

              這個方法是將實體直接作爲參數接收的,比如是loginUser user),但這裏,User實體必須有與參入值名字相同的屬性。比如建一

              實體類user

              public  class User {

                     private String name;

                     private String password;

                     public String getName() {

                                  return name;

                     }

                     public void setName(String name) {

                                  this.name = name;

                     }

                     public String getPassword() {

                                  return  password;

                     }

                     public void setPassword(String password) {

                                  this.password = password;

                     }

              }

              然後同上面說的,將User做爲login()的參數即可

             

        3json前後臺傳參

              Json傳參,其實就是把數據組裝成json格式,然後傳到後臺,這裏修改login.jsp

              <script type = "text/javascript"  src = "<%=path %>/script/jquery/src/jquery-1.4.2.min.js"></script>

              <script type="text/javascript">

                           $(document).ready(function(){

                                 $("#onclick").click(function(){

                                         var name = $("#name").val();

                                         var password = $("#password").val();

                                         var user={name:name ,password:password};               

                                         $.ajax({

                                                     url:"/springMVC/springController/login",       

                                                     data:user,

                                                     async:false,

                                                     success:function(data){

                                                            alert(data.name);

                                                     }                  

                                         });

                                  });    

                           });

              </script>

               

              <body>

                   <form>

                       名字<input type="text" name="name" id="name"><br>

                       密碼<input type="password" name="password" id="password"><br>

                       <button id="onclick">提交</button>

                   </form>

              </body>

              這裏需要注意的是引進jquery庫,用ajax實現數據的傳遞。而引jquery是需在spring_mvc.xml裏添加<mvc:resources  location="/script/"

              mapping="/script/**"/>這句表明了引進的jquery不需要經過前端控制器,location指明不去經過前端控制器的包,mapping,指明具體哪些

              文件。 var user={name:name ,password:password};就是將數據轉成json格式。

              而後臺接受參數不變,後臺SpringController代碼

              @Component

              @RequestMapping(value="/springController")

               publicclass SpringController extends MultiActionController{

                       @RequestMapping(value="/login")

                       publicvoid login(User user, HttpServletRequest request, HttpServletResponse response){

                             //組裝json(還有其他的方法)     

                             String result="{\"name\":\""+user.getName()+"\",\"password\":\""+user.getPassword()+"\"}";

                             //指明輸出json格式

                             response.setContentType("application/json");

                             try {

                                    PrintWriter out=response.getWriter();

                                    out.print(result);

                             } catch (IOException e) {

                                    e.printStackTrace();

                             }

                       }

               }

               這樣子,開啓服務器,打開login.jsp頁面輸入用戶名和密碼,點擊登錄後就能會進入後臺,並在控制檯輸出用戶名和密碼。然後轉

               到login.jsp頁面,並跳出一會話框,輸出用戶名和密碼。

 

三、中文亂碼

        上面的例子,當輸入中文的時候,都會出現中文亂碼,解決方案,首先在web.xml中添加spring提供的中文亂碼過濾器

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

        這個過濾器要放在前端控制器之前,然後對要傳入的參數進行壓碼就如login.jsp頁面var name = encodeURI($("#name").val());name進行壓

        碼,接着在後臺對name進行解碼URLDecoder.decode(user.getName(),"UTF-8")。此時,輸入中文,就不會出現亂碼問題了

 

 

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章