了解Servlet

了解Servlet,第1张

Servlet对象由web服务器创建,Servlet方法由web服务器调用

一,Servlet对象的生命周期

Servlet运行在servlet容器(web服务器)中,其生命周期由容器来管理,分为4个阶段:

1、加载和实例化:默认情况下,当Servlet第一次被访问时,由容器创建servlet对象
2、初始化:在Servlet实例化之后,容器将调用Servlet的linit()方法初始化这个对象,完成一些如加载配置文件、创建连接等初始化的工作。该方法只调用一次
3、请求处理:每次请求Servlet时,Servlet容器都会调用servlet的service()方法对请求进行处理。
4、服务终止:当需要释放内存或者容器关闭时,容器就会调用Servlet实例的destroy()方法完成
资源的释放。在destroy()方法调用之后,容器会释放这个servlet实例,该实例随后会被Java的垃圾收集器所回收

二,体系结构

1、Servlet继承体系
GenericServlet是Servlet的实现类,是个抽象类
HttpServlet继承GenericServlet,对HTTP协议封装的Servlet实现类

2、Request继承体系

Request用于获取请求数据
Request继承体系
ServletRequest,java提供的请求对象根接口
HttpServletRequest,java提供的对HTTP协议封装的请求对象接口,继承了ServletRequest
RequestFacade,Tomcat定义的实现类

Request获取请求数据
获取请求行数据:

方法作用
String getMethod()获取请求方式:GET或者POST
StringBuffer getRequestURL()获取URL(统一资源定位符)
String getRequestURI()获取URI(统一资源标识符)
String getQueryString()获取请求参数(GET方式)


(之前已经知道了POST的请求参数在请求体中,所以获取POST的请求参数应该用请求体的方法)

获取请求头
String getHeader(String name):根据请求头名称,获取值

获取请求体
ServletInputStream getInputStream():获取字节输入流
BufferedReader getReader():获取字符输入流

如此一来GET与POST获取请求参数就得用两个办法比较麻烦,所以有了新方法,以后可以用下面的方法获得请求参数

方法作用
Map getParameterMap()获取所有参数Map集合
String[] getParameterValues(String name)根据名称获取参数值(数组)
String getParameter(String name)根据名称获取参数值(单个值)

3、Response继承体系

Response用来设置相应对象
继承体系
ServletResponse:java提供的请求对象根接口
HttpServletResponse:java提供的对Http协议封装的请求对象
ResponseFacade:Tomcat定义的实现类

设置响应行
void setStatus(int sc):设置响应状态码
响应头
void setHeader(String name, String value):设置响应头键值对
响应体
PrintWriter getWriter():获取字符输出流
ServletOutputStream getOutputStream():获取字节输出流

三、重定向与请求转发

1、重定向

resp.setStatus(302);
resp.setHeader("location","资源B的路径")
或者用简化:resp.sendRedirect("资源B的路径")

2、请求转发

一种在服务器内部资源跳转方式
res.getRequestDispatcher("资源B路径").forword(req,resp)
请求转发资源间共享数据:使用Request对象

方法作用
void setAttribute(String name, Object o)存储数据到request域中
Object getAttribute(String name)根据key,获取值
void removeAttribute(String name)根据key,删除该键值对

3、差异

重定向:
浏览器地址栏路径发生变化
可以重定向到任意位置的资源(服务器内部、外部均可)
两次请求,不能在多个资源使用request共享数据

请求转发:
浏览器地址栏路径不发生变化
只能转发到当前服务器的内部资源
一次请求,可以在转发的资源间使用request共享数据

浏览器使用需要加虚拟目录如重定向,而服务端使用则需要加虚拟目录如请求转发

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/langs/919813.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-16
下一篇 2022-05-16

发表评论

登录后才能评论

评论列表(0条)

保存