您的位置:首页 > 编程语言 > Java开发

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

2014-04-21 12:38 585 查看
一、 简单环境的搭建:

          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()里面添加name、password两参数,只需页面传入参数时有对应的参数名时,他

              就会自动接收到对于的参数。

              简单的例子:

              添加一登陆页面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、实体传参

             
这个方法是将实体直接作为参数接收的,比如是login(User 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()的参数即可

             

        3、json前后台传参

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

 

 

 

 

 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息