spring MVC笔记3——传递参数和解决中文乱码

来源:互联网 发布:希捷媒体同步软件 编辑:程序博客网 时间:2024/06/05 03:23

一、 简单环境的搭建:

          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(启动扫描机制和配置视图解析器)

                <beansxmlns="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-scanbase-package="controller"/>

   

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

                                        <propertyname="prefix"value="/"/>     

                                       <propertyname="suffix"value=".jsp"/>     

                             </bean>    

                </beans>

               

          4、src目录下创建一SpringCotnroller(有登陆方法)

               @Component

                @RequestMapping(value="/springController")

                publicclass SpringControllerextends 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">

                           名字<inputtype="text"name="name"><br>

                          密码<inputtype="password"name="password"><br>

                           <inputtype="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 Stringname;

                     private Stringpassword;

                     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

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

             <scripttype="text/javascript">

                          $(document).ready(function(){

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

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

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

                                         varuser={name:name ,password:password};               

                                        $.ajax({

                                                    url:"/springMVC/springController/login",       

                                                    data:user,

                                                    async:false,

                                                    success:function(data){

                                                           alert(data.name);

                                                    }                  

                                         });

                                  });    

                           });

              </script>

               

             <body>

                  <form>

                      名字<inputtype="text"name="name"id="name"><br>

                      密码<inputtype="password"name="password"id="password"><br>

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

                   </form>

              </body>

              这里需要注意的是引进jquery库,用ajax实现数据的传递。而引jquery是需在spring_mvc.xml里添加<mvc:resources location="/script/"

              mapping="/script/**"/>这句表明了引进的jquery不需要经过前端控制器,location指明不去经过前端控制器的包,mapping,指明具体哪些

              文件。 varuser={name:name ,password:password};就是将数据转成json格式。

              而后台接受参数不变,后台SpringController代码

              @Component

              @RequestMapping(value="/springController")

               publicclass SpringControllerextends 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")。此时,输入中文,就不会出现乱码问题了

 

 

 

 

 

0 0
原创粉丝点击