在Java Web开发中,由于Web容器内部所使用的编码格式其实不支持中文,所以,处理阅读器要求的中文数据会出现乱码。
Web容器使用的编码格式是ISO⑻859⑴,所以在Web利用的业务处理中也会使用ISO⑻859⑴的编码格式。虽然阅读器提交要求使用的中文编码格式是UTF⑻,但是经业务处理中的ISO⑻859⑴编码,就会出现乱码。在开发中,处理此问题的方法是:通过过滤器来处理字符编码。
范例:
实现图书信息的添加功能,并创建字符编码过滤器,避免中文乱码出现。
(1)创建字符编码过滤器,其名称为EnCodingFilter,该类实现了javax.servlet.Filter接口,并在doFilter()方法中对要求中的中文的字符编码格式进行设置。
package com.zgy.filter;
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 EnCodingFilter implements Filter {
String enCoding = null; // 字符编码
@OverrIDe
public voID destroy() {
// Todo auto-generated method stub
enCoding = null;
}
@OverrIDe
public voID doFilter(ServletRequest request, ServletResponse response,
FilterChain chain) throws IOException, servletexception {
// Todo auto-generated method stub
if (enCoding != null) {
request.setCharacterEnCoding(enCoding); //设置resquest字符编码
response.setContentType("text/HTML;charset=" + enCoding); //设置response字符编码
}
chain.doFilter(request, response); //传递给下1个过滤器
}
@OverrIDe
public voID init(FilterConfig filterConfig) throws servletexception {
// Todo auto-generated method stub
enCoding = filterConfig.getinitParameter("enCoding"); //获得初始化参数enCoding
}
}
(2)配置过滤器EnCodingFilter
<filter>
<filter-name>EnCodingFilter</filter-name>
<filter-class>com.zgy.filter.EnCodingFilter</filter-class>
<init-param>
<param-name>enCoding</param-name>
<param-value>UTF⑻</param-value>
</init-param>
</filter>
<filter-mapPing>
<filter-name>EnCodingFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapPing>
(3)创建名为BookServlet类,该类继承了httpServlet,是处理添加图书信息要求的Servlet对象。
package com.zgy.servlet;
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.servletexception;
import javax.servlet.http.httpServlet;
import javax.servlet.http.httpServletRequest;
import javax.servlet.http.httpServletResponse;
public class BookServlet extends httpServlet {
private static final long serialVersionUID = 1L;
protected voID doGet(httpServletRequest request,
httpServletResponse response) throws servletexception, IOException {
// 处理get要求
doPost(request, response);
}
voID doPost(httpServletRequest request, IOException {
PrintWriter out = response.getWriter(); //获得PrintWriter
String ID = request.getParameter("ID");//获得图书编号
String name = request.getParameter("name");//获得图书名称
String author = request.getParameter("author");//获得图书作者
String price = request.getParameter("price");
out.print("<h2>图书信息添加成功</h2><hr>");
out.print("图书编号:"+ID+"</br>");
out.print("图书名称:"+name+"图书作者:"+author+"图书价格:"+price+"</br>");
out.flush();
out.close();
}
}
PS:
在Java Web开发中,通常情况下,Servlet所处理的要求是GET或POST,所以可以在doGet()方法中调用doPost()方法,把业务代码写到doPost()方法中,也能够在doPost()方法中调用doGet()方法,把业务处理代码写到doGet()方法中,不管Servlet接受的要求类型是GET还是POST,Servlet都会对其进行处理
(4)配置BookServlet
<servlet>
<servlet-name>BookServlet</servlet-name>
<servlet-class>com.zgy.servlet.BookServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>BookServlet</servlet-name>
<url-pattern>/BookServlet</url-pattern>
</servlet-mapping>
(5)创建book.Jsp页面,他是程序中的主页,该页面主要用于放置添加图书信息的表单。
<%@ page language="java" import="java.util.*" pageEnCoding="UTF⑻"%>
<%
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>book page</>
Meta http-equiv="pragma" content="no-cache""cache-control" "expires" "0">
"keywords" "keyword1,keyword2,keyword3""description" "This is my page">
@H_444_419@<!--
@H_444_419@<link @H_444_419@rel@H_444_419@="@H_444_419@stylesheet@H_444_419@" type="text/@H_444_419@CSS@H_444_419@" @H_444_419@href@H_444_419@="styles.CSS">
@H_444_419@-->
>
body>
form action="BookServlet" method="post">
table align="center" border="1" wIDth="350"trtd class="2" colspan="2"h2>添加图书信息td"right">图书编号:input type="text" name="ID">图书名称:td"name">图书作者:"author">图书价格:"price""submit" value="添 加"/>
tableform
总结
以上是内存溢出为你收集整理的JSP详细篇――Servlet过滤器和监听器(二)全部内容,希望文章能够帮你解决JSP详细篇――Servlet过滤器和监听器(二)所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)