JavaWeb--tomcat之servlet类的定义与web.xml中servlet的基本配置

一、web.xml中有关servlet的配置

web.xml中Servlet的定义主要有两部分:

  • servlet:定义servlet名字与Servlet接口的实现类名,访问对应映射中的url时执行该类的service方法
  • servlet-mapping:servlet名字与访问url,形成一个映射,通过浏览器访问时使用此路径,本文使用的默认工程路径为:http://localhost:8080/myWeb/,则访问时使用:http://localhost:8080/myWeb/ms(/hs为映射中设置的路径)

在这里插入图片描述
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名字与类名(实现Servlet接口),访问对应映射中的url时执行该类的service方法-->
        <servlet-name>MyServlet</servlet-name>
        <servlet-class>com.my.servlet.MyServlet</servlet-class>
    </servlet>
    <servlet-mapping> <!--自定义servlet名字与访问url,形成一个映射-->
        <servlet-name>MyServlet</servlet-name>
        <url-pattern>/ms</url-pattern> <!--代表资源路径-->
    </servlet-mapping>

    <servlet> 
        <servlet-name>MyHttpServlet</servlet-name>
        <servlet-class>com.my.servlet.MyHttpServlet</servlet-class>
    </servlet>
    <servlet-mapping> 
        <servlet-name>MyHttpServlet</servlet-name>
        <url-pattern>/mhs</url-pattern>
    </servlet-mapping>

</web-app>

二、自定义servlet类

1.直接实现Servlet接口

实现所有抽象方法(init,service,destroy等方法),显式定义无参构造器

package com.my.servlet;

import java.io.IOException;

import javax.servlet.Servlet;
import javax.servlet.ServletConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;

/**
 * 功能描述
 *
 * @author yunweixiaocai
 * @since 2021-06-25
 */
public class MyServlet implements Servlet {
	// 自定义方法返回访问次数
    private static int times= 1;
    private static void printGoTimes(){
        System.out.print("第"+times+"次访问----");
    }
    public MyServlet() {
        printGoTimes();
        System.out.println("执行构造器方法");
    }

    @Override
    public void init(ServletConfig servletConfig) throws ServletException {
        printGoTimes();
        System.out.println("执行init方法");
    }

    @Override
    public ServletConfig getServletConfig() {
        return null;
    }

    @Override
    public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException {
        printGoTimes();
        times++;
        System.out.println("执行service方法");
    }

    @Override
    public String getServletInfo() {
        return null;
    }

    @Override
    public void destroy() {
        printGoTimes();
        System.out.println("执行destroy方法");
    }
}

浏览器输入url:http://localhost:8080/myWeb/ms,四次访问后返回:

[2021-06-25 11:37:09,609] Artifact myWebApplication:war exploded: Artifact is deployed successfully
[2021-06-25 11:37:09,609] Artifact myWebApplication:war exploded: Deploy took 567 milliseconds
第1次访问----执行构造器方法
第1次访问----执行init方法
第1次访问----执行service方法
第2次访问----执行service方法
第3次访问----执行service方法
第4次访问----执行service方法

初次访问时,实例化该类,构造方法与init只执行一次,service方法执行多次。

通过getMethod()方法获取请求方式:

页面myHtml.html实现post:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
    <form action="http://localhost:8080/myWeb/hs" method="post">
        <input type="submit" value="转到hs" />
    </form>
</body>
</html>

在这里插入图片描述

使用上面的类改写service方法,通过service方法的第一个参数servletRequest可获得请求方式,实例代码如下

    @Override
    public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException {
        printGoTimes();
        times++;

        HttpServletRequest hsr = (HttpServletRequest)servletRequest;
        String method = hsr.getMethod();
        System.out.println(method);
        if ("get".toUpperCase().equals(method)) {
            System.out.println("get请求执行service方法");
        }else if("post".toUpperCase().equals(method)){
            System.out.println("post请求执行service方法");
        }
    }

点击按钮后输出:

1次访问----执行构造器方法
第1次访问----执行init方法
第1次访问----执行service方法
POST
post请求执行service方法

2.生产常用方式,继承HttpServlet类

定义页面myHtml.html放在web目录下,实现不同的请求方式:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
    <form action="http://localhost:8080/myWeb/hs" method="post">
        <input type="submit" value="postBtn" />
    </form>
    <form action="http://localhost:8080/myWeb/hs" method="get">
        <input type="submit" value="getBtn" />
    </form>
</body>
</html>

页面显示如下:
在这里插入图片描述
根据重写方法执行对应请求的执行代码
在这里插入图片描述
代码示例:

package com.my.servlet;

import java.io.IOException;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class MyHttpServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //super.doGet(req, resp);
        System.out.println("doGetting");
    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //super.doPost(req, resp);
        System.out.println("doPosting");
    }

}

分别点击postBtn和getBtn后,输出:

doPosting
doGetting

三、idea中创建servlet类

包右键–>new->Create New Servlet
在这里插入图片描述
在这里插入图片描述

创建后,web.xml中自动定义一个servlet,需手动添加映射
在这里插入图片描述
默认类:

package com.my.servlet;

import java.io.IOException;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class MyServlet1 extends HttpServlet {
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

    }

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

    }
}
  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 3
    评论
ServletJava编写的服务器端程序,用于处理客户端(通常是浏览器)发送的HTTP请求并生成响应。Servlet运行在支持Java Servlet规范的Web服务器,如Apache TomcatServlet通过继承javax.servlet.HttpServlet来创建。在Servlet,可以重写一些方法来处理请求和生成响应,其最常用的方法包括: - doGet(HttpServletRequest request, HttpServletResponse response):处理HTTP GET请求。 - doPost(HttpServletRequest request, HttpServletResponse response):处理HTTP POST请求。 - doPut(HttpServletRequest request, HttpServletResponse response):处理HTTP PUT请求。 - doDelete(HttpServletRequest request, HttpServletResponse response):处理HTTP DELETE请求。 在这些方法,可以通过HttpServletRequest对象获取请求的参数、头信息等,并通过HttpServletResponse对象生成响应,如设置响应的内容、状态码、头信息等。 为了将Servlet与特定的URL映射起来,需要在web.xml文件配置Servlet的映射关系。例如: ```xml <servlet> <servlet-name>MyServlet</servlet-name> <servlet-class>com.example.MyServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>MyServlet</servlet-name> <url-pattern>/myservlet</url-pattern> </servlet-mapping> ``` 上述配置将名为MyServletServlet映射到"/myservlet"的URL上。当客户端请求该URL时,Web服务器将调用MyServlet的相应方法来处理请求。 除了处理请求和生成响应外,Servlet还可以在初始化和销毁时执行一些操作。可以通过重写init()和destroy()方法来实现这些操作。 希望这个简单的介绍对你有帮助!如果你有更多关于Servlet的问题,欢迎继续提问。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

运维小菜

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

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

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

打赏作者

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

抵扣说明:

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

余额充值