servlet过程

[color=orange]Servlet基本概念回顾:

Servlet生命周期

Servlet运行在Servlet容器中,其生命周期由容器来管理。Servlet的生命周期通过javax.servlet.Servlet接口中的init()、service()和destroy()方法来表示。Servlet的生命周期包含了下面4个阶段:

(1)加载和实例化

Servlet容器负责加载和实例化Servlet。当Servlet容器启动时,或者在容器检测到需要这个Servlet来响应第一个请求时,创建 Servlet实例。当Servlet容器启动后,它必须要知道所需的Servlet类在什么位置,Servlet容器可以从本地文件系统、远程文件系统或者其他的网络服务中通过类加载器加载Servlet类,成功加载后,容器创建Servlet的实例。因为容器是通过Java的反射API来创建 Servlet实例,调用的是Servlet的默认构造方法(即不带参数的构造方法),所以我们在编写Servlet类的时候,不应该提供带参数的构造方法。

(2)初始化

[color=orange]在Servlet实例化之后,容器将调用Servlet的init()方法初始化这个对象。初始化的目的是为了让Servlet对象在处理客户端请求前完成一些初始化的工作,如建立数据库的连接,获取配置信息等。对于每一个Servlet实例,init()方法只被调用一次。在初始化期间,Servlet 实例可以使用容器为它准备的ServletConfig对象从Web应用程序的配置信息(在web.xml中配置)中获取初始化的参数信息。
[/color]
[/code]
(3)请求处理

Servlet容器调用Servlet的service()方法对请求进行处理。要注意的是,在service()方法调用之前,init()方法必须成功执行。在service()方法中,Servlet实例通过ServletRequest对象得到客户端的相关信息和请求信息,在对请求进行处理后,调用ServletResponse对象的方法设置响应信息。

(4)服务终止

当容器检测到一个Servlet实例应该从服务中被移除的时候,容器就会调用实例的destroy()方法,以便让该实例可以释放它所使用的资源,保存数据到持久存储设备中。当需要释放内存或者容器关闭时,容器就会调用Servlet实例的destroy()方法。在destroy()方法调用之后,容器会释放这个Servlet实例,该实例随后会被Java的垃圾收集器所回收。如果再次需要这个Servlet处理请求,Servlet容器会创建一个新的 Servlet实例。

如果需要让Servlet容器在启动时即加载Servlet,可以在web.xml文件中配置<load-on-startup>元素。 [/color]


[code="java"]
下面以一个Servlet实例,温故Servlet具体实际操作流程:

AjaxServlet 类
Java代码

1. package vivi.servlet.ajax;
2.
3. import java.io.IOException;
4. import java.io.PrintWriter;
5. import java.util.Random;
6.
7. import javax.servlet.ServletException;
8. import javax.servlet.http.HttpServlet;
9. import javax.servlet.http.HttpServletRequest;
10. import javax.servlet.http.HttpServletResponse;
11.
12. public class AjaxServlet extends HttpServlet{
13.
14. private static final String CONTENT_TYPE = "text/xml;charset=gb2312";
15.
16. public void init()throws ServletException{}
17.
18. public void doGet(HttpServletRequest request, HttpServletResponse response)
19. throws ServletException,IOException{
20. response.setContentType(CONTENT_TYPE);
21. response.setHeader("Cache-Control", "no-cache");
22. response.setDateHeader("Expires", 0);
23.
24. PrintWriter out = response.getWriter();
25. String action = request.getParameter("action");
26.
27. if("send".equals(action)){
28. Random random = new Random();
29. String AA = Integer.toString(Math.abs(random.nextInt()));
30. String BB = Integer.toString(Math.abs(random.nextInt()));
31. String CC = Integer.toString(Math.abs(random.nextInt()));
32. String DD = Integer.toString(Math.abs(random.nextInt()));
33.
34. StringBuffer sb = new StringBuffer();
35.
36. sb.append(AA); sb.append("@@@");
37. sb.append(BB); sb.append("@@@");
38. sb.append(CC); sb.append("@@@");
39. sb.append(DD);
40. out.write(sb.toString());
41. out.close();
42. }
43. }
44. }

