J2EE(六)——servlet生命周期
一、servlet生命周期
浏览器第一次访问(http://localhost:8080/myWeb/ABC)过程:
1.解析主机名(查询hosts和DNS获得主机对应ip)
2.开始连接web服务器
3.通过http协议发送request请求(GET/myWeb/ABC)到web服务器上
4.解析出主机名为local host,解析出web应用为myWeb,解析出需要找的是servletABC
5.web服务器查找myWeb里面的xml,根据映射关系得到servlet地址
6.Web服务器使用反射机制,创建servlet实例,调用servlet的init方法并将该实例装载到内存中去.
7.web服务器将收到的httpRequest请求封装成一个servletRequest对象,故servletRequest对象能够有好多方法获取httpRequest的内容,比如获取URL,获取ip等....
8.web服务器将封装好的servlet对象传给service函数,web服务器调用service函数
9.把servletResponse拆出解析,形成http相应格式,返回给浏览器显示.
10.如下情况下,web服务器还会调用destroy函数销毁servlet.
1.该web应用被reload.
2.关闭tomcat
3.关闭电脑
二、doGet和doPost区别
1.新建一个继承于httpservlet的MyFirstServlet,配置好xml,并重写doPost函数.
package myz;
import java.io.IOException;
import java.util.Date;
import javax.servlet.Servlet;
import javax.servlet.ServletConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class MyFirstServlet extends HttpServlet{
@Override
public void doGet(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
// TODO Auto-generated method stub
this.doPost(req, resp);
}
@Override
public void doPost(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
// TODO Auto-generated method stub
resp.getWriter().write("I am a servlet doPost and username= "+req.getParameter("username"));
}
}
配置xml
<servlet>
<servlet-name>MyFirstServlet</servlet-name>
<servlet-class>myz.MyFirstServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>MyFirstServlet</servlet-name>
<url-pattern>/ABC</url-pattern>
</servlet-mapping>
2.在含有servlet的WEB-INF(MyFirstServlet)同级目录下,新建一个html(login.html)
<html>
<body>
<form action="/myWeb/MyFirstServlet" method="post">
user:<input type="text" name="username"/>
<input type="submit" value="login"/>
</form>
</body>
</html>
3.此时访问http://localhost:8080/myWeb/login.html,填写完信息提交会自动跳到servlet 处并执行doPost显示信息.
4.如果换成method="get",重启访问,则会出现如下:
5.总结:
1.从安全性来看,get<post,get提交的内容会在浏览器地址栏显示
2.从提交的内容大小来看,get<post,get提交的数据大小不能大于2k,而post提交的内容大小理论上不受限制,但实际编程中也还是不要大于64k.
3.从响应速度上看,get>post,get要求服务器立即处理,而post的请求可能会形成一个队列请求.