Servlet

什么是Servlet

Servlet就是一种动态WEB技术
操作

  1. 编写一个类实现Servlet接口
  2. 把这个类放到web服务器中
    实现了Servlet的程序就叫 Servlet

Servlet原理

在这里插入图片描述

ServletContext

ServletContext实现的servlet的数据共享。在web容器在启动的时候,他会web程序都创建一个ServletContext对象,他代表了当前的web应用。
在这里插入图片描述

共享数据

封装

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;

public class Servlet01 extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //this.getInitParameter()初始化参数
        //this.getServletConfig()Servlet配置
        //this.getServletContext()Servlet上下文
        ServletContext servletContext= this.getServletContext();
        String username="chen";
        servletContext.setAttribute("username",username);
    }


}

在另一个Servlet中取出数据

package com.kuang;

import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;

public class Servlet02 extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        ServletContext servletContext= this.getServletContext();
        String string=(String) servletContext.getAttribute("username");
        resp.getWriter().print(string);
    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        doGet(req, resp);
    }
}

web.xml

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
         version="4.0">
    <servlet>
        <servlet-name>hello</servlet-name>
        <servlet-class>com.kuang.Servlet01</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>hello</servlet-name>
        <url-pattern>/hello</url-pattern>
    </servlet-mapping>
    <servlet>
        <servlet-name>Servlet02</servlet-name>
        <servlet-class>com.kuang.Servlet02</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>Servlet02</servlet-name>
        <url-pattern>/Servlet02</url-pattern>
    </servlet-mapping>
</web-app>

获取初始化参数

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;

public class Servlet03 extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        ServletContext servletContext= this.getServletContext();
        //获取web.xml中的初始化参数
        String url=servletContext.getInitParameter("url");

        resp.getWriter().print(url);
    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        doGet(req, resp);
    }
}

web.xml

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
         version="4.0">
    <!--初始化参数-->
    <context-param>
        <param-name>url</param-name>
        <param-value>jdbc:mysql://localhost:3306/mybatis</param-value>
    </context-param>
    <servlet>
        <servlet-name>hello</servlet-name>
        <servlet-class>com.kuang.Servlet01</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>hello</servlet-name>
        <url-pattern>/hello</url-pattern>
    </servlet-mapping>
    <servlet>
        <servlet-name>Servlet02</servlet-name>
        <servlet-class>com.kuang.Servlet02</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>Servlet02</servlet-name>
        <url-pattern>/Servlet02</url-pattern>
    </servlet-mapping>
    <servlet>
        <servlet-name>Servlet03</servlet-name>
        <servlet-class>com.kuang.Servlet03</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>Servlet03</servlet-name>
        <url-pattern>/Servlet03</url-pattern>
    </servlet-mapping>
</web-app>

请求转发

package com.kuang;

import javax.servlet.RequestDispatcher;
import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;

public class Servlet04 extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        ServletContext servletContext= this.getServletContext();
//        //转发的请求的路径
//        RequestDispatcher requestDispatcher=servletContext.getRequestDispatcher("/gp");
//        //调用Forward方法实现请求转发
//        requestDispatcher.forward(req,resp);
        servletContext.getRequestDispatcher("/Servlet03").forward(req,resp);
    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        doGet(req, resp);
    }
}

HttpServletResponse

重定向

package com.kuang;

import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;

public class Servlet06 extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //重定向
        resp.sendRedirect("/Servlet05");
    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        doGet(req, resp);
    }
}

HttpServletRequest

Web服务器接收到客户端的HTTP请求,针对这个请求分别创建一个代表请求的HttpServletRequest和一个代表响应的HttpServletResponse

  1. 如果要获取客户端请求过来的参数:找HttpServletRequest
  2. 如果要给客户端响应信息:找HttpServletRequest
    负责向浏览器发送数据
ServletOutputStream getOutputStream() throws IOException;
PrintWriter getWriter() throws IOException;

加载servlet的class,实例化servlet,然后初始化servlet调用init()的方法。
4. 接着调用服务的service的方法处理doGet和doPost方法。
5. 最后是我的还有容器关闭时候调用destroy 销毁方法。

  1. 被创建:执行init方法,只执行一次
      1. 1Servlet什么时候被创建?
      --默认情况下,第一次被访问时,Servlet被创建,然后执行init方法;
      --可以配置执行Servlet的创建时机;
  2. 提供服务:执行service方法,执行多次
  3. 被销毁:当Servlet服务器正常关闭时,执行destroy方法,只执行一次
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值