`

过滤器解决Struts2中的中文乱码问题

阅读更多

初学Struts2,就编写了一个简单的登录的例子,在运行中遇到当用户名为中文时出现中文乱码,故上网搜索解决之道,并撰此文以记之。


index.jsp:

<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<%@ page contentType="text/html; charset=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 'index.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">
  </head> 
  <body>
  <form action="test1" method="post">
    用户名:<input type="text" name="username"/><br/>
    密 码:<input type="password" name="password">
  <input type="submit" value="提交">
  </form>
  </body>
</html>
 


success.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 'success.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">
  </head>
  <body>
    登录成功!欢迎:${username}
  </body>
</html>
 


error.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 'error.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">
  </head> 
  <body>
    登录失败!
    <a href="index.jsp">返回重新登录</a>
  </body>
</html>
 


LoginAction.java:

package com.cz.action;
import java.io.UnsupportedEncodingException;
import javax.servlet.http.HttpServletRequest;
import org.apache.struts2.ServletActionContext;
import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.ActionSupport;
public class LoginAction extends ActionSupport {
    private String username;
    private String password;
    public String getUsername() {
        return username;
    }
    public void setUsername(String username) {
        this.username = username;
    }
    public String getPassword() {
        return password;
    }
    public void setPassword(String password) {
        this.password = password;
    } 
    public String execute(){
        System.out.println("到达execute。。。。");
        return null;       
    }   
    public String login(){         
        System.out.println("到达login。。。。用户名:"+username);
        if("啊".equals(username) && "123".equals(password)){
            return "success";
        }
        return "login";
    }
}
 


过滤器FilterEncoding.java

import java.io.IOException;
import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
public class FilterEncoding implements Filter {
    protected String encoding; // 接收字符编码
    protected FilterConfig filterConfig; // 初始化配置
    public void init(FilterConfig filterConfig) throws ServletException {
        // 从web.xml文件中读取encoding的值
        encoding = filterConfig.getInitParameter("encoding");
    }
    // doFilter方法
    public void doFilter(ServletRequest request, ServletResponse response,
            FilterChain chain) throws IOException, ServletException {
        request.setCharacterEncoding(encoding);
        chain.doFilter(request, response);
    }
    public void destroy() {

    }
}
 

 


web.xml:

<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5"
    xmlns="http://java.sun.com/xml/ns/javaee"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
    http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
  <welcome-file-list>
    <welcome-file>index.jsp</welcome-file>
  </welcome-file-list>
    <filter>
        <filter-name>struts2</filter-name>
        <filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>       
    </filter>
    <filter> 
         <filter-name>encoding</filter-name> 
             <filter-class>FilterEncoding  </filter-class> 
         <init-param> 
              <param-name>encoding</param-name> 
              <param-value>utf-8</param-value> 
         </init-param> 
    </filter>   
    <filter-mapping>
         <filter-name>encoding</filter-name>
         <url-pattern>/*</url-pattern>
    </filter-mapping>
    <filter-mapping>
        <filter-name>struts2</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>
</web-app>
 


struts.xml:

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC
    "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
    "http://struts.apache.org/dtds/struts-2.0.dtd">
<struts>
 <package name="default" namespace="/" extends="struts-default">      
        <action name="test1" class="com.cz.action.LoginAction" method="login">
            <result name="success">/success.jsp</result>
            <result name="login">/error.jsp</result>
        </action>
  </package>
</struts>
 

分享到:
评论

相关推荐

    struts中文乱码问题解决详细步骤

    解决这个问题通常涉及到编码设置的调整,下面将详细介绍两种方法来解决Struts中的中文乱码问题。 **方法一:配置Filter** 1. **添加过滤器**:首先,我们需要在Web应用的`web.xml`文件中添加一个`...

    Struts2中文乱码问题最终解决方案

    在Struts2的各个版本和不同过滤器设置下,GET方式提交的中文乱码问题仍然存在。一种可行的解决方案是在Tomcat服务器的配置文件`server.xml`中,修改`&lt;Connector&gt;`标签,添加`URIEncoding="UTF-8"`属性。这将强制...

    struts2的中文乱码问题解决

    下面将详细介绍如何解决Struts2中的中文乱码问题。 #### 一、理解中文乱码的原因 中文乱码主要出现在以下几个方面:页面乱码、Action乱码以及数据库乱码。具体来说: 1. **页面乱码**:指用户在浏览器中看到的...

    struts下的汉字乱码问题

    总结来说,解决Struts下的汉字乱码问题,需要从页面、过滤器、服务器配置和Struts核心Servlet等多方面进行设置,确保在整个请求生命周期中,中文字符始终以正确的编码进行处理。这不仅涉及了前端的展示,还涉及到...

    struts2中文乱码问题

    综上所述,解决Struts2中文乱码问题的方法主要包括设置JSP页面编码、配置Struts2国际化编码、修改web.xml配置、使用POST请求方式以及自定义过滤器等。开发者可以根据项目的具体情况选择合适的方法来解决中文乱码问题...

    struts1.2 解决中文乱码

    通过上述两种方法,我们可以有效地解决 Struts 1.2 中的中文乱码问题。需要注意的是,在实际应用中还需要根据具体情况进行调整和完善。例如,如果项目中同时使用了多种字符编码,则需要更细致地控制每个环节的编码...

    struts 2. 5.2解决中文乱码

    2. **修改`web.xml`**:在项目的`WEB-INF/web.xml`文件中,添加过滤器以确保请求和响应都使用UTF-8编码: ```xml &lt;filter-name&gt;characterEncodingFilter &lt;filter-class&gt;org.springframework.web.filter....

    Struts2Action处理中文乱码

    通过以上两种方法,你可以有效地解决Struts2 Action中处理中文乱码的问题。选择哪种方法取决于你的具体需求和项目结构。一般来说,如果你的整个应用都使用同一种编码格式,那么在Struts2配置中设置全局编码可能更...

    struts 中文乱码问题解决

    本文将深入探讨Struts框架中中文乱码的问题,并提供一系列有效的解决方案。 ### Struts框架简介 Struts是一个开源的MVC(Model-View-Controller)框架,主要用于简化Java Web应用程序的开发。它基于Servlet和JSP...

    struts2中文乱码解决Demo

    Struts2是一个非常流行的Java Web框架,用于构建和维护可扩展、模块化且易于管理的企业...通过这个DEMO,开发者可以更好地理解和解决Struts2中的中文乱码问题,从而确保应用能够正确处理中文字符,提供良好的用户体验。

    解决struts2.1.6+spring+hibernate 中文乱码

    本文将详细介绍如何通过配置`struts.properties`文件与`web.xml`中的过滤器来解决中文乱码问题。 #### 一、Struts2 配置文件(struts.properties)中的关键设置 在Struts2项目中,可以通过修改`struts.properties`...

    Struts2乱码终极解决办法

    本文将详细介绍如何彻底解决Struts2中的乱码问题,并提供实际可行的解决方案。 #### 二、乱码产生的原因 在Struts2框架中,中文乱码主要由以下几个方面的原因造成: 1. **请求编码问题**:客户端发送请求时未指定...

    struts2中文乱码

    本篇文章将详细介绍Struts2中出现中文乱码的原因及解决方案,帮助开发者更好地理解和解决这一问题。 #### 二、Struts2中文乱码问题概述 在Struts2应用中,当处理包含中文字符的数据时,可能会遇到乱码的问题。这种...

    eclipse struts 中文乱码问题图解

    在Struts框架中,可以配置`struts-default.xml`或自定义的配置文件,添加全局过滤器来设定字符编码。例如: ```xml &lt;filter-name&gt;charsetFilter &lt;filter-class&gt;org.apache.struts2.dispatcher.filter....

    struts2文件下载(解决了中文乱码问题)

    综上所述,解决Struts2文件下载时的中文乱码问题需要从多个角度考虑,包括文件名编码、响应头设置、过滤器配置、JDK版本、Tomcat配置以及开发环境的一致性。具体到本例中的DownLoadFile,可能是一个示例代码或测试...

    Struts框架下Ajax发送中文乱码问题的解决

    总结来说,解决Struts框架下Ajax发送中文乱码问题的关键在于: 1. 确保Ajax请求时设置正确的`Content-Type`,以UTF-8编码发送数据。 2. 在Struts配置文件中配置`CharacterEncodingFilter`或在Action中手动设置请求...

    struts2技巧,笔记.zip指定404,500页面 utf-8过滤器 防SQL注入 解决乱码

    在Struts2中,可以通过在struts.xml配置文件中定义全局结果类型来实现。例如,为404错误指定一个特定的JSP页面,使用户看到的不是默认的错误信息。 2. **字符编码问题**: - **pageEncoding**:在JSP页面中,...

    struts之中文乱码问题

    Struts是一个非常流行的Java Web应用程序框架,用于构建和管理MVC(模型-视图-控制...如果你的项目中仍然存在乱码问题,建议参考提供的“Struts中文乱码解决方案.doc”文档,它可能包含了更详细的排查步骤和解决方案。

    Struts1.2乱码和过滤器的使用

    乱码解决方案和过滤器的解决与用户的登陆error解决 乱码解决方案和过滤器的解决与用户的登陆error解决

Global site tag (gtag.js) - Google Analytics