JAVA Servlet详解

小咪咪 2022-05-21 22:52 262阅读 0赞

什么是Servlet

  1. Servlet是运行在web服务器或应用服务器上的程序。
  2. Servlet作为来自web浏览器或其他Http客户端的请求和Http服务器上的数据库或应用程序之间的中间件。
  3. servlet中封装了http的请求和响应。
  4. 那为什么要使用servlet呢,如果web是静态的网页,是不需要这样做的。但是网页的动态显示需要使用servlet

Servlet详解

  1. Servlet客户端http请求
  2. Servlet服务器http响应
  3. Servlethttp状态码
  4. 可以通过HttpservletResponse对象来设置servlet程序中的http状态码

servlet编写过滤器

servlet过滤器是可用于servlet编程的java类,作用是:

在客户端的请求访问后端资源之前,拦截请求进行处理

在服务器的响应发送给客户端之前,处理这些响应。

过滤器类是一个实现了javax.servlet.Filter接口的java类。这个接口主要定义了一下三个方法




















序号 方法 & 描述
1          public void doFilter (ServletRequest, ServletResponse, FilterChain)
该方法完成实际的过滤操作,当客户端请求方法与过滤器设置匹配的URL时,Servlet容器将先调用过滤器的doFilter方法。FilterChain用户访问后续过滤器。
2 public void init(FilterConfig filterConfig)
web 应用程序启动时,web 服务器将创建Filter 的实例对象,并调用其init方法,读取web.xml配置,完成对象的初始化功能,从而为后续的用户请求作好拦截的准备工作(filter对象只会创建一次,init方法也只会执行一次)。开发人员通过init方法的参数,可获得代表当前filter配置信息的FilterConfig对象。
3 public void destroy()
Servlet容器在销毁过滤器实例前调用该方法,在该方法中释放Servlet过滤器占用的资源。

FigureConfig的使用

Filter的init方法中提供了一个FilterConfig对象

比如配置文件applicaiton.properties中配置字段schools

  1. schools =dmxy,zjdx

代码中:

  1. @Override
  2. public void init(FilterConfig filterConfig) throws ServletException {
  3. schools = filterConfig.getInitParameter("schools");
  4. }

使用demo:

  1. public class DomainFilter implements Filter{
  2. @Override
  3. public void destroy() {
  4. // TODO Auto-generated method stub
  5. }
  6. @Override
  7. public void doFilter(ServletRequest request, ServletResponse res, FilterChain chain)
  8. throws IOException, ServletException {
  9. List<String> allowedOrigins= new ArrayList<>();
  10. allowedOrigins.add("http://192.168.0.104:8080");
  11. String originHeader=((HttpServletRequest) request).getHeader("Origin");
  12. if (allowedOrigins.contains(originHeader)){
  13. ((HttpServletResponse) res).setHeader("Access-Control-Allow-Origin", originHeader);
  14. ((HttpServletResponse) res).setContentType("application/json;charset=UTF-8");
  15. ((HttpServletResponse) res).setHeader("Access-Control-Allow-Methods", "POST, GET, OPTIONS, DELETE");
  16. ((HttpServletResponse) res).setHeader("Access-Control-Max-Age", "3600");
  17. ((HttpServletResponse) res).setHeader("Access-Control-Allow-Headers", "Origin, No-Cache, X-Requested-With, If-Modified-Since, Pragma, Last-Modified, Cache-Control, Expires, Content-Type, X-E4M-With,userId,token,sign");//表明服务器支持的所有头信息字段
  18. ((HttpServletResponse) res).setHeader("Access-Control-Allow-Credentials", "true"); //如果要把Cookie发到服务器,需要指定Access-Control-Allow-Credentials字段为true;
  19. ((HttpServletResponse) res).setHeader("XDomainRequestAllowed","1");
  20. }
  21. chain.doFilter(request, res);
  22. }
  23. @Override
  24. public void init(FilterConfig arg0) throws ServletException {
  25. // TODO Auto-generated method stub
  26. }
  27. }

上面是一个判断request的header是否为允许访问的header。

并为response添加header的过滤器

Servlet的生命周期

Servlet的生命周期可被定义为,从创建到毁灭的整个过程。

初始化:通过init()方法进行初始化

处理请求:通过service()方法处理客户端的请求

销毁:铜过destory()方法结束

最后,Servlet是由JVM的垃圾回收器进行垃圾回收

生命周期中的重要方法

init()

init方法只能调用一次,在第一次创建servlet时调用,在后续的每次请求中不再调用。因此,它是一次性初始化。

servlet创建于用户第一次调用对应于该servlet的URL时,也可以指定servlet在服务器第一次启动时被加载。

当用户调用一个servlet时,就会创建一个servlet实例。

init()简单的创建或加载一些数据,这些数据将被用户整个servlet的生命周期。

service()

service()方法是执行实际任务的主要方法,servlet容器(web服务器)调用service()方法,来处理来自客户端的请求,并把格式化的响应返回给客户端。

服务器每次收到一个servlet请求,服务器会产生一个新的线程并调用服务。service()方法检测http请求的类型(post,get,put,delete等),并在适当的时候调用doPost,doGet,doPut,doDelete等方法。

service()方法由容器调用,service方法在适当的时候调用doPost,doGet,doPut,doDelete等方法。所以不用对service方法做任何动作,只需要重写doPost,doGet,doPut,doDelete即可。(类似java设计模式中的模板模式)

destory()

destory方法只会被调用一次。在servlet生命周期结束的时候被调用。在destory()方法之后,servlet对象被标记为垃圾回收。

Servlet与tomcat

tomcat就是servlet容器

Servlet源码分析

servlet可以使用javax.servlet和javax.servlet.http包创建

servlet中的关键类httpservletRequest,httpServletResponse,servletRequest,servletResponse,servlet

javax.servlet包

Servlet接口

全部的servlet都需要实现这个接口

  1. public interface Servlet {
  2. public void init(ServletConfig config) throws ServletException;
  3. public ServletConfig getServletConfig();
  4. public void service(ServletRequest req, ServletResponse res) throws ServletException, IOException;
  5. public String getServletInfo();
  6. public void destroy();
  7. }

接口里面总共有5个核心方法

init()表示初始化,被servlet容器调用,用来表明一个servlet

servlet在接收请求

Springmvc+tomcat中的Servlet使用

。。。

Springboot中内置tomcat的Servlet使用

。。。

总结

。。。

参考

Java Web(一) Servlet详解!!

发表评论

表情:
评论列表 (有 0 条评论,262人围观)

还没有评论,来说两句吧...

相关阅读

    相关 Servlet 详解

    一.什么是servlet?   Java Servlet 是运行在 Web 服务器或应用服务器上的程序,它是作为来自 Web 浏览器或其他 HTTP 客户端的请求和 HT

    相关 JAVA Servlet详解

    什么是Servlet         Servlet是运行在web服务器或应用服务器上的程序。         Servlet作为来自web浏览器或其他Http客户端的

    相关 Servlet详解

    越学到后面,越觉得基础重要,慢慢开始补充基础,因此这篇博客主要备忘一下扎实servlet的相关知识。 1.首先如何查看servlet的源码。     servlet的源