简述servlet的生命周期(工作流程)
来源:互联网 发布:在线客服 java开源 编辑:程序博客网 时间:2024/05/01 05:51
①WEB服务器首先会检查是否已经装载并创建了该servlet实例对象。如果是直接进行第④步,否则执行第②步。
②装载并创建该Servlet的一个实例对象。
③调用Servlet实例对象的init()方法。
④创建一个用于封装HTTP请求消息的HttpServletRequest对象和一个代表HTTP响应消息的HttpServletResponse对象,然后调用service()方法并将请求和响应作为参数传递进去。
⑤WEB应用被停止或重启之前,Servlet引擎将卸载Servlet,在卸载之前调用Servlet的destroy()方法
1. 当serlvet 第一次被调用的时候,会触发init函数,该函数会把servlet实例装载到内存.init函数只会被调用一次
2. 然后去调用servlet 的 service函数
3. 当第二次后访问该servlet 就直接调用 service 函数.
4. 当 web应用reload 或者关闭 tomcat 或者关机 都会去调用destroy函数,该函数就会去销毁serlvet
5. Servlet的生命周期
当客户端第一次向web服务器发出一个servlet请求时,web服务器将会创建一个该servlet的实例,并且调用servlet的init()方法;如果当服务器已经存在了一个servlet实例,那么,将直接使用此实例;然后再调用service()方法,service()方法将根据客户端的请求方式来决定调用对应的doXXX()方法;当web应用 reload 或者关闭 tomcat 或者关机,web服务器将调用destroy()方法,将该servlet从服务器内存中删除。
生命全过程:
1.加载
2.实例化
3.初始化
4.处理请求
5.退出服务
开发servlet有三种方法
(1) 实现 Servlet接口
(2) 通过继承 GenericServlet
(3) 通过继承 HttpServlet
①实现servlet接口的方式
需求如下: 请使用实现接口的方式,来开发一个Servlet,要求该Servlet可以显示Hello,world,同时显示当前时间.
步骤
1. 在webapps下建立一个web应用hspWeb1
2.在hspWeb1 下建立WEB-INF->web.xml [web.xml可以从ROOT/WEB-INF/web.xml拷
3. 在WEB-INF 下建立classes 目录(我们的Servlet就要在该目录开发.),建立 lib文件夹
4. 开发MyServlet.java
package com.hsp;
import javax.servlet.*;
import javax.servlet.http.*; 为了能将servlet-api.jar包引入,需要配置环境变量
import java.io.*;class MyFirstServlet implements Servlet{//该函数用于初始化servlet,就是把该servlet装载到内存中//该函数只会被调用一次public void init(ServletConfig config) throws ServletException{}//得到ServletConfig对象public ServletConfig getServletConfig(){return null;}//该函数是服务函数,我们的业务逻辑代码就是写在这里//该函数每次都会被调用public void service(ServletRequest req, ServletResponse res) throws ServletException, java.io.IOException{}//该函数时得到servlet配置信息public java.lang.String getServletInfo(){return null;}//销毁该servlet,从内存中清除,该函数被调用一次public void destroy(){}}
1. 根据Servlet规范,我们还需要部署Servlet
<?xml version="1.0" encoding="ISO-8859-1"?>
<!--
Licensed to the Apache Software Foundation (ASF) under one or more
contributor license agreements. See the NOTICE file distributed with
this work for additional information regarding copyright ownership.
The ASF licenses this file to You under the Apache License, Version 2.0
(the "License"); you may not use this file except in compliance with
the License. You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
-->
<web-app 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"
version="2.5">
<!--根据serlvet规范,需要将Servlet部署到web.xml文件,该部署配置可以从examples下拷贝-->
<servlet>
<!--servlet-name 给该Servlet取名,该名字可以自己定义:默认就使用该Servlet的名字-->
<servlet-name>MyFirstServlet</servlet-name>③
<!--servlet-class要指明该Servlet放在哪个包下 的,形式是 包/包/../类-->
<servlet-class>com.hsp.MyFirstServlet</servlet-class> 注意:后面不要带.java④
</servlet>
<!--Servlet的映射-->
<servlet-mapping>
<!--这个Servlet-name要和上面的servlet-name名字一样-->
<servlet-name>MyFirstServlet</servlet-name>②
<!--url-pattern 这里就是将来访问该Servlet的资源名部分-->
<url-pattern>/ABC</url-pattern>①
</servlet-mapping>
</web-app>
服务器调用流程:http://localhost:8088/ABC--->①--->②--->③--->④
2. 在浏览器中测试
在浏览器中输入
http://localhost:8088/hspweb1/ABC
3. 分析一下自己写可能出现的错误
(1) <servlet-name>MyFirstServlet</servlet-name> 名字不一样 (启动tomcat错误)
(2) <servlet-class>com.hsp.MyFirstServlet</servlet-class> 写成MyFirstServlet.java,会报告500
(3) 资源名自己写错
http://localhost:8088/hspweb1/错误的资源url-pattern
404 错误
补充: 如果使用javac去编译一个java文件,则需要带命令参数
javac –d . java文件
补充: 如何不重启tomcat,就指定去reload 一个web应用,方法:
②使用GenericServlet开发servlet
了解即可:
案例 :
package com.hsp;import javax.servlet.*;import javax.servlet.http.*;import java.io.*;public class MyGenericServlet extends GenericServlet{public void service(ServletRequest req, ServletResponse res) throws ServletException, java.io.IOException{res.getWriter().println("hello,world,i am geneirc servlet");}}
③使用继承 HttpServlet 的方法来开发Serlvet
(1) 在软件公司 90%都是通过该方法开发.
(2) 举例说明; 还是显示hello,world 当前日期
package com.hsp;import javax.servlet.*;import javax.servlet.http.*;import java.io.*;public class MyHttpServlet extends HttpServlet{//在HttpServlet 中,设计者对post 提交和 get提交分别处理//回忆 <form action="提交给?" method="post|get"/>,默认是getprotected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, java.io.IOException{resp.getWriter().println("i am httpServet doGet()");}protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, java.io.IOException{ resp.getWriter().println("i am httpServet doPost() post name="+req.getParameter("username"));}}
小结 get 提交 和 post的提交的区别
① 从安全看 get<post 因为get 会把提交的信息显示到地址栏
② 从提交内容看 get<post get 一般不要大于2k, post理论上无限制,但是在实际开发中,建议不要大于64k
③ 从速度看 get>post
④ Get可以保留uri中的参数,利于收藏
- 简述servlet的生命周期(工作流程)
- 简述Servlet的生命周期
- Servlet工作流程和生命周期
- servlet生命周期和工作流程
- 简述 Struts2 的工作流程:
- servlet的工作流程
- servlet的工作流程
- 简述servlet生命周期
- servlet的生命周期 工作原理
- Hadoop YARN 的工作流程简述
- as3930工作流程简述
- Spark工作流程简述
- [Servlet]Servlet的工作流程及注意事项
- servlet的工作原理和生命周期
- servlet的生命周期与工作原理
- Servlet的生命周期及工作原理
- servlet的生命周期和工作原理
- Servlet的生命周期与工作原理
- RapidMiner 异常/随机
- css完美实现垂直居中
- 远程桌面链接怎么共享本地磁盘
- 在配置并启动springmvc中遇到的问题
- 【Shell】批量修改文件名或者后缀名
- 简述servlet的生命周期(工作流程)
- SQL Trace及10046事件
- TX1 刷系统+装cuda等
- jquery.validate.js 的逐条验证
- struct sk_buff结构体详解
- C语言基本概念
- 什么是WIFI?
- Linux学习之二(date,help,man,hwclock,info,cal,echo命令)2017-03-27
- RSA不对称加密,公钥加密私钥解密,私钥加密公钥解密