SpringMVC之springmvc原始api,请求中文乱码问题

先搞一波效果图

 1.Controller

package com.tz.controller;

import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;

import org.springframework.beans.factory.annotation.Required;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.CookieValue;
import org.springframework.web.bind.annotation.RequestHeader;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;

import com.tz.domain.Course;

@Controller
public class RequestController {
	/**
	 * @PathVariable("user"):获取路径中的值/handler/{user}
	 * @RequestParam("user"):获取请求参数/hander/{user}?user=coco
	 *
	 * @param userName
	 * @return
	 */
	@RequestMapping("/handle")
	public String handler(@RequestParam(value="user",required=false) String userName){
		//userName = request.getParameter("user");
		System.out.println(userName);
		return "success";
	}

	@RequestMapping("/handle2")
	public String handler02(@RequestParam(value="user",required=false,defaultValue="你没有带参数") String userName,
							@RequestHeader(value="User-Agent",required=false) String user_Agent,
							@CookieValue("JSESSIONID") String js){
		//userName = request.getParameter("user");
		System.out.println(userName);
		System.out.println(user_Agent);
		System.out.println(js);
		return "success";
	}

	/**
	 * springmvc可以在参数上写servlet常用的api
	 * HttpServletRequest
	 * HttpServletResponse
	 * Httpsession
	 *
	 * InputStream:request.getInputStream();
	 * OutputStream:response.getOutputStream();
	 * Reader:request.getReader();
	 * Writer:response.getWriter();
	 *
	 * 请求:客户端-->服务端(客户端显示乱码)
	 * 修改tomcat配置文件
	 * GET有效
	 * <Connector connectionTimeout="20000" port="8080" protocol="HTTP/1.1" redirectPort="8443"/>
	 * 第一次获取请求参数之前:request.setCharacterEncoding("UTF-8");
	 *
	 * 响应:服务端-->客户端(服务端显示乱码)
	 * reponse.setContentType("text/html;charset=utf-8");
	 * @param c
	 * @return
	 */
	@RequestMapping("/addCourse")
	public String addCourse(Course c){//springMVC会自动为我们定义的类型进行赋值
		/**
		 * 1.将对象中的每一个属性从request参数中尝试取出来,并进行封装
		 * request.getParameter("参数名");如果有值,就会取出来封装到实体类的属性中(调用set方法)
		 */
		System.out.println(c);
		return "success";
	}

	@RequestMapping("/handle04")
	public String handle04(HttpSession session,HttpServletRequest request){
		session.setAttribute("session","session域");
		request.setAttribute("request","request域");
		return "success";
	}

}

  2.配置文件web.xml(最重要的就是设置那个字符编码过滤器)

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" version="2.5">
  <display-name>springmvc_Day01</display-name>
  <welcome-file-list>
    <welcome-file>index.html</welcome-file>
    <welcome-file>index.htm</welcome-file>
    <welcome-file>index.jsp</welcome-file>
    <welcome-file>default.html</welcome-file>
    <welcome-file>default.htm</welcome-file>
    <welcome-file>default.jsp</welcome-file>
  </welcome-file-list>

  <servlet>
  	<servlet-name>springmvc</servlet-name>
  	<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
  	<!-- <init-param>
  		<param-name>contextConfigLocation</param-name>
  		指定springmvc配置文件的位置
  		<param-value>classpath:springmvc.xml</param-value>
  	</init-param> -->
  	<!-- 如果在web.xml不指定文件位置,也会找默认的文件
  	/WEB-INF/xxx-servlet.xml
  	 -->
  	<!-- 启动加载时期 -->
  	<!-- servlet是当服务器启动的时候加载创建对象,值越小,代表优先级越高,就越先创建对象 -->
