struts2中关于jsp页面向action传值出现乱码问题

在JSP页面输入中文并传给后台的时候,常常会出现乱码问题,产生乱码的原因:java在进行传值的时候,默认用的是iso-8859-1的编码形式进行传输,而我们jsp页面常用的则是utf-8的编码形式。所以,两者不对应,在解析的时候就出现乱码现象。

  有以下几种解决方案

一:在struts.xml文件中添加

  <constant name="struts.i18n.encoding" value="utf-8"></constant>

  注:这里value="urt-8"指的是页面的编码格式,如果页面的编码格式是GBK,则写GBK

二:在Action中重新转码:利用.new String(name.getBytes("iso-8859-1"),"utf-8");

  例:this.name= new String(name.getBytes("iso-8859-1"),"utf-8");

  注:这里的name是从页面传过来的参数,只要在这里重新转码就可以了,另外,这里的utf-8依然是页面的编码格式。

  但每次都这样转,太麻烦了,因此可以写一个工具类,将乱码转成utf-8

public class Tools{
//提供一个方法,将乱码转化成utf-8

public static String getNewString(String input){
String result = "";
try{
result = new String(input.getBytes("iso-8859-1"),"utf-8");
}catch(Exception e){
e.printStackTrace();
}
return result;
}

在用的时候直接调用就行了:userName = Tools.getNewString(name);

三:就是在tomcat中修改server.xml, 个人不推荐这得方法,其一:不稳定,其二:在工作中修改服务器的配置文件不是一件容易的事情,所以这里就不举例说明。

四:CharacterEncodingFilter的使用,但这个东西不是万能的,但有时候没有它就会很麻烦,所以还是加上,以防万一,但需要说明一点:这个filter只对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>
   <param-value>utf-8</param-value>
  </init-param>
 </filter>
 <filter-mapping>
  <filter-name>CharacterEncodingFilter</filter-name>
  <url-pattern>/*</url-pattern>
 </filter-mapping>

时间: 2024-10-07 13:24:01

struts2中关于jsp页面向action传值出现乱码问题的相关文章

&lt;转&gt; jsp页面向action传值的方法(最后一种简单)

多的不说,直接上代码; struts.xml代码: <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.1//EN" "http://struts.apache.org/dtds/struts-2.1.dtd">&

struts2中的jsp值传到后台action接收的三种方法

struts2中的Action接收表单传递过来的参数有3种方法: 如,登陆表单login.jsp: <form action="login" method="post" name="form1"> 用户名:<s:textfield name="username"/><br/> 密 码:<s:password name="password"/><br/&g

struts2中的jsp与action

今天做的项目中遇到这样的一个问题,后台代码都是对的.jsp页面是这样,一个表单,执行完动作之后返回结果信息. 使用的是jsp标准标签库中的<c:if> 后面的test判断条件写的是后台action传过来的success或者error是否为空(empty 或者not empty),在struts.xml中也配置了相应的result.现象是一直进不去<c:if>或者直接跳过<c:if>显示里面的语句在页面上.检查完是不是某些库未加进来之后,确定不是那些原因.最终找到stru

struts2 页面向Action传参方式

1.基本属性注入 我们可以直接将表单数据项传递给Action,而Action只需要提供基本的属性来接收参数即可,这种传参方式称为基本属性注入.例如 jsp页面: <s:form method="post" action="/Login"> <s:textfield name="username" label="用户名"/> <s:password name="password"

Struts2中如何接收另一个action 或者JSP页面经过POST方法传过来的字符串

经验总结: 最近在用struts2 写接口,要给请求者返回一个json字符串,但是,请求是用POST请求的,各种方法尝试,最后终于得到了答案: /** * 封装接收客户端传过来的post数据 * @param ctx ActionContext的对象 * @return */ public static String getRequestBody(ActionContext ctx){ try { HttpServletRequest request = (HttpServletRequest)

Struts2常用标签的使用以及Action传值

为了学习struts2框架,这次练习完成了一个简单的功能,希望能够在struts表单标签的使用以及传值方面能够对大家的学习起到参考作用. 项目功能 项目的功能是在提交页面输入个人信息之后点击提交跳转到一个新的页面,新的页面会显示之前所填写的个人信息. 开发环境和工具 已配置最新版Java开发环境的Windows系统.MyEclipse 2014/2016.Tomcat服务器7.0/8.0/9.0. 内容介绍 本次练习中出现的struts2表单标签: <s:textfield/>文本输入框 &l

Struts2中关于&quot;There is no Action mapped for namespace / and action name&quot;的总结

今天在调试一个基础的Struts2框架小程序.总是提示"There is no Action mapped for namespace / and action name"的错误.上网查询后发现这是一个初学者经常碰到的问题,导致错误的原因主要有两种.总结如下: 一.struts.xml文件错误.这种错误又分为以下几种:1,struts.xml文件名错误.一定要注意拼写问 题:2,struts.xml文件放置路径错误.一定要将此文件放置在src目录下.编译成功后,要确认是否编译到clas

struts2中 模型驱动(model)action用法

Struts2的Action属于MVC模型层,Action中的方法代表业务逻辑,Action中的属性代表请求中的参数,当页面请求参数较多的时候,把过多的参数对象的属性定义在Action中不太符合Struts所倡导的松耦合原则,所以我们推荐单独用JavaBean来封装参数,在Action中为JavaBean赋值,这就是ModelDriven的Action. 模型驱动的Action要求Action实现ModelDriven接口,假如登录页面需要传输参数name和password,我们把这2个参数封装

struts2中错误There is no Action mapped for namespace [/] and action name [] associated with context path

1 There is no Action mapped for namespace [/] and action name [] associated with context path [/Struts2_0300_Action2]. - [unknown location] 2 at com.opensymphony.xwork2.DefaultActionProxy.prepare(DefaultActionProxy.java:185) 3 at org.apache.struts2.i