web编程的乱码问题

sunner008 2011-10-24 02:21:27
在eclipse中我编辑了一个东西,是页面转移的,由AddServlet.java,BookWriter.java,Book.java,hello.jsp源代码按顺序如下

Java codepackage jp.bcat;

import java.io.*;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.*;

import java.text.SimpleDateFormat;
import java.util.Date;

/**
* Servlet implementation class AddServlet
*/
@WebServlet("/AddServlet")
public class AddServlet extends HttpServlet {
private static final long serialVersionUID = 1L;

/**
* @see HttpServlet#HttpServlet()
*/

protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
String step = request.getParameter("step");
if ("prepare".equals(step))
prepare(request, response);

}
void prepare(HttpServletRequest request, HttpServletResponse response) throws IOException {
String errorMessage = "";
Book book = new Book();
String title = request.getParameter("title");
book.setTitle(title);
if (title == null || title.length() == 0)
errorMessage += "<P>タイトルを入力してください。</P>";


response.setContentType("text/html; charset=Shift_JIS");
PrintWriter out = response.getWriter();
out.println("<HTML><HEAD><TITLE>図書登録確認</TITLE></HEAD>");
if (errorMessage.length() == 0) {
out.println("<BODY>");

out.println("<PRE>");
new BookWriter(out, "+ ").write(book);
out.println("</PRE>");



out.println("</BODY>");
}
out.println("</HTML>");
}
}



package jp.bcat;

import java.io.PrintWriter;

public class BookWriter {
protected PrintWriter out;
protected String indent;

public BookWriter(PrintWriter out, String indent) {
this.out = out;
this.indent = indent;
}

public void write(Book book) {
out.println(indent + "タイトル: " + book.getTitle());

}
}



package jp.bcat;

import java.io.Serializable;

public class Book implements Serializable {

protected String title;

public String getTitle() {
return title;
}

public void setTitle(String value) {
title = value;
}
}


<%@ page language="java" contentType="text/html; charset=Shift_JIS"
pageEncoding="windows-31j"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>Insert title here</title>
</head>
<body>
<FORM action="AddServlet" method="POST">
<TABLE>
<TR><TD>タイトル: </TD><TD><INPUT name="title"></TD></TR>

<TR><TD><INPUT type="submit" value="登録"></TD></TR>
<INPUT type="hidden" name="step" value="prepare">
</TABLE>
</FORM>
</body>
</html>


如果输入汉字,显示的是????的乱码。
我估计我好像是Filter的设置好像不对,我的Filter的代码如下,如何在程序中使用这个过滤器呢?请高手们帮助,谢谢大家了。
Java codepackage jp.bcat.util;

import java.io.IOException;
import javax.servlet.*;

public class RequestEncodingFilter implements Filter {
private String encoding;

public void init(FilterConfig config) throws ServletException {
encoding = config.getInitParameter("encoding");
}

public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain) throws IOException, ServletException {
if (encoding != null)
req.setCharacterEncoding(encoding);
chain.doFilter(req, res);
}

public void destroy() {
}
}
...全文
53 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
sunner008 2011-10-24
  • 打赏
  • 举报
回复
我的web.XML的配置是
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE web-app PUBLIC
"-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
"http://java.sun.com/dtd/web-app_2_3.dtd">
<web-app>
<filter>
<filter-name>requestEncodingFilter</filter-name>
<filter-class>jp.bcat.util.RequestEncodingFilter</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>Shift_JIS</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>requestEncodingFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
</web-app>
我怎么感觉我这个XML没起到作用呢?是在WEB-INF文件夹里的XML还是WEB-INF,lib文件夹里的呢?
Cactus_hxk 2011-10-24
  • 打赏
  • 举报
回复
不知道你的filter是怎么配置,我把我的贴出来让你参考!

<filter>
<filter-name>Set Character Encoding</filter-name>
<filter-class>
com.hxk.common.servlet.EncodingFilter
</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>
teemai 2011-10-24
  • 打赏
  • 举报
回复
你这是日文啊。web.xml贴出来看看
nizhicheng 2011-10-24
  • 打赏
  • 举报
回复
还一个就是容器本身可以设置编码的问题 如 TOMCAT CONFIG文件 可以设置 URIENcoding="utf-8"
sunner008 2011-10-24
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 ajun_studio 的回复:]

统一都换成yutf-8试试
[/Quote]
都换成yutf-8也不行
sunner008 2011-10-24
  • 打赏
  • 举报
回复
在程序调试的时候,我发现这个地方还有一个其他的问题,就是在
<servlet>
<servlet-name>add</servlet-name>
<servlet-class>jp.bcat.AddServlet</servlet-class>
</servlet>

<servlet-mapping>
<servlet-name>add</servlet-name>
<url-pattern>/add</url-pattern>
</servlet-mapping>
这两个地方都设成add,就是说如果把<FORM action="AddServlet" method="POST">改成<FORM action="add" method="POST">这个add能够实现AddServlet,但是
但是从http://localhost:8080/char/hello.jsp按登录按钮之后,出现
type ステータスレポート

メッセージ /char/add

説明 The requested resource (/char/add) is not available.
这个错误,应该是web.xml的设定没有起到作用,如果实现不了,可能这个和filer过滤器也应该起不到作用吧?
请求高手的帮助,十分感谢!!!!!
飓风zj 2011-10-24
  • 打赏
  • 举报
回复
统一都换成yutf-8试试
lyhmy 2011-10-24
  • 打赏
  • 举报
回复
<%@ page language="java" contentType="text/html; charset=Shift_JIS"
pageEncoding="windows-31j"%>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">

你在这个页面一下就写了3种编码(Shift_JIS、windows-31j、utf-8),换成统一的一种,再在Filter中设置时也设置同一种编码方式呢
pmlxp 2011-10-24
  • 打赏
  • 举报
回复

request.setCharacterEncoding("UTF-8");

sunner008 2011-10-24
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 gavin_ts 的回复:]

response.setContentType("text/html; charset=Shift_JIS");
改成
response.setContentType("text/html; charset=utf-8");
试试!
[/Quote]
改成了但是不行
我嘞个去 2011-10-24
  • 打赏
  • 举报
回复
response.setContentType("text/html; charset=Shift_JIS");
改成
response.setContentType("text/html; charset=utf-8");
试试!

58,454

社区成员

发帖
与我相关
我的任务
社区描述
Java Eclipse
社区管理员
  • Eclipse
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