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

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

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


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

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

 1 <%@ page language="java" contentType="text/html; charset=UTF-8"
 2     pageEncoding="UTF-8"%>
 3 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
 4 <html>
 5 <head>
 6 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 7 <title>Insert title here</title>
 8 </head>
 9 <body>
10     <form action="AddServlet" method="post">
11         <table align="center" border="1" width="350">
12             <tr>
13                 <td class="2" align="center" colspan="2">
14                     <h2>添加图书信息</h2> 
15                 </td>
16             </tr>
17             <tr>
18                 <td align="right">图书编号:</td>
19                 <td>
20                     <input type="text" name="id">
21                 </td>
22             </tr>
23             <tr>
24                 <td align="right">图书名称:</td>
25                 <td>
26                     <input type="text" name="name">
27                 </td>
28             </tr>
29             <tr>
30                 <td align="right">作者:</td>
31                 <td>
32                     <input type="text" name="author">
33                 </td>
34             </tr>
35             <tr>
36                 <td align="right">价格:</td>
37                 <td>
38                     <input type="text" name="price">
39                 </td>
40             </tr>
41             <tr>
42                 <td class="2" align="center" colspan="2">
43                     <input type="submit" value="添加">
44                 </td>
45             </tr>
46         </table>
47     </form>
48 </body>
49 </html>

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

 1 package com.ningmeng;
 2 
 3 import java.io.IOException;
 4 
 5 import javax.servlet.Filter;
 6 import javax.servlet.FilterChain;
 7 import javax.servlet.FilterConfig;
 8 import javax.servlet.ServletConfig;
 9 import javax.servlet.ServletException;
10 import javax.servlet.ServletRequest;
11 import javax.servlet.ServletResponse;
12 import javax.servlet.annotation.WebServlet;
13 import javax.servlet.http.HttpServlet;
14 
15 /**
16  * Servlet implementation class CharactorFilter
17  */
18 @WebServlet("/CharactorFilter")
19 public class CharactorFilter implements Filter {
20     private static final long serialVersionUID = 1L;
21     String encoding=null;  //字符编码 
22  
23     /**
24      * @see Filter#init(FilterConfig)
25      */
26     public void init(FilterConfig filterConfig) throws ServletException { 
27         encoding=filterConfig.getInitParameter("encoding");
28         //获取初始化参数
29     }
30 
31     /**
32      * @see Filter#doFilter(ServletRequest, ServletResponse, FilterChain)
33      */
34     public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException { 
35          // TODO Auto-generated method stub
36         if(encoding!=null){//判断字符编码是否为空
37             request.setCharacterEncoding(encoding);//设置request的编码格式
38             response.setContentType("text/html;charset="+encoding);
39             //设置request字符编码
40             
41         }
42     chain.doFilter(request, response);//传递给下一个过滤器
43     }
44 
45 
46     /**
47      * @see Servlet#destroy()
48      */
49     public void destroy() {
50         // TODO Auto-generated method stub
51         encoding=null;
52     }
53 
54 }

第三,当写好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,就这样代码顺利执行,顿时顺了一口气。        

 1 <?xml version="1.0" encoding="gbk"?>
 2 <web-app version="2.5" 
 3     xmlns="http://java.sun.com/xml/ns/javaee" 
 4     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
 5     xsi:schemaLocation="http://java.sun.com/xml/ns/javaee 
 6     http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
 7   <filter>
 8   <!-- 声明过滤器 -->
 9       <filter-name>CharactorFilter</filter-name>
10       <!-- 过滤器名称 -->
11       <filter-class>com.ningmeng.CharactorFilter</filter-class>
12       <!-- 过滤器的完整类名 -->
13       <init-param>
14       <!-- 初始化参数 -->
15           <param-name>encoding</param-name>
16           <!-- 参数名 -->
17           <param-value>UTF-8</param-value>
18           <!-- 参数值 -->
19       </init-param>
20   </filter>
21   <filter-mapping>
22   <!-- 过滤器映射 -->
23       <filter-name>CharactorFilter</filter-name>
24       <!-- 过滤器名称 -->
25       <url-pattern>/*</url-pattern>
26       <!-- URL映射 -->
27   </filter-mapping>
28   <servlet>
29   <!-- 声明Servlet -->
30       <servlet-name>AddServlet</servlet-name>
31       <!-- Servlet名称 -->
32       <servlet-class>com.ningmeng.AddServlet</servlet-class>
33       <!-- Servlet完整类名 -->
34   </servlet>
35   <servlet-mapping>
36   <!-- Servlet映射 -->
37       <servlet-name>AddServlet</servlet-name>
38       <!-- Servlet名称 -->
39       <url-pattern>/as</url-pattern>
40       <!-- URL映射 -->
41   </servlet-mapping>  
42 </web-app>

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

 1 package com.ningmeng;
 2 
 3 import java.io.IOException;
 4 import java.io.PrintWriter;
 5 
 6 import javax.servlet.ServletException;
 7 import javax.servlet.annotation.WebServlet;
 8 import javax.servlet.http.HttpServlet;
 9 import javax.servlet.http.HttpServletRequest;
10 import javax.servlet.http.HttpServletResponse;
11 
12 /**
13  * Servlet implementation class AddServlet
14  */
15 @WebServlet("/AddServlet")
16 public class AddServlet extends HttpServlet {
17     private static final long serialVersionUID = 1L;
18        
19 
20     /**
21      * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
22      */
23     protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
24         // TODO Auto-generated method stub
25         doPost(request,response);//处理get请求
26         
27     }
28 
29     /**
30      * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
31      */
32     protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
33         //处理post请求
34         PrintWriter out=response.getWriter();//获取PrintWriter
35         String id=request.getParameter("id");//获取图书编号
36         String name=request.getParameter("name");//获取图书名称
37         String author=request.getParameter("author");//获取图书作者
38         String price=request.getParameter("price");//获取图书价格
39         out.print("<h2>图书信息添加成功</h2>");//输出图书信息
40         out.print("图书编号:"+id+"<br>");
41         out.print("图书名称"+name+"<br>");
42         out.print("作者:"+author+"<br>");
43         out.print("价格:"+price+"<br>");
44         out.flush();//刷新流
45         out.close();//关闭流
46         
47     }
48 
49 }

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

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

