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>

  

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM