springMVC之数据传递

在前面介绍过从controller中向页面中传数据,可以通过HttpServletRequest进行setAttribute可以将数据放入request中。并且可以在jsp页面使用el表达式获取数据。

那么怎么从jsp页面往后台传数据呢。

首先我们需要创建一个jsp页面进行数据的搜集:

annotationTest.jsp<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <base href="<%=basePath%>">
   
    <title>My JSP 'annotationTest.jsp' starting page</title>
   
 <meta http-equiv="pragma" content="no-cache">
 <meta http-equiv="cache-control" content="no-cache">
 <meta http-equiv="expires" content="0">   
 <meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
 <meta http-equiv="description" content="This is my page">
 <!--
 <link rel="stylesheet" type="text/css" href="styles.css">
 -->

  </head>
  <script type="text/javascript">
  function clickButton(){
   var form = document.forms[0];
   form.action="showInfo";
   form.method="GET";
   form.submit();
  }
 
  </script>
  <body>
   <form action="">
    姓名:<input type="text" name="name"/>
    年龄:<input type="text" name="age"/>
    <input type="button" onclick="clickButton();" value="提交"/>
   </form>
  </body>
</html>
在这里用button和js来进行提交主要是为了好改提交方式可以做get与post的测试。

将数据用javascript传输到controller后,controller:

package com.yx.controller.annotation;

import javax.servlet.http.HttpServletRequest;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;

@Controller
@RequestMapping("/user/data")
public class GetAndShowInfo {

 @RequestMapping("/showInfo")
 public String showUserInfo(String name,int age,HttpServletRequest request){
  request.setAttribute("name", name);
  request.setAttribute("age", age);
  return "/showInfo";
 }
 @RequestMapping("/getInfo")
 public String getUserInfo(){
  
  return "/getInfo";
 }
}
最后,会跳到getInfo页面显示数据。

在这里会出现乱码。

需要设置两个地方:

1.在tomcat中找到server.xml文件把其中

 <Connector port="8080" protocol="HTTP/1.1"
               connectionTimeout="20000" 
               redirectPort="8443"/>

改为:

 <Connector port="8080" protocol="HTTP/1.1"
               connectionTimeout="20000"
               redirectPort="8443" URIEncoding="UTF-8"/>

这样子get方式提交就不会出现乱码。

2.在web.xml中加入如下代码:

 <!-- 修改编码 -->
  <filter>
   <filter-name>projectEncoding</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>projectEncoding</filter-name>
   <url-pattern>/*</url-pattern>
  </filter-mapping>
 
 这一段时springMVC自带的拦截器,并将编码方式强制改为utf-8,这样post方式就正常了。

原文地址:https://www.cnblogs.com/jiangu66/p/3172174.html