- 浏览: 203519 次
- 性别:
- 来自: 芜湖
文章分类
- 全部博客 (139)
- 软件 (0)
- Pattern (6)
- CSDN导入 (19)
- Struts (3)
- [网站分类]1.网站首页原创 (27)
- [网站分类]6.转载区 (4)
- Hibernate (10)
- Error (8)
- [网站分类]2.Java新手区 (20)
- Java (8)
- [网站分类]4.其他技术区 (10)
- Web (1)
- C++ (2)
- Algorithm (4)
- Linux (2)
- Skill (1)
- Tech (2)
- Note (2)
- [网站分类]3.非技术区 (1)
- Database (1)
- Winty (7)
- [网站分类]1.网站首页原创Java技术区(对首页文章的要求: 原创、高质量、经过认真思考并精心写作。BlogJava管理团队会对首页的文章进行管理。) (0)
最新评论
-
haohao-xuexi02:
很不错哦。
O'Reilly cos上传组件的使用(1/3) - 上传文件 -
yoin528:
useUnicode=true&charact ...
[原]向MySQL数据库插入Blob数据的问题 -
xiaoqing20:
下载来看看!呵呵
[原]Struts2类型转换 -
xiaoqing20:
[原]Struts2类型转换
JSP中文参数传至JavaBean出现乱码
[关键字]:Tomcat,GBK,GB2312,Filter,乱码,JSP,charset,Servlet
[摘要]:书上说的都能看懂,但是真正做起来却会遇到问题。解决这些问题的过程,就是上机练习的意义。以前遇到的乱码问题要么通过request.setCharacterEnconding("GB2312")解决了,要么就是new String(str.getBytes("ISO-8859-1") , "GB2312")。但是这回是JavaBean出问题了。上面的两句行不通了,只能通过设置Filter来解决。希望遇到类似问题的朋友,站在我们的肩膀上,能看的更远。
[正文]:
写了一个简单的JavaBean,用于计算加减乘除。
CalculateBean.java:
import java.io.*;
public class CalculateBean{
private int operandFirst;//操作数1
private char operator;//运算符
private int operandSecond;//操作数2
private double result;//运算结果
public int getOperandFirst(){
return this.operandFirst;
}
public void setOperandFirst(int op){
this.operandFirst = op;
}
public char getOperator(){
return operator;
}
public void setOperator(char operator){
this.operator = operator;
}
public int getOperandSecond(){
return this.operandSecond;
}
public void setOperandSecond(int op){
this.operandSecond = op;
}
public double getResult(){
return this.result;
}
public void setResult(double result){
this.result = result;
}
public void calculate(){
double temp;
switch(operator){
case '+':
temp = getOperandFirst() + getOperandSecond();
break;
case '-':
temp = getOperandFirst() - getOperandSecond();
break;
case '×':
temp = getOperandFirst() * getOperandSecond();
break;
case '÷':
temp = 1.0 * getOperandFirst() / getOperandSecond();
break;
default:
temp = 0;
}
setResult(temp);
}
}
由Calculate.jsp调用CalculateBean完成计算:
Calculate.jsp:
<html>
<head>
<meta http-equiv="Content-Type" content="text/html;charset=gb2312">
</head>
</body>
<form method="post" action="Calculate.jsp">
<input type="hidden" name="action" value="TRUE"/><!-- 表示是否提交 -->
第一个操作数:
<input type="text" name="operandFirst" />
运算符:
<select name = "operator" >
<option value="+">+
<option value="-">-
<option value="×">×
<option value="÷">÷
</select>
第二个操作数:
<input type="text" name="operandSecond" />
<input type="submit" value="提交"/>
</form>
<%if(request.getParameter("action")!=null){ %>
<jsp:useBean id="calcu" class="ch6.calcbean.CalculateBean" scope="request"/>
<jsp:setProperty name="calcu" property="*"/>
<% calcu.calculate(); %>
<jsp:getProperty name="calcu" property="operandFirst"/>
<jsp:getProperty name="calcu" property="operator"/>
<jsp:getProperty name="calcu" property="operandSecond"/>
=<jsp:getProperty name="calcu" property="result"/>
<%}%>
</body>
</html>
为了完成JavaBean的调用,需将编译生成的CalculateBean.class部署到WEB-INF/classes/ch6目录下。然后运行Calculate.jsp即可以看到结果。程序没有什么问题。但是运行结果总是不对,输出的运算结果result总是为0。怀疑<jsp:setProperty name="calcu" property="*"/> 有问题。也怀疑过<% calcu.calculate(); %> 是否执行到、、、总之,怎么调试也不正确。后来,再仔细看看书,找到了解决办法:"JavaBean部署完成之后,要重启Tomcat"。就这么简单!当然,我没有使用IDE,是手工编译部署的,如果使用IDE,也许就没这问题了。
一个问题解决了,另一个问题又来了。算加减时,没有问题。算乘除时,JavaBean并不能正确地接收"×"、"÷"。因为"×"、"÷"并不是标准的ASCII字符。在jsp/servlet中直接用request.setCharactorEncoding("gb2312")就可以了。但是这是在JavaBean中,而且用<jsp:setProperty name="calcu" property="*"/>也没办法设置Encoding。这回到网上搜,有人说应该加上<%@page contentType="text/html;charset=GB2312" pageEncoding="GB2312"%>,还有人说用new String(str.getBytes("ISO-8859-1") , "GB2312"),还有server.xml中加上URIEncoding="GB2312"(<Connector ...... port="8080" redirectPort="8443" URIEncoding="GB2312" >)。这些都没能解决问题。
最后,找到了答案。关于乱码,Skytiger讲述的比较清楚。步骤如下(我用的是JDK1.6/Tomcat6.0,所以对Skytiger的讲述稍作修改):
1、实现一个Filter,设置处理字符集为GB2312。(Tomcat下Tomcat\webapps\examples\WEB-INF\classes\filters有完整的例子,请参考web.xml和SetCharacterEncodingFilter的配置。)
a、只要把Tomcat\webapps\examples\WEB-INF\classes\filters \SetCharacterEncodingFilter.class文件拷到你的\WEB-INF\classes\filters下,如果没有filters目录,就创建一个。
b、在你的web.xml里加入如下几行:
<filter-name>Set Character Encoding</filter-name>
<filter-class>filters.SetCharacterEncodingFilter</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>GB2312</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>Set Character Encoding</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
2、打开tomcat的Tomcat/conf/server.xml文件,加入URIEncodeing="GB2312",完整的如下:
<Connector port="8080" protocol="HTTP/1.1"
maxThreads="150" connectionTimeout="20000"
redirectPort="8443" URIEncodeing="GB2312"/>
3、别忘了重启Tomcat。
这样改完,再运行就正确了。
致谢:
多谢Skytiger。但是关于Skytiger的内容,是在archaic的blog上找到的(archaic也遇到了类似的问题),在此一并致谢。
正文内容到此结束。
==============================
==============================
==============================
==============================
为了方便大家,再附上SetCharacterEncodingFilter.java 和 archaic原文。
==============================
SetCharacterEncodingFilter.java:
==============================
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You under the Apache License, Version 2.0
* (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package filters;
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;
/**
* <p>Example filter that sets the character encoding to be used in parsing the
* incoming request, either unconditionally or only if the client did not
* specify a character encoding. Configuration of this filter is based on
* the following initialization parameters:</p>
* <ul>
* <li><strong>encoding</strong> - The character encoding to be configured
* for this request, either conditionally or unconditionally based on
* the <code>ignore</code> initialization parameter. This parameter
* is required, so there is no default.</li>
* <li><strong>ignore</strong> - If set to "true", any character encoding
* specified by the client is ignored, and the value returned by the
* <code>selectEncoding()</code> method is set. If set to "false,
* <code>selectEncoding()</code> is called <strong>only</strong> if the
* client has not already specified an encoding. By default, this
* parameter is set to "true".</li>
* </ul>
*
* <p>Although this filter can be used unchanged, it is also easy to
* subclass it and make the <code>selectEncoding()</code> method more
* intelligent about what encoding to choose, based on characteristics of
* the incoming request (such as the values of the <code>Accept-Language</code>
* and <code>User-Agent</code> headers, or a value stashed in the current
* user's session.</p>
*
* @author Craig McClanahan
* @version $Revision: 500674 $ $Date: 2007-01-28 00:15:00 +0100 (dim., 28 janv. 2007) $
*/
public class SetCharacterEncodingFilter implements Filter {
// ----------------------------------------------------- Instance Variables
/**
* The default character encoding to set for requests that pass through
* this filter.
*/
protected String encoding = null;
/**
* The filter configuration object we are associated with. If this value
* is null, this filter instance is not currently configured.
*/
protected FilterConfig filterConfig = null;
/**
* Should a character encoding specified by the client be ignored?
*/
protected boolean ignore = true;
// --------------------------------------------------------- Public Methods
/**
* Take this filter out of service.
*/
public void destroy() {
this.encoding = null;
this.filterConfig = null;
}
/**
* Select and set (if specified) the character encoding to be used to
* interpret request parameters for this request.
*
* @param request The servlet request we are processing
* @param result The servlet response we are creating
* @param chain The filter chain we are processing
*
* @exception IOException if an input/output error occurs
* @exception ServletException if a servlet error occurs
*/
public void doFilter(ServletRequest request, ServletResponse response,
FilterChain chain)
throws IOException, ServletException {
// Conditionally select and set the character encoding to be used
if (ignore || (request.getCharacterEncoding() == null)) {
String encoding = selectEncoding(request);
if (encoding != null)
request.setCharacterEncoding(encoding);
}
// Pass control on to the next filter
chain.doFilter(request, response);
}
/**
* Place this filter into service.
*
* @param filterConfig The filter configuration object
*/
public void init(FilterConfig filterConfig) throws ServletException {
this.filterConfig = filterConfig;
this.encoding = filterConfig.getInitParameter("encoding");
String value = filterConfig.getInitParameter("ignore");
if (value == null)
this.ignore = true;
else if (value.equalsIgnoreCase("true"))
this.ignore = true;
else if (value.equalsIgnoreCase("yes"))
this.ignore = true;
else
this.ignore = false;
}
// ------------------------------------------------------ Protected Methods
/**
* Select an appropriate character encoding to be used, based on the
* characteristics of the current request and/or filter initialization
* parameters. If no character encoding should be set, return
* <code>null</code>.
* <p>
* The default implementation unconditionally returns the value configured
* by the <strong>encoding</strong> initialization parameter for this
* filter.
*
* @param request The servlet request we are processing
*/
protected String selectEncoding(ServletRequest request) {
return (this.encoding);
}
}
==============================
archaic原文如下:http://archaic.blog.hexun.com/5576058_d.html
==============================
JSP 页面传中文到javaBean中出现乱码 [原创 2006.09.12 14:51:31]
刚接触JSP..乱码让我头疼了好几天.看了好多贴子.,都没搞对..
在JSP页面中
<%@page contentType="text/html;charset=GBK" language="java"%>
在server.xml文件中加入URIEncoding="GBK"
<Connector ...... port="8080" redirectPort="8443" URIEncoding="GBK" >
在eclips中编辑好的jsp在publish后竟然不能更新到tomcat v5.0 server运行目录下..百思不得其解.我现在只好编辑完后再另存一次..
郁闷了...~!
关于乱码..Skytiger讲述的比较清楚
·jsp中文乱码问题 -|Skytiger 发表于 2006-3-17 15:56:00
在tomcat5中发现了以前处理tomcat4的方法不能适用于处理直接通过url提交的请求,上网找资料终于发现了最完美的解决办法,不用每个地方都转换了,而且无论get,和post都正常。写了个文档,贴出来希望跟我有同样问题的人不再像我一样痛苦一次:-)
问题描述:
1 表单提交的数据,用request.getParameter(“xxx”)返回的字符串为乱码或者??
2 直接通过url如http://localhost/a.jsp?name=中国,这样的get请求在服务端用request. getParameter(“name”)时返回的是乱码;按tomcat4的做法设置Filter也没有用或者用request.setCharacterEncoding("GBK");也不管用
原因:
1 tomcat的j2ee实现对表单提交即post方式提示时处理参数采用缺省的iso-8859-1来处理
2 tomcat对get方式提交的请求对query-string 处理时采用了和post方法不一样的处理方式。(与tomcat4不一样,所以设置setCharacterEncoding(“gbk”))不起作用。
解决办法:
首先所有的jsp文件都加上:
1 实现一个Filter.设置处理字符集为GBK。(在tomcat的webapps/servlet-examples目录有一个完整的例子。请参考web.xml和SetCharacterEncodingFilter的配置。)
1)只要把%TOMCAT安装目录%/ webapps\servlets-examples\WEB-INF\classes\filters \SetCharacterEncodingFilter.class文件拷到你的webapp目录/filters下,如果没有filters目录,就创建一个。
2)在你的web.xml里加入如下几行:
<filter>
<filter-name>Set Character Encoding</filter-name>
<filter-class>filters.SetCharacterEncodingFilter</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>GBK</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>Set Character Encoding</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
3)完成.
2 get方式的解决办法
1) 打开tomcat的server.xml文件,找到区块,加入如下一行:URIEncoding=”GBK”
完整的应如下:
<Connector port="80" maxThreads="150" minSpareThreads="25" maxSpareThreads="75"
enableLookups="false" redirectPort="8443" acceptCount="100"
debug="0" connectionTimeout="20000"
disableUploadTimeout="true"
URIEncoding="GBK"/>
2)重启tomcat,一切OK。
发表评论
-
为什么要选择PDF技术
2007-01-13 01:54 1060为什么要选择PDF技术 一、电子文档在实际应用中经常遇到 ... -
用Helix Server组建视频服务器
2007-01-16 22:06 1274用Helix Server组建视频服务器 作者/来源: ... -
Java事件处理机制 - 事件监听器的四种实现方式
2008-12-03 21:11 1506自身类作为事件监听器 外部类作为事件监听器 匿名内部类作 ... -
"Debug Assertion Failed", File:afxcmn.inl
2008-12-03 22:11 3413[时间] :2008-12-2[问题] : &qu ... -
《孙鑫VC视频》- TCP网络编程
2008-12-04 00:24 1872sockets(套接字)编程有三种,流式套接字(SOCK_ST ... -
《孙鑫VC视频》- UDP网络编程
2008-12-04 00:34 2841服务器端(接收端)程序: 1、创建套接字(socket)。 ... -
VC实现XP样式界面
2008-12-13 20:50 2147看了《VC无负担实现XP风格界面》 一文,整理如下: 在V ... -
在Excel中使用FREQUENCY函数统计各分数段人数
2008-12-14 15:53 2843用Excel怎样统计出学生 ... -
static变量不仅要在.h文件声明,而且要在cpp文件中赋值(定义实体)
2008-12-14 23:24 1497[时间]:2008-11-19 [错误]: error L ... -
Java TCP网络编程 - 最简单示例
2008-12-15 23:02 2263/** *TCPServe ... -
Java UDP网络编程 - 最简单示例
2008-12-15 23:06 1572/** *UDPServe ... -
在Tomcat中为页面设置访问权限
2009-02-19 23:11 1112在web应用中,对页面的访问控制通常通过程序来控制,流程为:登 ... -
使用VC++6.0隐藏任务栏
2009-02-23 14:11 2056使用VC++6.0隐藏任务栏 [摘要]: 隐藏任务栏本没 ... -
如何在VC6中定义热键消息
2009-02-23 21:25 1202消息是windows操作系统和应用程序之间进行通信的载体,操 ... -
为Windows右键新建菜单添加菜单项
2009-03-05 10:27 2476[标题]:为Windows右键新建菜单添加菜单项 [时间]: ... -
O'Reilly cos上传组件的使用(1/3) - 上传文件
2009-03-10 10:06 2209O'Reilly cos上传组件的使用(1/3) - 上传文件 ... -
O'Reilly cos上传组件的使用(2/3) - 获取文件信息
2009-03-10 10:10 1236O'Reilly cos上传组件的使用(2/3) - 获取文件 ... -
O'Reilly cos上传组件的使用(3/3) - 重命名上传后的文件
2009-03-10 10:16 2148O'Reilly cos上传组件的使用(3/3) - 重命名上 ...
相关推荐
**JavaServer Pages (JSP) 与 JavaBean:基础与应用** JavaServer Pages(JSP)是Java平台上的一个标准视图技术,用于创建动态网页。JSP与JavaBean结合使用,可以实现业务逻辑和视图层的分离,提高代码的可重用性和...
本篇文章将深入探讨如何使用JSP与Servlet进行文件上传,并特别关注如何解决中文文件名乱码的问题。 首先,我们需要理解文件上传的基本流程。当用户在JSP页面上选择文件并提交表单时,JSP会将文件数据封装到HTTP请求...
默认的JSP代码可能需要进行编码设置,以避免出现乱码。在Eclipse中,可以在"窗口" -> "首选项"中设置JSP和HTML的编码为UTF-8。 3. **HTML基础** - JSP文件可以包含HTML标记,例如在`index.jsp`中创建基本的HTML...
JSP+JavaBean留言本 一款JSP+JavaBean留言本程序源码,后台用户名是admin,密码是qipeng 如果不行,可以打开数据库...留言本推荐环境为Tomcat6.0,如果用5.0,可能会出现乱码,因为5.0对中文的支持还是有一定的问题。
本实验报告旨在通过实例教学,帮助初学者理解和掌握JSP的标准动作,以及如何处理中文乱码问题。通过实际操作,开发者能够更好地理解Web应用开发中的核心概念,并具备解决实际问题的能力。对于“huxinlei2010-11-14-...
- **JSP页面乱码**:当JSP页面中出现乱码时,通常是因为没有指定正确的字符编码。在JSP页面顶部添加`<%@ page pageEncoding="utf-8"%>`来设置页面编码为UTF-8,防止中文字符显示乱码。 - **参数传递乱码**:在...
最近在网上看到一个用java来操纵excel的open source,在weblogic上试用了一下,觉得很不错,... 写一个javaBean,利用JExcelApi来动态生成excel文档,我这里写一个最简单的,示意性的。复杂的你可能还要查询数据库什么的。
JavaBean在Web开发中起着至关重要的作用,它是MVC架构中Model层的一种体现,用于封装数据和业务逻辑。在添加、删除、修改操作中,JavaBean接收前端传递的数据,提供便捷的方法访问和设置属性,使得业务处理更加简洁...
在本项目中,我们利用了Java Web开发中的三个核心组件:JSP(JavaServer Pages)、JavaBean和Servlet,来构建一个完整的B/S架构的简单留言板系统。以下是这些技术的详细说明,以及它们如何协同工作来实现系统功能: ...
【基于JSP+javabean的网上花店(改进版)】是一个利用Java技术栈构建的电子商务系统,专为在线花卉销售设计。该系统的核心是JSP(Java Server Pages)和javabean,它们共同构成了Web应用程序的后端逻辑。JSP是一种...
- 如果项目使用的是JSP+JavaBean+Servlet模式,建议整个项目统一使用GB2312编码,以避免编码不一致导致的乱码问题。 - 当需要将GBK编码转换为UTF-8时,可以使用特定的方法进行编码转换。 2. **配置Struts属性**...
JavaBean 在网络软件开发中的应用 JavaBean 是 Java 语言中的一种组件模型,用于描述...此外,在开发过程中,我们也需要考虑如何在两个 JSP 页面之间传递中文数据,不出现乱码。这可以通过使用 UTF-8 编码方式来实现。
在Java Web开发中,我们经常会遇到中文乱码的问题,特别是在JSP页面向Servlet传递参数时。这通常是由于字符编码不一致导致的。以下是一些解决此类问题的方法: 1. **项目编码设置**: 首先,确保整个项目的编码...
本案例主要介绍了如何使用JavaBean来实现GBK和ISO-8859-1之间的编码转换,这对于理解字符编码原理以及解决乱码问题至关重要。 首先,让我们详细解析一下提供的`Convert.java`代码: 1. `package shopBeans;`:这是...
8. **字符编码处理**:在 returnMessage.jsp 中,使用 `request.getParameter()` 获取的参数可能包含非 ASCII 字符,因此需要进行编码转换,防止乱码。 这个简单的 MVC 示例展示了如何将前端用户界面、业务逻辑和...
当表单提交的参数中含有汉字时,接收页面需确保字符编码的正确性,通常使用`request.setCharacterEncoding("UTF-8")`设置请求编码,以避免乱码问题。 8. **JSP与Servlet关系**: JSP本质是Servlet,JSP文件会被...
纯JSP版的简单入门留言本,不涉及自己编写的JAVA类....是JSP初学者的入门好程序,本人近期内还将推出model1(jsp+javabean)版以及mvc(jsp+javabean+servlet)版,多谢支持!本人QQ:503108946,欢迎探讨技术问题!
定义了一些常用的方法,比如中文字体处理(解决乱码问题),数据库数据转换为HTML格式显示的方法等。 7. javascript脚本 用来检查表单数据是否为空。 //用于管理员登陆的验证 function check() { var adminName=...
- **中文乱码**: - **解决响应中的乱码**:设置页面的字符集为UTF-8。 - **POST乱码**:在表单提交时设置编码为UTF-8。 - **GET乱码**:同样需要设置编码格式为UTF-8。 #### 第3章 请求的跳转与转发 - **范例**...