package vivi.servlet.ajax;

import java.io.IOException;
import java.io.PrintWriter;
import java.util.Random;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class AjaxServlet extends HttpServlet{

private static final String CONTENT_TYPE = "text/xml;charset=gb2312";

public void init()throws ServletException{}

public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException,IOException{
response.setContentType(CONTENT_TYPE);
response.setHeader("Cache-Control", "no-cache");
response.setDateHeader("Expires", 0);

PrintWriter out = response.getWriter();
String action = request.getParameter("action");

if("send".equals(action)){
Random random = new Random();
String AA = Integer.toString(Math.abs(random.nextInt()));
String BB = Integer.toString(Math.abs(random.nextInt()));
String CC = Integer.toString(Math.abs(random.nextInt()));
String DD = Integer.toString(Math.abs(random.nextInt()));

StringBuffer sb = new StringBuffer();

sb.append(AA); sb.append("@@@");
sb.append(BB); sb.append("@@@");
sb.append(CC); sb.append("@@@");
sb.append(DD);
out.write(sb.toString());
out.close();
}
}
}

ajaxServlet页面
Html代码

1. <html>
2. <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
3. <head>
4. <title>AjaxServlet.html</title>
5. </head>
6. <script type="text/javascript">
7. var xhr = null;
8.
9. function getResult(){
10. var url = "/demo/AajaxServlet?action=send";
11.
12. if(window.XMLHttpRequest){
13. xhr = new XMLHttpRequest();
14. }else if(window.ActiveXObject){
15. xhr = new ActiveXObject("Microsoft.XMLHTTP");
16. }
17.
18. if(xhr){
19. xhr.open("GET",url, true);
20. xhr.onreadystatechange = complete;
21. xhr.send(null);
22. }
23. }
24. //分析返回的文本文档
25. function complete(){
26. if(xhr.readyState == 4){
27. if(xhr.status == 200){
28. var strResult = unescape(xhr.responseText);
29. var arrResult = strResult.split("@@@");
30.
31. RemoveRow(); //删除以前的数据.
32. num1 = arrResult[0]; num2 = arrResult[1];
33. num3 = arrResult[2]; num4 = arrResult[3];
34.
35. row1= tb.insertRow();
36. cell1 = row1.insertCell(); cell1.innerText = num1;
37. cell2 = row1.insertCell(); cell2.innerText = num2;
38. row2= tb.insertRow();
39. cell3 = row2.insertCell(); cell3.innerText = num3;
40. cell4 = row2.insertCell(); cell4.innerText = num4;
41. }else{
42. alert("this was a problem with the request");
43. }
44. }
45. }
46. //保留第一行表头,其余数据均删除.
47. function RemoveRow(){
48. var iRows = tb.rows.length;
49. for(var i=0;i< iRows-1;i++){
50. tb.deleteRow(1);
51. }
52. }
53. //2秒自动刷新一次,2秒取得一次数据.
54. function MyShow(){
55. timer = window.setInterval("getResult()",2000);
56. }
57. </script>
58. <body onload="MyShow()">
59. <table width="47%" height="23" border="0" cellpadding="1" cellspacing="0" id="tb">
60. <tr>
61. <td>代码</td>
62. <td>价格</td>
63. </tr>
64. </table>
65. <form>
66. <p>输入股票代码:
67. <input type="text" size="14" name="phone" id="phone"/>
68. </p>
69. <p>你交易的数量:</p>
70. <p><textarea name="order" rows="6" cols="50" id="order"></textarea></p>
71. <p><input type="submit" value="提交" id="submit" /></p>
72. </form>
73. </body>
74. </html>

<html>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<head>
<title>AjaxServlet.html</title>
</head>
<script type="text/javascript">
var xhr = null;

