Web---演示servlet技术(servlet生命周期),解决中文乱码问题
发布日期:2021-06-29 13:36:43 浏览次数:2 分类:技术文章

本文共 4927 字,大约阅读时间需要 16 分钟。

本节讲解决中文乱码问题的4种方法。

还有更好的方法,也就是用过滤器,这里就不演示了,博主目前也不会~呼♪(^∇^*)~过段时间才会学。

servlet生命周期演示:

index.jsp:

<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>                        演示servlet技术                        

演示servlet技术

访问FirstServlet

FirstServlet.java:

package cn.hncu.servlet;import java.io.IOException;import javax.servlet.Servlet;import javax.servlet.ServletConfig;import javax.servlet.ServletException;import javax.servlet.ServletRequest;import javax.servlet.ServletResponse;public class FirstServlet implements Servlet{
//只有第一次访问才会被执行一次,最先执行一次! public FirstServlet() { System.out.println("1 构造方法被执行..."+this); } //关闭Tomcat服务器时会执行一次。如果是通过myeclipse关闭的,是不会执行的,因为是直接关闭了java虚拟机。 //最后执行一次 @Override public void destroy() { System.out.println("4 destroy..."+this); } @Override public ServletConfig getServletConfig() { return null; } @Override public String getServletInfo() { return null; } //第一次被访问才执行,在构造方法之后执行一次! @Override public void init(ServletConfig config) throws ServletException { System.out.println("2 init..."+this); String name = config.getInitParameter("name"); System.out.println("name:"+name); } //每次访问都执行,(第一次)init()后执行 @Override public void service(ServletRequest req, ServletResponse resp) throws ServletException, IOException { System.out.println("333 servlet"+this); }}

web.xml:

index.jsp
firstServlet
cn.hncu.servlet.FirstServlet
name
Jack
firstServlet
/first

配置需要初始化的参数:

name
Jack

在servlet中:

用config.getInitParameter(“name”);去得到name参数的值。

演示结果:

我们点击访问:访问FirstServlet

看后台的输出信息:

不关闭服务器再去访问:

用myeclipse关闭服务器-因为是直接关闭了java虚拟机,所以不会再运行destroy()方法。也就没有再输出。

用Tomcat的shutdown.bat关闭服务器:

解决中文乱码问题

index.jsp中增加:

以下演示用户登录

姓名:
密码:

web.xml增加的代码:

login
cn.hncu.servlet.LoginServlet
login
/login

LoginServlet.java:

package cn.hncu.servlet;import java.io.IOException;import java.io.PrintWriter;import javax.servlet.Servlet;import javax.servlet.ServletConfig;import javax.servlet.ServletException;import javax.servlet.ServletRequest;import javax.servlet.ServletResponse;public class LoginServlet implements Servlet{
@Override public void destroy() { } @Override public ServletConfig getServletConfig() { return null; } @Override public String getServletInfo() { return null; } private String charset = null; @Override public void init(ServletConfig config) throws ServletException { //法四: charset = config.getInitParameter("character"); } @Override public void service(ServletRequest req, ServletResponse res) throws ServletException, IOException { //解决中文乱码问题 //前提:前台页面必须以post方式提交中文---因为post会设置http协议头"Content-Type = application/x-www-form-urlencoded", //这样Tomcat才知道这是编码的字符数据 //法一:在Tomcat的server.xml中的
中添加一个属性:URLEncoding="utf-8" //!!!法一是不可取的,因为Tomcat是公共平台,这个项目只是其中的一个项目, //不能把平台看成私有的即最好不要去修改,否则其他项目可能会出现问题 //法二:把Tomcat解错的码还原回来 //这个方法还行,但如果前台传输的很多参数都是中文,那么我们要对每个参数都要进行这样还原,显然比较麻烦。 //还有,如果以后要改编码,就得改源代码,对客户来说比较麻烦。对程序员也一样 //String name = req.getParameter("name"); //byte bs[] = name.getBytes("iso8859-1"); //name = new String(bs,"utf-8"); //System.out.println(name); //法三:这种解决方式是比较好的,但有一个缺点:如果以后要改编码,就得改源代码,对客户来说比较麻烦。对程序员也一样 //req.setCharacterEncoding("utf-8"); //String name = req.getParameter("name"); //法四:其实是在web.xml中把编码设置成参数,然后在这里读取出来,利用“法2”进行设置。以后如果要更改编码,只要更改web.xml中的相应参数设置就OK了 req.setCharacterEncoding(charset); String name = req.getParameter("name"); String pwd = req.getParameter("pwd"); //用name和pwd到后台去访问数据库,以验证该用户信息是否正确(登录是否成功) //本例不是讲解这个,所以省略。 res.setContentType("text/html;charset=utf-8");//告诉浏览器,我下面发的内容是什么格式的东西,什么编码的 String html = "
name:"+name+ "
pwd:"+pwd+ ""; PrintWriter out = res.getWriter(); out.write(html); //*******另外一个小知识点: //Tomcat项目运行时,加载jar包或类文件的顺序:TOMCAT_HOME\lib --> webapps\项目名\WEB-INF\lib --> webapps\项目名\WEB-INF\classes目录下面的类 //后加载的会覆盖前面的---即后加载有效-和java相反(父类加载机制) }}

有2个小知识点:

1:

Tomcat项目运行时,加载jar包或类文件的顺序:TOMCAT_HOME\lib –> webapps\项目名\WEB-INF\lib –> webapps\项目名\WEB-INF\classes目录下面的类
后加载的会覆盖前面的—即后加载有效-和java相反(父类加载机制)

2:

加这个的位置是web.xml中,

演示结果:

一开始未写解决中文乱码时的演示结果:

后台显示:

用中文乱码解决时(不把每一种方法的结果都演示出来了)

转载地址:https://chenhx.blog.csdn.net/article/details/51942252 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:经典算法面试题目-判断一个字符串中的字符是否唯一(1.1)
下一篇:Web---HTTP请求、重定向、转发和数据压缩

发表评论

最新留言

留言是一种美德,欢迎回访!
[***.207.175.100]2024年04月30日 14时38分54秒