javaEE:day3-servlet生命周期、提交解决中文乱码、tomcat加载jar包或类文件的顺序
2016-12-28 11:00
507 查看
servlet生命周期
生命周期简介:
servlet在服务器第一次被请求的时候new出来,并初始化(即init())再调用service方法。这个实在服务器中new出来,然后用HashMap加的,与客户端无关。客户端之后访问只调用这个servlet的service方法。
具体分为4步:
1 构造方法 :服务器在被客户端第一次请求的时候运行 仅在服务器中运行一次
2 init方法:客户端第一次访问服务器的时候在服务器中进行初始化 仅一次。并且可以通过config参数在 web.xml中通过(key,value) 拿到属性值
3 service方法:每次访问都会运行service方法
4 destroy方法 :服务器在关闭服务器时运行一次 ps:这个方法要用tomcat的shutdown关,不能用myeclipse关 不然直接关了虚拟机,来不及与运行这个方法就被关闭了。
启动服务器就new出servlet并初始化
在web.xml中设置<load-on-startup>15</load-on-startup>
这个15是表示优先级,数值越小就越先执行。即在服务器启动的时候就运行这个servlet的1 构造方法和2 init方法。
提交中解决中文乱码问题
前提:前台页面必须以post方式提交中文 —因为post会设置http协议头“Content-Type = application/x-www-form-urlencoded”,这样Tomcat才知道这是编码的字符数据
四种方法:
1 在Tomcat的server.xml中的<Connect>
中添加一个属性:URIEncoding="utf-8"
这种方法不可取,因为Tomcat是公共平台,你只是其中的一个项目,不能把平台看成私有的即最好不要去修改,否则其它项目可能会出问题。
2 req.setCharacterEncoding("utf-8");
这种解决方式是比较好的,但有一个缺点:如果以后要改编码,就得改源代码,对客户来说比较麻烦。对程序员也一样
3 把Tomcat解错的码还原回来—-还行,但如果前台传输的很多参数都是中文,那么我们对每个参数都要这样还原,显然比较麻烦!
byte bs[] = name.getBytes("iso8859-1"); name = new String(bs,"utf-8");1
2
3
1
2
3
4 其实是在web.xml中把编码设置成参数,然后在这里读取出来,利用“法2”进行设置。以后如果要更改编码,只要更改web.xml中的相应参数设置就OK了
在web.xml中设置<init-param>
如下:
<init-param> <param-name>charset</param-name> <param-value>utf-8</param-value> </init-param>1
2
3
4
1
2
3
4
通过init方法的config参数去web.xml中通过
charset = config.getInitParameter("character"); req.setCharacterEncoding(charset);1
2
1
2
tomcat加载jar包或类文件的顺序
Tomcat项目运行时,加载jar包或类文件的顺序:TOMCAT_HOME\lib –> webapps\项目名\WEB-INF\lib –> webapps\项目名\WEB-INF\classes目录下面的类,后加载的会覆盖前面的—————即后加载有效
具体实现代码如下:
index.jsp
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <title>JAVAWEB-DAY3-Servlet技术</title> </head> <body> <a href="first">访问FirstServlet</a> <hr/> <h2>演示解决中文乱码问题</h2> <h1>以下是演示用户登录</h1> <form action="login" method="post"> 姓名:<input type="text" name = "name"/><br/> 密码:<input type="password" name = "pwd"/><br/> <input type="submit" value="登录"> </form> </body> </html>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
web.xml
<?xml version="1.0" encoding="UTF-8"?>1
<web-app version="3.0"
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_3_0.xsd"> <display-name></display-name>
<servlet>
<servlet-name>FirstServlet</servlet-name>
<servlet-class>cn.hncu.servlets.FirstServlet</servlet-class>
<init-param>
<param-name>name</param-name>
<param-value>jack</param-value>
</init-param>
<!--
<load-on-startup>15</load-on-startup>
-->
</servlet>
<servlet>
<servlet-name>LoginServlet</servlet-name>
<servlet-class>cn.hncu.servlets.LoginServlet</servlet-class>
<init-param> <param-name>charset</param-name> <param-value>utf-8</param-value> </init-param>
</servlet>
<servlet-mapping>
<servlet-name>LoginServlet</servlet-name>
<url-pattern>/login</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>FirstServlet</servlet-name>
<url-pattern>/first</url-pattern>
</servlet-mapping>
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
</web-app>
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
LoginServlet
package cn.hncu.servlets; 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; } String charset=""; @Override public void init(ServletConfig config) throws ServletException { charset = config.getInitParameter("charset"); } @Override public void service(ServletRequest req, ServletResponse res) throws ServletException, IOException { //解决中文乱码只能是在post下才能解决 因为get方式是原样输出,tomcat不知道是否采用了编码。 //而post方式提交,会设置http协议头“Content-Type = application/x-www-form-urlencoded”, //这样Tomcat才知道这是编码的字符数据 //这里必须在表单提交是post的前提下,设置接受和发送的编码和要发送的内容是什么东西。 //法1:在在Tomcat的server.xml中的<Connect>中添加一个属性:URIEncoding="utf-8" //法1 不可取,因为tomcat是一个公共的平台,我们不能随意更改平台,否则其他项目会出问题的 //法2:这种解决方式是比较好的,但有一个缺点:如果以后要改编码,就得改源代码,对客户来说比较麻烦。对程序员也一样 //注意 法2在getParameter之前就要设置编码setCharacterEncoding。 //req.setCharacterEncoding("utf-8"); res.setContentType("text/html; charset=utf-8"); //法4:在web.xml中将编码设置出参数,用init()读取出来,再利用法2 设置 req.setCharacterEncoding(charset); String name = req.getParameter("name"); String pwd = req.getParameter("pwd"); //System.out.println(name); //法3:把Tomcat解错的码还原回来----还行,但如果前台传输的很多参数都是中文,那么我们对每个参数都要这样还原,显然比较麻烦! //byte[] bs = name.getBytes("iso8859-1"); //String name2 = new String(bs, "utf-8"); PrintWriter out = res.getWriter(); String html = "<html><body><font color='red'>name:"+name+"</font><br/><font colr='green'>"+pwd+"</font></body></html>"; out.print(html); //Tomcat项目运行时,加载jar包或类文件的顺序:TOMCAT_HOME\lib --> webapps\项目名\WEB-INF\lib --> webapps\项目名\WEB-INF\classes目录下面的类 //后加载的会覆盖前面的---即后加载有效 } }1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
FirstServlet
package cn.hncu.servlets; import java.io.IOException; import javax.servlet.Servlet; import javax.servlet.ServletConfig; import javax.servlet.ServletException; import javax.servlet.ServletRequest; import javax.servlet.ServletResponse; /** * 演示servlet的生命周期 * @author <a href="mailto:wyj950411@foxmail.com">军街</a> * * @version 1.0 2016-7-17 */ public class FirstServlet implements Servlet { /* * 服务器在被客户端第一次请求的时候运行 仅在服务器中运行一次 */ public FirstServlet() { System.out.println("1 构造方法"+this); } /*服务器在关闭服务器时运行一次 * (non-Javadoc) * @see javax.servlet.Servlet#destroy() */ @Override public void destroy() { System.out.println("4 消亡"+this); } @Override public ServletConfig getServletConfig() { return null; } @Override public String getServletInfo() { return null; } /** * 客户端第一次访问服务器的时候在服务器中进行初始化 仅一次 * 可以通过config在 web.xml中通过(key,value) 拿到属性值 */ @Override public void init(ServletConfig config) throws ServletException { System.out.println("2 初始化"+this); String name = config.getInitParameter("name"); System.out.println("name:"+name); } /** * 每次访问都会运行service方法 */ @Override public void service(ServletRequest request, ServletResponse response) throws ServletException, IOException { System.out.println("3 访问service方法"+this); } // <load-on-startup>15</load-on-startup> 中间参数是优先级,越小越先执行 //这个是在web.xml中 //设置了这个Servlet在服务器启动就new出来并初始化即运行了1 FirstServlet()和 //2 init() 两个方法。 }
转载网址:http://blog.csdn.net/new___Smile/article/details/51935910?locationNum=6&fps=1
相关文章推荐
- javaEE:day3-servlet生命周期、提交解决中文乱码、tomcat加载jar包或类文件的顺序
- Jsp前台提交中文乱码问题解决方案(Tomcat项目运行时,加载jar包或类文件的顺序)
- Tomcat中用Filter解决JSP提交中文信息到Servlet的乱码问题
- Tomcat中用Filter解决JSP提交中文信息到Servlet的乱码问题
- Tomcat中用Filter解决JSP提交中文信息到Servlet的乱码问题
- jar包中class文件加载中文乱码解决
- tomcat加载jar包/类文件顺序 servlet加载的历程操作(参数配置)
- Tomcat中用Filter解决JSP提交中文信息到Servlet的乱码问题
- Tomcat get/post提交中文乱码解决办法
- 解决地址栏传中文出现乱码 tomcat配置文件解决方案
- Servlet + Tomcat 中文乱码的原理和解决方法
- Servlet:实现多个文件上传,上传中文文件乱码解决办法
- 【技术贴】servlet传参|前台传参含中文符号等 tomcat乱码 java后台接收乱码终极解决方
- 解决Tomcat下载中文名字文件乱码
- tomcat+mysql 中文乱码和存储大文件问题解决
- Tomcat 中文文件链接乱码问题解决
- Tomcat JSP提交参数中文乱码问题解决
- 解决AS3.0加载XML文件后中文乱码
- 修改Tomcat配置文件来解决中文乱码问题
- java压缩文件ant.jar解决中文乱码