servlet学习

7.Servlet

1、Servlet 是JavaEE的一个规范之一

2、Servlet是JavaWeb的三大组件(Servlet、Filter、Listener)之一

3、Servlet是运行在服务器上的一个java小程序,可以接收客户端发 送过来的请求、并响应数据给客户端。

7.1 Servlet实现步骤

1、编写一个类实现Servlet接口

2、实现service方法用来处理请求,并响应数据

3、到web.xml中配置servlet程序的访问地址

新建类,之后使用快捷键 ctrl + i ,实现方法,全选

image-20210907215814686

image-20210907215905330

其中,service方法是专门用来处理请求和响应的

<?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标签用来配置Tomcat的servlet程序 -->
    <servlet>
    <!-- servlet-name标签是给servlet程序起别名,一般为类名 -->
        <servlet-name></servlet-name>
    <!-- servlet-class 是 servlet的全类名 -->  
        <servlet-class></servlet-class>
    </servlet>
    <!-- servlet-mapping标签给servlet程序配置一个访问地址 -->
	
    <servlet-mapping>
        <servlet-name>HelloServlet</servlet-name>
    <!-- urlpattern 配置访问地址
        /斜杠在服务器解析的时候,表示地址为 http://ip:port/工程路径(servlet_tutorial)
             可以在tomcat的configurations中的deployment中查看
        /hello 表示地址为 http://ip:port/servlet_tutorial/hello
    -->
        <url-pattern>/hello</url-pattern>
    </servlet-mapping>
    
    
    
</web-app>

image-20210907221407602

image-20210907221429351

image-20210907221507761

程序运行后,进入 http://localhost:8085/Servlet_tutorial/

image-20210907222152495

之前设置的具体路径为http://localhost:8085/Servlet_tutorial/hello

image-20210907222235945

访问过后,在IDEA的控制台可以看到访问过后打印出来的字符 Hello,world!

image-20210907222352051

7.2 url到servlet的过程

image-20210911155651580

一台客户端(由唯一的ip地址确定)运行很多的软件,而一端口号与应用程序之间是互相对照的(一个程序可以占用多个不同端口,但端口不能复用),tomcat默认监听的是8080端口,因此,在ip地址确定的情况下,可以通过端口号进行对tomcat服务器的访问

servlet映射过程

7.3 servlet的生命周期

1、执行servlet构造器方法

2、执行init初始化方法

前两个步骤只执行一次

3、执行service方法

每次访问页面都会调用该方法

4、执行destroy方法

在web工程停止的时候执行

7.4 servlet请求的分发

测试请求

注:get,post必须大写

public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException {

    HttpServletRequest httpServletRequest = (HttpServletRequest) servletRequest;

    var method = httpServletRequest.getMethod();
    if ("GET".equals(method)) {
        System.out.println("get方法");
    }
    else if ("POST".equals(method)){
        System.out.println("post方法");
    }
}

7.5 通过继承HttpServlet实现servlet程序

一般在实际项目开发中,都是使用继承httpservlet类的方法去实现servlet程序

步骤:
1、编写一个类去继承servlet方法

​ 2、根据业务需要重写doGet与doPost方法

​ 3、到web.xml中的配置servlet程序的访问地址

src/com.tutorial.servlet/HelloServlet1

public class HelloServlet1 extends HttpServlet {
    /*
        doGet在得到get请求时调用
     */
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        System.out.println("servlet2 get请求被调用");
    }

    /*
    doPost在得到post请求时调用
     */

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        System.out.println("servlet2 post请求被调用");
    }
}

web.xml

<servlet>
    <servlet-name>HelloServlet1</servlet-name>
    <servlet-class>com.tutorial.servlet.HelloServlet1</servlet-class>
</servlet>

<servlet-mapping>
    <servlet-name>HelloServlet1</servlet-name>
    <url-pattern>/servlet1</url-pattern>
</servlet-mapping>

7.6 servlet类继承体系

image-20210913213515114

Servlet 自身提供一个接口(Interface)

GenericServlet 对接口进行实现,同时对很多方法做的是空实现

​ 同时持有ServletConfig类的引用,以及针对ServletConfig写了一些方法

HttpServlet 则是写了抽象的service方法,同时进行请求的分发(GET/POST),

​ 按照请求类型不同发到doGet()或doPost()中

自定义类 继承HttpServlet类,实现对doGet和doPost方法的重写

​ 使其实现需要的功能

7.7 ServletConfig类

servlet配置信息的作用:

​ 1、可以获取servlet程序的别名,即servlet-name

​ 2、获取初始化参数init-param

​ 3、获取ServletContext对象

servlet程序和servletconfig对象都是有tomcat负责创建的,我们只负责使用

servlet程序默认是第一次访问的时候创建,servletconfig是每个servlet程序创建时

​ 才产生servletconfig对象

注:servletConfig只能在init()中使用

@Override
public void init(ServletConfig servletConfig) throws ServletException {


    // 1、通过servletconfig获取servlet别名

    System.out.println("HelloServlet的别名是:" + servletConfig.getServletName());

    // 2、通过servletconfig获取servlet初始参数

    System.out.println("servlet 初始参数username为:" + servletConfig.getInitParameter("username"));
    System.out.println("servlet 初始参数URL为:" + servletConfig.getInitParameter("url"));

    // 3、通过servletconfig

    System.out.println("servlet 文本为:" + servletConfig.getServletContext());


}

注:在其他地方要用 getServletConfig()

@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
    System.out.println("servlet2 get请求被调用");
    

    System.out.println("HelloServlet的别名是:" + getServletConfig().getServletName());
    

    System.out.println("servlet 初始参数servlet2为:" + getServletConfig().getInitParameter("servlet2"));
    System.out.println("servlet 初始参数URL为:" + getServletConfig().getInitParameter("url"));
    

    System.out.println("servlet 文本为:" + getServletConfig().getServletContext());
}

获取的文本,来自 web.xml

注:在重新配置类或web.xml之后,需要重启服务器(restart)/重新部署(redeploy)才能生效。

参考@weixin_30654583 IntelliJ IDEA + Tomcat ;On Upate Action 与 On Frame Deactivation

7.8 servletContext类

servletContext是一个接口,表示servlet上下文对象

一个web工程,只有一个servletContext对象

servletContext对象是一个域对象

servletContext是在web工程部署启动时创建,停止时销毁

​ 因此,在配置域的时候,配置好之后可以被其他方法(类)访问,

​ 即context配置的域可以实现跨界访问

域对象类似于map,存取数据的对象

域指的是存取数据的操作范围

存数据取数据删除数据
Mapput()get()remove()
setAttribute()getAttributeremoveAttribute()

作用:

​ 1、获取web.xml中配置的上下文参数context-param

​ 2、获取当前的工作路径,格式: /工程路径

​ 3、获取工程部署后在服务器硬盘上的绝对路径

​ 4、存取数据

public class servletContext extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //  1、获取web.xml中配置的上下文参数context-param
        ServletContext context = getServletConfig().getServletContext();
        String root = context.getInitParameter("root");
        System.out.println("root的值为:" + root );

        //	2、获取当前的工作路径,格式:   /工程路径

        System.out.println("当前工程路径为:" + context.getContextPath());

        //  3、获取工程部署后在服务器硬盘上的绝对路径

        System.out.println("绝对路径为:" + context.getRealPath("/"));

        //  4、存取数据

        ServletContext context1 = getServletContext();
        context1.setAttribute("name","Smile");

        System.out.println("你sei啊:" + context1.getAttribute("name"));
        
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Smile Hun

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值