servlet是什么
Servlet 是JavaWeb的三大组件(Servlet,Filter,Listener)之一,它属于动态资源,Servlet的作用是处理请求,在服务器上运行以处理客户端请求并做出响应。
Servlet生命周期
1.地址栏请求一个servlet
2. web容器(tomcat服务器)解析该请求,在web.xml文件中查找是 否有对应路径servlet类
3. 实例化该servlet类
4. 调用servlet对象中的init方法,初始化。
5. 根据请求的提交方式是post还是get(默认),调用对应dopost或者doget方法。
6.调用Service方法
7. 输出响应信息
8 .自行调用destory方法将servlet销毁
Servlet执行流程
- 建一个Servlet类,进行web.xml配置
<servlet>
<!--servlet名,自定义 -->
<servlet-name>TestServlet</servlet-name>
<!--servlet包名+类名 -->
<servlet-class>com.sunsharing.servlet.TestServlet</servlet-class>
</servlet>
<servlet-mapping>
<!--servlet名,和上面名称一致 -->
<servlet-name>TestServlet</servlet-name>
<!--servlet映射路径 -->
<url-pattern>/TestServlet</url-pattern>
</servlet-mapping>
注意:<url-pattern>/TestServlet</url-pattern>
不能漏掉斜杠/
- 访问Servlet的流程
(1)浏览器请求,服务器在web.xml中的<servlet-mapping>
寻找对应的url(url-pattern)地址,得到servlet名称。
(2)根据servlet名称寻找servlet-class文件对应的类
(3)根据请求方式是get或者post执行相应的doGet或doPost方法。
Servlet三大域对象
对象名称 | 对象类型 |
---|---|
request | HttpServletRequest |
session | HttpSession |
application | ServletContext |
request
作用域:一次请求有效
获取表单提交参数: request.getParameter()
传值到表单: request.setAttribute()
设置编码:getCharacterEncoding()
session
1.作用域:一次回会话期间(浏览器开启到关闭)
常用于用户登录验证页面,登录成功后把登录信息存到session域中。
2.销毁session:
(1).session超时;可以调用setMaxInactiveInterval(int interval) (以秒为单位)方法设置 session 会话超时,也可以在web.xml设置 session 会话超时
<session-config>
<session-timeout>20</session-timeout>
</session-config>
注:以分钟为单位,将覆盖 Tomcat 中默认的 30 分钟超时时间。
(2)非正常关闭浏览器(关闭浏览器再次访问会找不到session的会话id而不是session被销毁了);
(3)调用session. invalidate().
application
作用域:服务器开启到关闭(tomcat启动时创建,tomcat关闭时销毁)
常用于计算在线人数
servlet的请求和响应
-
servlet处理请求
(1)客户端对Web服务器发出HTTP请求
(2)服务器收到请求后,转发给web容器(Tomcat),web容器根据请求的URL去调用客户端要访问的Servlet。
(3)web容器根据web.xml查找要访问的Servlet,如果找到,实例化,调用Servlet实例中的service方法处理请求,并分配一个线程去执行。
(4)如果没找到,返回404的错误代码到客户端,表示访问的资源不存在。 -
servlet处理响应
设置http响应头,HTTP响应头用于告诉客户端:发送回来的内容的类型、有多少内容被正在发送以及发送内容的服务器的类型等等。
过滤器Filter
filter与servlet在很多的方面极其相似,但是也有不同,例如filter和servlet一样都有三个生命周期方法,同时他们在web.xml中的配置文件也是差不多的、 但是servlet主要负责处理请求,而filter主要负责拦截请求,和放行。
Servlet 过滤器可以动态地拦截请求和响应,调用servlet前先调用过滤器。
创建filter,配置web.xml
<filter>
<filter-name>TestFilter</filter-name>
<filter-class>com.sunsharing.filter.TestFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>TestFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
过滤器中doFilte()可以获取请求信息,进行过滤处理。
过滤器常用于编码过滤,判断用户登录状态。