Servlet总结

Serevlet

一、概念

Servlet(Server Applet)是Java Servlet的简称,称为小服务程序或服务连接器,泛指用 Java编写的服务器端程序。在编程过程中也指一切 实现了Servlet接口的类(约定以Servlet结尾命名)。

二、使用

在src.com.qf.servlet包中创建Servlet01类extend HttpServlet,重写其中的doGet()、doPost()方法,在方法中可以获取请求对象,和响应对象。编写逻辑业务代码,以及调用其方法对请求做出响应。

三、Servlet生命周期分析

  1. 客户端发送请求(request)
<form action="LoginServlet" method="post">
  1. 服务器接收请求,根据请求路径找到对应项目

  2. 扫描其中的web.xml文件,Tomcat根据xml配置文件获取当前请求体对应的Servlet类

<servlet>
        <servlet-name>Servlet</servlet-name>
        <servlet-class>com.qf.servlet.Servlet01</servlet-class>
        <init-param>
            <param-name>code</param-name>
            <param-value>UTF-8</param-value>
        </init-param>
    </servlet>
    <servlet-mapping>
        <servlet-name>Servlet</servlet-name>
        <url-pattern>/servlet01</url-pattern>
    </servlet-mapping>
  1. 查询Servlet容器中是否有该类的对象,若存在这调用该Servlet对象;若不存在,则调用构造方法创建该对象,并再次扫描xml中的声明部分,创建ServletConfig对象,调用init()方法进行初始化
@Override
    public void init() throws ServletException {
        ServletConfig servletConfig = this.getServletConfig();
        String code = servletConfig.getInitParameter("code");
        System.out.println("-- init--" + code);
    }
  1. 获取到Servlet对象,tomcat解析请求数据,并创建HttpServletRequestWrapper请求实现类对象和HttpServletResponseWrapper响应实现类对象

  2. 每个Servlet对象都会先调用HttpServlet的service(req,resp)方法,对请求的Method进行判断,调用我们重写的doGet、doPost等等方法,开始业务逻辑的执行

protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException

四、跳转

1、跳转的分类

  • 页面 – 跳转 – 页面(请求路径为前端页面访问路径)

  • 使用a标签(已链接的方式)

  • 使用按钮(通过编写js函数)

  • 使用form表单(其中action表示目的路径,可以选择跳转的Method–Post、Get)

  • 页面 – 跳转 – Servlet(请求路径为Servlet访问路径)

  • 使用a标签(已链接的方式)

  • 使用按钮(通过编写js函数)

  • 使用form表单(其中action表示目的路径,可以选择跳转的Method–Post、Get)

  • Servlet – 跳转 – Servlet

  • 使用转发的方式:res.getRequestDispatcher(“目标Servlet访问路径”).forward(request,response);

  • 使用重定向的方式:resp.sendRedirect(“目标Servlet访问路径”);

  • Servlet – 跳转 – 页面

  • 使用转发的方式:res.getRequestDispatcher(“目标页面”).forward(request,response);re

  • 使用重定向的方式:resp.sendRedirect(“目标目标页面”);

2、转发与重定向的区别

  1. 区别一:请求次数的不同     
     转发:该方法通过在服务器内部查找目标路径所对应的资源,然后返回响应给客户端,实际请求为次。
     重定向:该方法是告诉客户端,当前请求路径服务端内部不找该资源,要求客户端再发一次目标路径的请求,服务器在接收请求返回响应,实际请求为两次。

  2. 区别二:场景–访问外部资源
    转发:当该请求需要访问外部资源时,由于它是在内部查找资源,无法获取外部资源。
    重定向:当该请求需要访问外部资源时,因为它需要客户端重新发送一次目标资源的请求,所以该请求会在外部资源服务器中访问成功。

  3. 区别三:场景–访问受保护的WEB_INF中的资源

转发:由于服务器内部查找该资源,所以访问成功。

重定向:由于客户端会第二次发送请求,而目标资源是受保护的,第二次请求将会访问失败。

3、中文请求路径

当请求路径中有中文字符时,我们通常会response.sendRedirect(URLEncoder.encode(“页面1.html”,“UTF-8”));来设置路径的编码格式。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值