Servlet字符编码过滤器,实现图书信息的添加功能,避免产生文字乱码现象的产生

时间:2022-08-30 20:35:24

同样的代码,网上可以找到和我一模一样的代码和配置,比我的更加详细,但是我重新写一个博客的原因自是把错误的原因写出来,因为这就是个坑,我弄了一天,希望对你们有所帮助。只为初学者发现错误不知道怎么解决有所帮助。不废话,上代码


第一个文件index.jsp,当然这个页面一般都是最后写的,这里我先介绍的原因的基本没啥错误。

注意: <form action="AddServlet" method="post">然后界面优化看自己写的就ok了!!!

 <%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!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 align="center" border="1" width="350">
<tr>
<td class="2" align="center" colspan="2">
<h2>添加图书信息</h2>
</td>
</tr>
<tr>
<td align="right">图书编号:</td>
<td>
<input type="text" name="id">
</td>
</tr>
<tr>
<td align="right">图书名称:</td>
<td>
<input type="text" name="name">
</td>
</tr>
<tr>
<td align="right">作者:</td>
<td>
<input type="text" name="author">
</td>
</tr>
<tr>
<td align="right">价格:</td>
<td>
<input type="text" name="price">
</td>
</tr>
<tr>
<td class="2" align="center" colspan="2">
<input type="submit" value="添加">
</td>
</tr>
</table>
</form>
</body>
</html>

第二个文件就是这个设置字符编码过滤器对象的Servlet的类CharactorFilter,其实这个文件如果你是初学者按照书本上的写没啥问题,细心点就可以了,把doFilter这个方法的参数自己记的修改为合理的ServletRequest request, ServletResponse response, FilterChain chain,理解书本上讲的,过滤器的实现等等等等。然后这个基本没啥大问题。

 package com.ningmeng;

 import java.io.IOException;

 import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet; /**
* Servlet implementation class CharactorFilter
*/
@WebServlet("/CharactorFilter")
public class CharactorFilter implements Filter {
private static final long serialVersionUID = 1L;
String encoding=null; //字符编码 /**
* @see Filter#init(FilterConfig)
*/
public void init(FilterConfig filterConfig) throws ServletException {
encoding=filterConfig.getInitParameter("encoding");
//获取初始化参数
} /**
* @see Filter#doFilter(ServletRequest, ServletResponse, FilterChain)
*/
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
// TODO Auto-generated method stub
if(encoding!=null){//判断字符编码是否为空
request.setCharacterEncoding(encoding);//设置request的编码格式
response.setContentType("text/html;charset="+encoding);
//设置request字符编码 }
chain.doFilter(request, response);//传递给下一个过滤器
} /**
* @see Servlet#destroy()
*/
public void destroy() {
// TODO Auto-generated method stub
encoding=null;
} }

第三,当写好CharactorFilter类后,就需要配置web.xml,配置这个字节码的web.xml本来也没啥问题,就是注意过滤器名称,过滤器的完整类名,过滤器映射的过滤器名称和URL映射,这几个名字一定要配对就行了,基本没啥大的问题!!!

然而最扯淡的就是配置Servlet的问题,这里其实应该先说AddServlet.java这个类的,但是web.xml的配置都写在一起,所以先说下这个问题,一个令我找了一天的扯淡问题,

就是这句话

<servlet-mapping>
  <!-- Servlet映射 -->
      <servlet-name>AddServlet</servlet-name>
      <!-- Servlet名称 -->
      <url-pattern>/as</url-pattern>
      <!-- URL映射 -->
  </servlet-mapping> 

当时我学的时候按照书本的写的,<url-pattern>/AddServlet</url-pattern>老报错,Server Tomcat v7.0 Server at localhost failed to start.就是这个扯淡的错误,当然对于英语不好的我,先是百度翻译,最后搜索错误,看到百度一大推,然并卵,并没有解决我的问题。直到我把   <url-pattern>/as</url-pattern>,当然这个名字是随便起得,然后我迫不及待地运行,竟然执行了,我真是搞不懂了,开始我把配置Servlet的这点删了,也可以运行,但我直到如果不配置Servlet肯定不对,虽然可以运行,后来请教了别人一下,虽然他也没给我说明白为啥,但是我发现了错误并解决了,最好不好把这个名字起的和上面的一样,ok,就这样代码顺利执行,顿时顺了一口气。        

 <?xml version="1.0" encoding="gbk"?>