<!--   	<init-param>
  		<param-name>contextConfigLocation</param-name>
  		<param-value>classpath:springmvc.xml</param-value>
  	</init-param> -->
  	<!-- 如果在web.xml中找不到文件位置,也会默认找文件
  		/WEB-INF/xxx-servlet.xml
  	 -->
  	<load-on-startup>1</load-on-startup>
  </servlet>
  <servlet-mapping>
  	<servlet-name>springmvc</servlet-name>
  	<url-pattern>/</url-pattern>
  		<!--
  	/和/*都是用来拦截所有请求,但是/*的范围更大,还会拦截到*.jsp请求,一旦拦截,则访问jsp页面就不会显示了
  	/也会拦截所有请求,但是不会拦截.jsp,可以保证jsp页面访问正常

  	*.do *.action *.hah
  	/:不拦截jsp *.jsp
  	/*:拦截jsp
  	 -->
  </servlet-mapping>

  <!-- 配置字符编码过滤器 

  	保证该过滤器在所有的过滤器之前,避免请求后拦截不了
  	最好在第一个
  -->
  <filter>
  	<filter-name>CharacterEncodingFilter</filter-name>
  	<filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
  	  	<!-- encoding:指定解决请求乱码
  	  		forceRequestEncoding:指定请求与响应的编码集格式为eccoding
  	  		forceResponseEncoding
  	  	 -->
  	  	<init-param>
  			<param-name>encoding</param-name>
  			<param-value>UTF-8</param-value>
  		</init-param>
  		<init-param>
  			<param-name>forceRequestEncoding</param-name>
  			<param-value>true</param-value>
  		</init-param>
  		<init-param>
  			<param-name>forceResponseEncoding</param-name>
  			<param-value>true</param-value>
  		</init-param>

  </filter>
  <filter-mapping>
  	<filter-name>CharacterEncodingFilter</filter-name>
  	<url-pattern>/*</url-pattern>
  </filter-mapping>

  <!-- reset风格的请求
  	get 查询
  	put 请求修改
  	delect删除
  	post新增
   -->
  <filter>
  	<filter-name>HiddenHttpMethodFilter</filter-name>
  	<filter-class>org.springframework.web.filter.HiddenHttpMethodFilter</filter-class>

  </filter>
  <filter-mapping>
  	<filter-name>HiddenHttpMethodFilter</filter-name>
  	<!-- 这里将.jsp也过滤掉 -->
  	<url-pattern>/*</url-pattern>
  </filter-mapping>

</web-app>

  

原文地址:https://www.cnblogs.com/luyuan-chen/p/11681839.html

时间: 2024-08-30 07:38:07

SpringMVC之springmvc原始api,请求中文乱码问题的相关文章

在Filter中使用动态代理解决请求中文乱码问题

使用动态代理解决请求中文乱码问题 1.增强一个类我们常用的几种解决方案: 1.继承 a) 优点简单 b) 必须有被增强类的实现类 2.装饰者模式 a) 要求:1实现相同的接口.2持有被增强的对象 b) 优点:不必知道被增强的实现是谁 c) 缺点:必须实现所有没被增强方法的原始对象的原样调用 3.动态代理 a) 要求:1实现相同接口,2持有被增强的对象 b) 优点:不必手动实现所有不增强方法的原样调用.对方法进行增强时有类似过滤器的功能. c) 缺点:学习成本高. 代理(Proxy): 一个代理对

tomcat get请求中文乱码

tomcat7中,保证get数据采用UTF8编码,在server.xml中进行了如下设置: 加:URIEncoding="UTF-8" <Connector port="8080" maxThreads="150"minSpareThreads="25"maxSpareThreads="75" enableLookups="false"redirectPort="8443

Wildfly8 POST请求中文乱码分析与解决

最近遇到的一个关于POST请求中文乱码的问题,原本应用是在TOMCAT上运行的,切换到Wildfly8后,测试环境是正常的,但生产环境下客户端发出的相同请求在服务端获取到的中文出现了乱码,在经过定位后发现是Wildfly8的一个配置引起的. 问题分析如下: 在HTTP的POST请求中,如果是这种情况 Content-Type: application/x-www-form-urlencoded;charset=utf-8 ,若没有设置charset=utf-8,这时可能会出现请求参数中文乱码的情

项目中get/post请求中文乱码的解决方案

一.解决get请求中文乱码的方案: 方案(推荐)1: 一般情况下tomcat(8之前)服务器的编码默认是ISO8859-1,所以要对get请求提交的参数进行重新编码: String userName = new String(request.getParamter("userName").getBytes("ISO8859-1"),"utf-8"); 方案(不推荐)2: 既然知道了tomcat服务器的编码默认是ISO8859-1,那么可以修改to

请求中文乱码问题

package com.bjsxt.servlet; import java.io.IOException; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import com.bjsxt.pojo.Us

SpringMVC如何解决POST请求中文乱码问题,GET的又如何处理呢?

在web.xml中 <filter> <filter-name>CharacterEncodingFilter</filter-name> <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class> <init-param> <param-name>encoding</param-name> <pa

springmvc 提供的统一解决json中文乱码配置

<!--springmvc 统一解决json中文乱码问题--><mvc:annotation-driven> <mvc:message-converters register-defaults="true"> <bean class="org.springframework.http.converter.StringHttpMessageConverter"> <constructor-arg value=&qu

Get,Post请求中文乱码问题有效解决方法

对于做Java WEB项目同学来说,中文乱码问题是一个经常遇到而又非常头痛的问题,而最容易出现乱码的环节就是在浏览器向服务器发送请求的过程,至于出现乱码的原因不是本文的关注的重点,想了解的朋友可以参考 http://zhaomin819111.blog.163.com/blog/static/10659004200943112950956/ 本文主要介绍如何有效解决web请求中的乱码问题,其实解决方法有很多种,不同的请求类型解决方法也不相同. 本文只介绍最方便的一种: 1.针对Post方式提交的

java web中get请求中文乱码在filter中解决

之前已经讲过get或者post方法的中文乱码问题,之前都是在每个方法中编写设置编码.如果程序变大,就会很繁琐,使用filter可以避免这种繁琐. 1)写一个encodingFilter进行编码设置 public class encodingFilter implements Filter { @Override public void doFilter(ServletRequest req, ServletResponse res, FilterChain arg2) throws IOExce