function getResult(){
var url = "/demo/AajaxServlet?action=send";

if(window.XMLHttpRequest){
xhr = new XMLHttpRequest();
}else if(window.ActiveXObject){
xhr = new ActiveXObject("Microsoft.XMLHTTP");
}

if(xhr){
xhr.open("GET",url, true);
xhr.onreadystatechange = complete;
xhr.send(null);
}
}
//分析返回的文本文档
function complete(){
if(xhr.readyState == 4){
if(xhr.status == 200){
var strResult = unescape(xhr.responseText);
var arrResult = strResult.split("@@@");

RemoveRow(); //删除以前的数据.
num1 = arrResult[0]; num2 = arrResult[1];
num3 = arrResult[2]; num4 = arrResult[3];

row1= tb.insertRow();
cell1 = row1.insertCell(); cell1.innerText = num1;
cell2 = row1.insertCell(); cell2.innerText = num2;
row2= tb.insertRow();
cell3 = row2.insertCell(); cell3.innerText = num3;
cell4 = row2.insertCell(); cell4.innerText = num4;
}else{
alert("this was a problem with the request");
}
}
}
//保留第一行表头,其余数据均删除.
function RemoveRow(){
var iRows = tb.rows.length;
for(var i=0;i< iRows-1;i++){
tb.deleteRow(1);
}
}
//2秒自动刷新一次,2秒取得一次数据.
function MyShow(){
timer = window.setInterval("getResult()",2000);
}
</script>
<body onload="MyShow()">
<table width="47%" height="23" border="0" cellpadding="1" cellspacing="0" id="tb">
<tr>
<td>代码</td>
<td>价格</td>
</tr>
</table>
<form>
<p>输入股票代码:
<input type="text" size="14" name="phone" id="phone"/>
</p>
<p>你交易的数量:</p>
<p><textarea name="order" rows="6" cols="50" id="order"></textarea></p>
<p><input type="submit" value="提交" id="submit" /></p>
</form>
</body>
</html>

web.xml配置文件
Xml代码

1. <?xml version="1.0" encoding="UTF-8"?>
2. <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" id="WebApp_ID" version="2.5">
3. <display-name>demo</display-name>
4.
5. <display-name>Welcome to Tomcat</display-name>
6. <description>Welcome to Tomcat</description>
7.
8. <servlet>
9. <servlet-name>AajaxServlet</servlet-name>
10. <servlet-class>vivi.servlet.ajax.AjaxServlet</servlet-class>
11. </servlet>
12. <servlet-mapping>
13. <servlet-name>AajaxServlet</servlet-name>
14. <url-pattern>/AajaxServlet</url-pattern>
15. </servlet-mapping>
16.
17. </web-app>

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
智慧校园建设方案旨在通过融合先进技术,如物联网、大数据、人工智能等,实现校园的智能化管理与服务。政策的推动和技术的成熟为智慧校园的发展提供了基础。该方案强调了数据的重要性,提出通过数据的整合、开放和共享,构建产学研资用联动的服务体系,以促进校园的精细化治理。 智慧校园的核心建设任务包括数据标准体系和应用标准体系的建设,以及信息化安全与等级保护的实施。方案提出了一站式服务大厅和移动校园的概念,通过整合校内外资源,实现资源共享平台和产教融合就业平台的建设。此外,校园大脑的构建是实现智慧校园的关键,它涉及到数据中心化、数据资产化和数据业务化,以数据驱动业务自动化和智能化。 技术应用方面,方案提出了物联网平台、5G网络、人工智能平台等新技术的融合应用,以打造多场景融合的智慧校园大脑。这包括智慧教室、智慧实验室、智慧图书馆、智慧党建等多领域的智能化应用,旨在提升教学、科研、管理和服务的效率和质量。 在实施层面,智慧校园建设需要统筹规划和分步实施,确保项目的可行性和有效性。方案提出了主题梳理、场景梳理和数据梳理的方法,以及现有技术支持和项目分级的考虑,以指导智慧校园的建设。 最后,智慧校园建设的成功依赖于开放、协同和融合的组织建设。通过战略咨询、分步实施、生态建设和短板补充,可以构建符合学校特色的生态链,实现智慧校园的长远发展。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值