• servlet


    servlet概述

    Servlet是Server Applet的简称,意思为用Java编写的服务器端的程序. 它运行在web服务器中,web服务器负责Servlet和客户的通信以及调用Servlet方法。

    servlet的作用:

    • 接收(浏览器)用户发送的请求数据
    • 调用java程序来处理请求
    • 根据处理结果,将结果响应给客户端

    servlet创建和使用

    1.创建一个类继承javax.servlet.http包下的HttpServlet

    public class LoginServlet_back extends HttpServlet {
    
      public LoginServlet_back(){
          System.out.println("LoginServlet无参构造");
        }
    
        /*
           在构造方法执行完成后立即执行,
           用来初始化servlet,有一个ServletConfig的参数,封装servlet配置信息的
        */
        @Override
        public void init(ServletConfig config) throws ServletException {
            System.out.println("init:"+config.getInitParameter("n"));
        }
    
        /*
           service 为前端提供服务的,每次请求都会被访问
           HttpServletRequest  表示请求,封装请求数据
           HttpServletResponse  表示响应
    
           jdbc 接口  mysql实现
           tomcat运行java 接口  tomcat实现
        */
        @Override
        protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
            System.out.println(req);
            System.out.println(resp);
            System.out.println("service");
        }
    
        /*
        在服务器关闭时,让我们的servlet程序可以去执行某些最终的操作(例如,最中将一些数据存储到数据库,打印日志)
        */
        @Override
        public void destroy() {
            System.out.println("destroy");
        }
    
    
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40

    2.web.xml文件中配置Servlet

    web.xml: 存储我们自己项目的配置文件,在服务器启动时,由服务器加载读取配置servlet,过滤器,监听器…

    <servlet>
        <servlet-name>servlet名servlet-name>
        <servlet-class>servlet类地址servlet-class>
        
    servlet>
    <servlet-mapping>
        <serlvet-name>servlet名serlvet-name>
        <url-pattern>servlet访问路径url-pattern>
         
         <load-on-startup>-1load-on-startup>
       
    servlet-mapping>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12

    3.运行servlet程序

    通过浏览器访问http:127.0.0.1:8080/项目名/url

    servlet的生命周期

    构造方法:最先执行只被调用一次,只有第一次访问Servelt时或服务器启动时创建Servlet实例。

    Init方法:只被调用一次,在Servlet实例创建好实例后立即执行,用于执行一些初始化Servlet的操作。

    service方法:多次调用,每次请求都调用service方法,根据请求方式调用doGet()或doPost()方法。

    destroy:只被调用一次,在服务器关闭时调用,执行一些操作。

    创建实例->初始化->服务->消亡

    一次http请求发送到后端找到Servlet程序,是按照一个特定顺序调用方法的,在哪儿规定的调用顺序,在最上层定义一

    个Servlet接口(init,service,destroy),所有的javaEE(实现了Servlet接口的类)都会按照这个规范来执行.

    http协议

    超文本传输协议 (HyperText Transfer Protocol)服务器传输超文本到本地浏览器的传送协议,是互联网上应用最为流行的一种网络协议,用于定义客户端浏览器和服务器之间交换数据的过程。

    HTTP是一个基于TCP/IP通信协议来传递数据.

    http请求

    http请求包括:

    请求行:包含http请求方式,请求资源名称,http版本 .

    请求头:包含主机地址,以及客户端的一些环境信息,以键值对的形式向后端传递.

    请求体 :代表着浏览器在post请求方式中传递给服务器的参数,请求体中参数以键值形式传递,多个用&链接,服务器接收到后再解析

    http的两种请求方式:

    get:点击超链接,表单 method=“get”,直接在地址栏中输入地址

    post:表单 method=“post”

    区别:

    get:主要用于从服务器获取数据,也是可以向服务器发送数据的,通过URL提交数据,数据在URL中可以看到,提交的数据大小受限制一般1kb.

    post:主要是向服务器提交信息,数据放置在请求体中提交,不会显示在地址栏中相对安全,传输的数据量大,没有限制(可以通过post提交文件)

    后端处理

    由于前端发送的http请求有get和post两种,所以后端提供doGet()和doPost()进行对应的处理.虽然调用doget和

    dopost方法,但是构造,init,service,destroy方法,仍然会正常执行. 当我们servlet中没有需要初始化的内容时,可以

    不重写init(),但是服务器会依然调用父类中重写的init() 父类中已经重写了service(),并且根据请求方式进行了判

    断,get–>doGet(),post–>doPost() 当我们servlet中没有需要最终执行的操作时,可以不重写destroy(),但是服务器

    会依然调用父类中重写的destroy() 当一次http请求发送到服务器时,tomcat会将请求中所有的数据,都封装到一个

    实现HttpServletRequest类的对象中. 使用此对象,就可以获取所有的请求数据.

       @Override
        protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
            //接收请求数据(请求行,请求头)也可以在dopost方法中使用
            System.out.println(req.getRequestURL());
            System.out.println(req.getMethod());
            System.out.println(req.getScheme());
            System.out.println(req.getProtocol());
            System.out.println(req.getRemoteAddr());//获得远端的ip和端口
            System.out.println(req.getRemotePort());//客户端端口
            System.out.println(req.getServerName());
            System.out.println(req.getServerPort());
            System.out.println(req.getHeader("User-Agent"));
            //请求数据中,自己传递的
            System.out.println(req.getParameter("name"));
            System.out.println(req.getParameter("age"));
        }
        @Override
        protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
            /post数据在接收之前,需要设置一个解码规则
            req.setCharacterEncoding("utf-8");
              System.out.println(req.getParameter("account"));
            System.out.println(req.getParameter("password"));
            String []  hobbys = req.getParameterValues("hobby");
            System.out.println(Arrays.toString(hobbys));
            //响应
           // resp.setContentType("text/html;charset=utf-8");
            resp.setHeader("Content-Type", "text/html;charset=utf-8");//设置响应数据编码,在获得流对象之前设置
            PrintWriter printWriter =  resp.getWriter();
            printWriter.print("提交成功"); //对象,集合,map-->json
        }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30

    过滤器

    Filter也称之为过滤器,它是Servlet技术中最实用的技术,WEB开发人员通过Filter技术,对web服务器管理的所有web资源:例如Servlet, 从而实现一些 特殊的功能。例如实现URL级别的权限访问控制、过滤敏感词汇、压缩响应信息等一些高级功能。

    作用:对服务器web资源进行拦截(权限控制,通过拦截资源进行权限控制,是否可以访问)

    Servlet API中提供了一个Filter接口,开发web应用时,如果编写的Java类实现了这个接口,则把这个java类称之为过滤器Filter。通过Filter技术,开发人员可以实现用户在访问某个目标资源之前,对访问的请求和响应进行拦截

    Servlet API 中,与过滤器有关的API共有三个接口,分别是 Filter 、FilterChain 、FilterConfig

    过滤器的创建

    1.创建一个类实现

    public class EncodFilter implements Filter {
    
    
        @Override
        public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
                  
                  servletRequest.setCharacterEncoding("utf-8");
          //filterChain过滤链,  处理完后,让请求继续向下执行,下一个可能是目标servlet,也可能是下一个过滤器
                 filterChain.doFilter(servletRequest,servletResponse);
        }
    
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13

    doFilter方法是filter进行过滤操作的方法,是最重要的方法。过滤器实现类必须实现该方法。方法体中可以对

    request 和response进行预处理。其中FilterChain可以将处理后的request 和response对象传递到过滤链上的下

    一个资源。

    2.在 web.xml中配置过滤器

       <filter>    
           <filter-name>encodfilter-name>    
           <filter-class>com.ffyc.webback.filter.EncodFilterfilter-class>
       filter>
       <filter-mapping>    
              <filter-name>encodfilter-name>   
               <url-pattern>/*url-pattern>
       filter-mapping>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    过滤器用来实现通用的功能,减少代码冗余,提高可维护性 ,一个过滤器可以配置给多个资源使用 ,一个资源也可以配置多个过滤器,按照配置顺序调用

  • 相关阅读:
    HTML5 新元素
    React使用create-react-app创建react项目
    小型企业团队的理想项目管理软件解决方案
    Springboot整合ShardingJdbc实现分库分表方案
    【InfoQ】博睿数据CTO孟曦东访谈实录:可观测性技术是未来发展方向
    位移运算法的解释与hashMap的应用。
    收藏品集团怎样应用自动化程序实现降本增效
    JAVA IO——文件拷贝
    Vue3学习(二十二)- 保存文档内容
    字符函数和字符串函数(下)
  • 原文地址:https://blog.csdn.net/WoWBOOM/article/details/127405793