补充说明:
1、当Servlet第一次被调用的时候会触发init函数,该函数会把servlet实例加载到内存。该函数只会被调用一次
2、web服务器把接收到的http请求封装成一个Request对象,作为service函数的参数传递进去。
3、service函数会被调用多次,每访问一次Servlet,它的service函数就会被调用一次
5、返回的结果封装在response对象,web服务器先将response的信息拆解出来
形成http响应格式。然后将这个结果返回给浏览器。
6、浏览器得到结果之后会自己能识别的格式进行解析
4、service()源码解析
(查看service源码要引入Tomcat源码包)
servlet体系结构是:自定义servlet类继承HttpServlet,HttpServlet继承GenericServlet,GenericServlet实现Servlet,ServletConfig接口
其中,HttpServlet实现service方法
这个截图表示的意思是根据请求方法执行doGet或doPost方法
1、浏览器会自己先解析主机名**localhost,回去本地的**host文件去查询主机有没有配备一个ip地址如果在host文件当中查不到的话浏览器会去dns查询
2、查到主机的ip地址之后就会转到web服务器去了。首先浏览器会先向web服务器发送一个试探包(尝试连接),如果web服务器对浏览器有响应的话,浏览器就会发出http请求,服务器接收请求
=========================================================
案例1-当我们登录失败,提示”用户名密码不匹配”,3秒以后跳转到登录页面
技术分析:
定时刷新
常见的响应头-refresh
响应头格式:
refresh:秒数;url=跳转的路径
设置响应头:
response.setHeader(String key,String value);设置字符串形式的响应头
response.addHeader(String key,String value);追加响应头, 若之前设置设置过这个头,则追加;若没有设置过,则设置
设置定时刷新:
response.setHeader(“refresh”,”3;url=/day0901/login.htm”);
步骤分析:
登录失败之后,修改业务逻辑
打印之后添加一个头信息即可
案例2-统计登录成功的总人次,
需求:
在一个用户登录成功之后,获取之前登录成功总人次,将次数+1.在访问另一个servlet的时候,显示登录成功的总人次
技术分析:
ServletContext
///////////////////////
ServletContext:
上下文(全局管理者)
常用的方法:
setAttribute(String key,Object value);//设置值
Object getAttribute(String key);//获取值
removeAttribute(String key)://移除值
获取全局管理者:
getServletContext():
/////////////////////////////////
步骤分析:
1.在项目启动的时候,初始化登录次数
在loginservlet的init()方法中获取全局管理者,将值初始化为0,放入servletcontext上
2.登录成功之后,在loginservlet中获取全局管理者,获取登录成功的总次数
3.然后将次数+1,让后将值设置回去
4.当访问showServlet的时候,获取全局管理者,获取登录成功的总次数,然后在页面上打印出来即可
ServletContext:理解
上下文(全局管理者)
一个项目的引用.代表了当前项目.
当项目启动的时候,服务器为每一个web项目创建一个servletcontext对象.
当项目被移除的时候或者服务器关闭的时候servletcontext销毁
作用:
1.获取全局的初始化参数
2.共享资源(xxxAttribute)
3.获取文件资源
4.其他操作
获取servletcontext:
方式1:了解
getServletConfig().getServletContext()
方式2:
getServletContext()
常用方法:
1.了解
String getInitParameter(String key):通过名称获取指定的参数值
Enumeration getInitParameterNames() :获取所有的参数名称
在根标签下有一个 context-param子标签 用来存放初始化参数
encoding
utf-8
2.xxxAttribute
3.
String getRealPath(String path):获取文件部署到tomcat上的真实路径(带tomcat路径)
getRealPath(“/”):D:\javaTools\apache-tomcat-7.0.52\webapps\day09\
InputStream getResourceAsStream(String path):以流的形式返回一个文件
4.获取文件的mime类型 大类型/小类型
String getMimeType(String 文件名称)