<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">
<filter>
<!-- 声明过滤器 -->
<filter-name>CharactorFilter</filter-name>
<!-- 过滤器名称 -->
<filter-class>com.ningmeng.CharactorFilter</filter-class>
<!-- 过滤器的完整类名 -->
<init-param>
<!-- 初始化参数 -->
<param-name>encoding</param-name>
<!-- 参数名 -->
<param-value>UTF-8</param-value>
<!-- 参数值 -->
</init-param>
</filter>
<filter-mapping>
<!-- 过滤器映射 -->
<filter-name>CharactorFilter</filter-name>
<!-- 过滤器名称 -->
<url-pattern>/*</url-pattern>
<!-- URL映射 -->
</filter-mapping>
<servlet>
<!-- 声明Servlet -->
<servlet-name>AddServlet</servlet-name>
<!-- Servlet名称 -->
<servlet-class>com.ningmeng.AddServlet</servlet-class>
<!-- Servlet完整类名 -->
</servlet>
<servlet-mapping>
<!-- Servlet映射 -->
<servlet-name>AddServlet</servlet-name>
<!-- Servlet名称 -->
<url-pattern>/as</url-pattern>
<!-- URL映射 -->
</servlet-mapping>
</web-app>

第四or第三个文件,其实这个文件也没啥错误,就是写的时候和创建的时候注意一下就可以了,然后就可以直接运行了,享受代码带给你的乐趣,好了,好了,饿的慌,去吃饭。

 package com.ningmeng;

 import java.io.IOException;
import java.io.PrintWriter; import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse; /**
* Servlet implementation class AddServlet
*/
@WebServlet("/AddServlet")
public class AddServlet extends HttpServlet {
private static final long serialVersionUID = 1L; /**
* @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
*/
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
doPost(request,response);//处理get请求 } /**
* @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
*/
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//处理post请求
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>");//输出图书信息
out.print("图书编号:"+id+"<br>");
out.print("图书名称"+name+"<br>");
out.print("作者:"+author+"<br>");
out.print("价格:"+price+"<br>");
out.flush();//刷新流
out.close();//关闭流 } }

Servlet字符编码过滤器,实现图书信息的添加功能,避免产生文字乱码现象的产生

Servlet字符编码过滤器,实现图书信息的添加功能,避免产生文字乱码现象的产生

如果你按照我的方法还没解决你的问题,可以留言或者加我企鹅1748741328,一起讨论交流学习

享受代码带来的乐趣,爱生活爱编程      

Servlet字符编码过滤器,实现图书信息的添加功能,避免产生文字乱码现象的产生的更多相关文章

  1. Servlet字符编码过滤器

    在Java Web程序开发中,由于Web容器内部使用编码格式并不支持中文字符集,所以,处理浏览器请求中的中文数据就会出现乱码的现象.由于Web容器使用了ISO-8859-1的编码格式,所以在Web应用 ...

  2. servlet中的字符编码过滤器的使用

    一:简介 Servlet过滤器是客户端和目标资源的中间层组件,主要是用于拦截客户端的请求和响应信息.如当web容器收到一条客户端发来的请求 web容器判断该请求是否与过滤器相关联,如果相关联就交给过滤 ...

  3. Jsp字符编码过滤器

    通过此过滤器,可以实现统一将编码设置为UTF-8. 1.首先在web.xml中配置,添加如下代码: <!-- 过滤器 --> <filter> <filter-name& ...

  4. 关于web&period;xml中配置Spring字符编码过滤器以解决中文乱码的问题

    当出现中文乱码问题,Spring中可以利用CharacterEncodingFilter过滤器解决,如下代码所示: <!-- Spring字符编码过滤器:解决中文乱码问题 --> < ...

