一种接口规范,只要按照这种接口编写的代码都可以称为servlet。
web.xml
中配置servletweb.xml
中配置了<load-on-startup>启动顺序(1,2,3...)</load-on-startup>
则Servlet在服务器启动就调用,否则在使用的时候才调用init()
在servlet第一次加载的时候被调用service()
真正处理请求的时候被调用destory()
在服务器关闭的时候被调用能够处理Post和Get请求,如果servlet中有service方法,会优先调用service方法
处理get请求方法
处理post请求方法
如果在覆写service方法的时候调用父类的service的方法,则会在service方法执行完以后调用相应的get/post方法
一般不在service中调用父类的service方法, 避免法僧405错误,因为调用父类的service方法就必须重写DoGet和DoPost方法
封存了当前请求的所有请求信息
方法 | 作用 |
---|---|
String getMethod() |
获取请求方式 |
StringBuffer getRequestURL() |
获取请求URL |
String getRequestURI() |
获取请求URI |
String getScheme() |
获取请求协议 |
方法 | 作用 |
---|---|
String getHeader(String s) |
通过指定键s来或获取值 |
Enumeration getHeaderNames() |
获取所有的键的枚举 |
enumeration
配合hasMoreElements()
和nextElement()
来使用。
方法 | 作用 |
---|---|
String getParameter(String s) |
通过键s来获取一个值 |
String[] getParameterValues(String s) |
获取桶一个键的不同value数组 |
Enumeration getParameterNames() |
返回所有用户请求数据键的枚举集合 |
虽然get
和post
的用户数据放置位置不同,但是通过这个函数都可以获取到用户的数据 。
如果获取的请求数据不存在,不会报错,返回null
request对象由tomcat服务器创建并作为实参传递给处理请求的servlet的service方法。
用来响应数据到浏览器的一个对象
方法 | 作用 |
---|---|
sendError(状态码,提示) |
设置响应状态 |
方法 | 作用 |
---|---|
addHeader(String key,String value) |
在响应头中添加响应信息,但是不会覆盖 |
setHeader(String key,String value) |
在响应头中添加响应信息,但是同键会覆盖 |
setHeader("content-type","text/html;charset=utf-8") |
设置响应的编码方法1 |
setContentType("text/html;charset=utf-8") |
设置响应的编码方法2 |
在设置编码方式的时候同时告诉浏览器内容有html
标签,浏览器就会自动解析html
标签,如果把html
标签换成plain
,那么浏览器就会把返回数据当成普通数据处理。
方法 | 作用 |
---|---|
getWriter().write(String s) |
设置响应实体 |
请求:View->control->model(Dao层)
响应:model->control->view
浏览器默认编码格式为ios8859-1,而tomcat在8以前默认编码utf-8,所以会出现乱码。
这时候需要使用以下的方法转换req的编码格式:
new String(uname.getBytes("ios8859-1"),"utf-8")
req.setCharacterEncoding("utf-8")
实现多个servlet联动操作请求,避免了代码冗余,让servlet的职责更加明确
req.getRequestDispatcher("需要转发的Servlet的别名").forward(req,resp);
一次请求,浏览器地址栏不改变
请求转发以后直接return
即可
因为请求转发以后url地址不变,所以刷新一次页面数据就会重新提交一次,所以请求转发应当在允许表单数据可以重复提交的时候使用
解决了一次请求内的不同Servlet的数据(请求数据+其他数据)共享问题、
基于请求转发,一次请求中的所有Servlet共享。
request.setAttribute(Object key,Object value)
在request
中增加数据
(String)request.getAttribute(Object key)
获取request中键对应的值,用来获取Servlet转发过来增加的数据。
因为返回值为object
,所以注意类型转换。
response.sendRedirect("路径/别名")
本地路径为:URI
网络路径为:定向资源的URL信息
解决了发送请求的数据共享问题
方法 | 作用 |
---|---|
Cookie cookie = new Cookie(String Key,String Value) |
使用键值对的方式创建Cookie对象 |
cookie.setMaxAge(int second) |
设置Cookie有效期,单位为秒 |
cookie.setPath("/path") |
设置在请求中发送Cookie的有效路径 |
response.addCookie(Cookie cookie) |
添加Cookie信息到响应 |
方法 | 作用 |
---|---|
request.getCookies() |
返回一个Cookie数组 |
cookie.getName() |
获取Cookie的键 |
cookie.getValue() |
获取Cookie的值 |
浏览器端的数据存储技术
存储数据声明在服务器端
默认cookie信息存储好之后,每次请求都会附带,除非设置有效路径
存储在浏览器的运行内存中,浏览器关闭即失效
设置了Cookie的有效期,存储在浏览器客户端的硬盘中,在有效期内符合路径要求的请求都会附带该信息
一个Cookie对象存储一条数据
多条数据可以创建多个Cookie对象进行存储
在获取Cookie数组的时候的时候应该判断请求中是否含有Cookie
解决一个用户不同请求的数据共享问题
用户在第一次访问服务器,服务器会创建一个session对象给此用户,并将session对象的JSEEIONID使用Cookie技术存储带浏览器中,保证用户的其他请求去能够获取到同一个session对象,也保证了不同请求能够获取到共享数据。
存储在服务器端
由服务器进行创建
默认存储时间为30分钟
方法 | 作用 |
---|---|
HttpSession hs = request.getSession() |
创建/获取Session对象 |
hs.setMaxInactiveInterval(int seconds) |
设置Session的存储时间 |
hs.invalidate() |
设置Session强制失效 |
hs.setAttribute(String s,Object o) |
存储Session中的键值 |
hs.getAttribute(String s) |
返回Session的值 |
第一个方法:
如果请求中拥有session的JSESSIONID,则返回对应的session对象
如果请求中没有session的JSESSIONID,则创建新的session对象,并将其JSESSIONID作为Cookie数据存储到浏览器的内存中
如果session对象失效了,也会重新创建session对象,并将JSESSIONID存储在浏览器内存中
第二个方法:
一般用户在登陆web项目时,会将用户的个人信息存储到Session中,供用户的其他请求使用。
在创建session的时候做一个flag标记,对标记进行判断来获取session是否过期(不会实现,待处理,是否是加一个时间戳?)
根据if(session.getAttribute(‘user‘)==null)
判断是否为空
request.getSession(boolean)
若参数为true
,那么如果当前request的session不可用,那么就会创建新的会话,如果存在就会返回当前会话。
若参数false
,那么在当前会话不存在的时候返回null
JSESSIONID存储在了Cookie的临时存储空间中,浏览器关闭即失效。
存储和取出可以发生在不同的请求中,但是存储要先于取出执行。
解决了不同用户的数据共享问题
获取web.xml文件中的全局配置
在web.xml写入<context-param></context-param>
并设置里面的键值对,一组标签申明一组键值对
<param-name></param-name>
<param-value></param-value>
服务器启动到服务器关闭
方法 | 作用 |
---|---|
ServletContext sc = this.getServletContext() |
方法1 |
ServletContext sc = this.getServletConfig().getServletContext() |
方法2 |
ServletContext sc = req.getSession().getServletContext() |
方法3 |
方法 | 作用 |
---|---|
sc.setAttribute(String s,Object o) |
数据存储 |
sc.getAttribute(String s) |
数据获取,返回Object 类型 |
方法 | 作用 |
---|---|
sc.getInitParameter(String name) |
根据键的名字返回web.xml中配置的全局数据的值,返回String,如果不存在,返回null |
sc.getInitParameterNames() |
返回键名的枚举 |
sc.getRealPath(web下的具体路径)
)ServletConfig对象是Servlet的专属配置对象,每个Servlet都有一个ServletConfig对象,用来获取web.xml中的配置信息。
方法 | 作用 |
---|---|
this.getServletConfig() |
获取ServletConfig对象 |
sc.getInitParameter(String name) |
获取专属配置,返回String |
在<servlet>
标签下配置<init-param></init-param>
里面设置键值对
<param-name></param-name>
<param-value></param-value>
原文:https://www.cnblogs.com/JMWan233/p/11960961.html