目录
相关文章
|
3月前
|
JavaScript Java 容器
servlet过滤器Filter简要回顾-过滤请求字符编码,/和/*和/**的区别
本文简要回顾了Servlet过滤器Filter的概念和使用,通过实例演示了如何创建过滤器以过滤请求字符编码,并解释了在web.xml中配置过滤器时使用`/`、`/*`和`/**`的区别。
servlet过滤器Filter简要回顾-过滤请求字符编码,/和/*和/**的区别
|
4月前
|
SQL Java 数据库
jsp中使用Servlet查询SQLSERVER数据库中的表的信息,并且打印在屏幕上
该博客文章介绍了在JSP应用中使用Servlet查询SQL Server数据库的表信息,并通过JavaBean封装图书信息,将查询结果展示在Web页面上的方法。
jsp中使用Servlet查询SQLSERVER数据库中的表的信息,并且打印在屏幕上
|
4月前
|
存储 前端开发 Java
servlet过滤器--使用过滤器统计网站访问人数的计数(注解形式)
该文章展示了如何使用Servlet过滤器(Filter)通过注解方式创建一个网站访问人数统计功能,通过`@WebFilter`注解定义过滤器及其URL模式,并在`doFilter`方法中实现计数逻辑,将访问次数存储在`ServletContext`中,最后在JSP页面展示访问人数。
servlet过滤器--使用过滤器统计网站访问人数的计数(注解形式)
|
4月前
|
C# 数据可视化 开发者
WPF开发者福音:深度解析OxyPlot与LiveCharts图表库,轻松实现数据可视化不再是难题!
【8月更文挑战第31天】在WPF应用中,数据可视化对提升用户体验至关重要。本文介绍并演示了两种流行图表库OxyPlot和LiveCharts的集成与使用方法。OxyPlot是一款适用于.NET应用的开源图表库,提供多种图表类型,易于集成。LiveCharts则以其丰富的图表类型和动画效果,特别适合实时数据展示。通过具体代码示例,本文展示了如何利用这两种图表库创建折线图和柱状图,并详细说明了安装和配置步骤。希望本文能帮助开发者在WPF应用中轻松实现高效、美观的数据可视化。
245 0
|
4月前
|
监控 前端开发 Java
揭秘Web开发神器:Servlet、过滤器、拦截器、监听器如何联手打造无敌博客系统,让你的用户欲罢不能!
【8月更文挑战第24天】在Java Web开发中,Servlet、过滤器(Filter)、拦截器(Interceptor,特指Spring MVC中的)及监听器(Listener)协同工作,实现复杂应用逻辑。以博客系统为例,Servlet处理文章详情请求,过滤器(如LoginFilter)检查登录状态并重定向,Spring MVC拦截器(如LoggingInterceptor)提供细粒度控制(如日志记录),监听器(如SessionListener)监控会话生命周期事件。这些组件共同构建出高效、有序的Web应用程序。
42 0
|
7月前
|
存储 Java 应用服务中间件
Servlet执行流程&生命周期&方法介绍&体系结构、Request和Response的功能详解(2)
Servlet执行流程&生命周期&方法介绍&体系结构、Request和Response的功能详解
74 2
|
7月前
|
Web App开发 XML Java
Servlet执行流程&生命周期&方法介绍&体系结构、Request和Response的功能详解(1)
Servlet执行流程&生命周期&方法介绍&体系结构、Request和Response的功能详解
126 2
|
6月前
|
Java 应用服务中间件 开发工具
基于Servlet的3.1以上注解方式完成上传功能。
基于Servlet的3.1以上注解方式完成上传功能。
30 0
|
6月前
|
Java Apache
基于servlet完成文件上传功能
基于servlet完成文件上传功能
47 0
|
6月前
|
SQL 数据可视化 数据库
基于jsp+servlet的javaweb实现最基本的用户注册登陆注销功能
基于jsp+servlet的javaweb实现最基本的用户注册登陆注销功能
29 0