  5. Java Web---登录验证和字符编码过滤器

    什么是过滤器? 在Java Web中,过滤器即Filter.Servlet API中提供了一个Filter接口(javax.servlet.Filter).开发web应用时,假设编写的Java类实现了 ...

  6. 深入Struts2的过滤器FilterDispatcher--中文乱码及字符编码过滤器

    引用 前几天在论坛上看到一篇帖子,是关于Struts2.0中文乱码的,楼主采用的是spring的字符编码过滤器(CharacterEncodingFilter)统一编码为GBK,前台提交表单数据到Ac ...

  7. Spring的字符编码过滤器CharacterEncodingFilter

    Spring中的字符编码过滤器,用来解决我们项目中遇到的编码问题. 使用方式特别友好,在web.xml加入: <filter> <description>字符集过滤器</ ...

  8. SpringMVC配置字符编码过滤器CharacterEncodingFilter来解决表单乱码问题

    1.GET请求 针对GET请求,可以配置服务器Tomcat的conf\server.xml文件,在其第一个<Connector>标签中,添加URIEncoding="UTF-8& ...

  9. spring设置字符编码过滤器

    一.在web.xml中的配置 <!-- characterEncodingFilter字符编码过滤器 --> <filter> <filter-name>chara ...

随机推荐

  1. 通过innobackupex实现对MySQL的完整备份与还原

    备份 新建一个用于存放备份的目录 mkdir /backup 执行以下命令: innobackupex --password=test /backup/ 执行完后你会看到“completed OK!” ...

  2. 基于&OpenCurlyDoubleQuote;事件”驱动的领域驱动设计(DDD)框架分析

    摘抄自 从去年10月份开始,学了几个月的领域驱动设计(Domain Driven Design,简称DDD).主要是学习领域驱动设计之父Eric Evans的名著:<Domain-driven ...

  3. GBK、UTF8、UNICODE编码转换

    string GBKToUTF8(const std::string& strGBK) { , strGBK.c_str(), -, NULL, ); WCHAR * wszUTF8 = ne ...

  4. ios 解析html

    xml,json都有大量的库来解析,我们如何解析html呢? TFHpple是一个小型的封装,可以用来解析html,它是对libxml的封装,语法是xpath.今天我看到一个直接用libxml来解析h ...

  5. cocos2d-x 手势之简单实现

    转自:http://blog.sina.com.cn/s/blog_61ece099010187tl.html 手势之前也发过一篇,但是我感觉那个还不够轻巧. 而且大多数游戏里面不会有那么复杂的手势, ...

  6. Day2 Python的运算符及三大语句控制结构

    Python的运算符 Python语言支持以下类型的运算符: 算术运算符 比较(关系)运算符 赋值运算符 逻辑运算符 位运算符 成员运算符 身份运算符 运算符优先级 Python的三大语句控制结构: ...

  7. docker-容器,仓库

    ---恢复内容开始--- 前言: 学技术不能该断时间,连续的学习才是最好的学习方式. 00x1: 创建一个容器:docker create -it xxxx 而启动容器就有两种状态了,第一:新容器启动 ...

  8. 音频格式RAW和PCM区别和联系

    定义:  RAW:在一些外国品牌的播放机中名为 BitSream,我们通常称为“源码”.意义是把光盘上的音频格式不加处理地.“原汁原味”地从同轴和光纤输出.这就要求用户的功放具备这种音频格式的解码功能 ...

  9. 亿级 Web 系统搭建:单机到分布式集群

    本文内容 Web 负载均衡 HTTP 重定向 反向代理 IP 负载均衡 DNS 负载均衡 Web 系统缓存机制的建立和优化 MySQL 数据库内部缓存 搭建多台 MySQL 数据库 MySQL 数据库 ...

  10. 使用动态跟踪技术SystemTap监控MySQL、Oracle性能

    [IT168 技术]本文根据吕海波2018年5月11日在[第九届中国数据库技术大会]上的演讲内容整理而成. 讲师介绍: 吕海波,美创科技研究员,ITPUB管理版版主.出版技术书籍<Oracle内 ...