跳转至

Servlet03

11.练习

快捷键-可以快速地在访问的文件件切换

ctrl+alt+向左箭头:回到上次访问的位置

ctrl+alt+向右箭头:回到下一步访问的位置

11.1CatServlet

image-20221108190559392

首先创建项目servlet,配置好Tomcat,添加web应用支持。在web目录下面的WEB-INF目录下创建lib目录,在Tomcat安装包的lib目录中找到servlet-api,并添加到idea的web目录下面的WEB-INF/lib目录,选择引用为库文件

image-20221108192728344

在src目录下创建目录,编写CatServlet类:

package servlet;

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

public class CatServlet implements Servlet {
    public int count = 0;

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

    }

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

    @Override
    public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException {
        count++;//每次访问service方法,count累加
        System.out.println("该servlet访问次数=" + count);
        //获取请求的方式
        HttpServletRequest httpServletRequest = (HttpServletRequest) servletRequest;
        String method = httpServletRequest.getMethod();
        if (method.equals("GET")) {
            doGet();
        } else if (method.equals("POST")) {
            doPost();
        }
    }

    public void doGet() {
        System.out.println("CatServlet doGet()...");
    }

    public void doPost() {
        System.out.println("CatServlet doPost()...");
    }

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

    @Override
    public void destroy() {

    }
}

在web.xml文件中进行Servlet配置:

<?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>CatServlet</servlet-name>
        <servlet-class>servlet.CatServlet</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>CatServlet</servlet-name>
        <url-pattern>/cat</url-pattern>
    </servlet-mapping>
</web-app>

在WEB-INF目录下编写一个html,用于测试

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>login</title>
</head>
<body>
<form action="http://localhost:8080/servlet/cat" method="get">
    name: <input type="text"/><br/><br/>
    <input type="submit" value="login"/>
</form>
</body>
</html>

点击启动Tomcat,在浏览器中输入地址:http://localhost:8080/servlet/login.html

点击login按钮,成功跳转到CatServlet中:

image-20221108194726469

image-20221108194829360

后台输出:(如果表单方式改变了,仍然调用的是旧的访问方法,点击保存html,并刷新浏览器页面即可解决)

image-20221108194942684

11.2DogServlet

image-20221108213658244

在11.1的项目框架上进行编程

首先在src目录下创建DogServlet类

package servlet;

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 DogServlet extends HttpServlet {
    private int getCount = 0;
    private int postCount = 0;

    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        getCount++;
        System.out.println("getCount=" + getCount);
        System.out.println("DogServlet-访问doGet()");
    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        postCount++;
        System.out.println("postCount=" + postCount);
        System.out.println("DogServlet-访问doPost()");
    }
}

注意:这里没有重写service方法,因此当浏览器请求DogServlet时,会去父类HttpServlet类中去找调用的service方法,在HttpServlet类中的service方法会根据请求类型如get、post去调用当前运行类型(即DogServlet)的doPost、doGet方法,因此在自己创建的Servlet中不用判断请求方式

在web.xml文件中配置该Servlet:

<servlet>
    <servlet-name>DogServlet</servlet-name>
    <servlet-class>servlet.DogServlet</servlet-class>
</servlet>
<servlet-mapping>
    <servlet-name>DogServlet</servlet-name>
    <url-pattern>/dog</url-pattern>
</servlet-mapping>

修改之前的login.html文件

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>login</title>
</head>
<body>
<form action="http://localhost:8080/servlet/dog" method="post">
    name: <input type="text"/><br/><br/>
    <input type="submit" value="login"/>
</form>
</body>
</html>

点击redeploy Tomcat,在浏览器输入地址http://localhost:8080/servlet/login.html,点击login按钮,成功跳转到DogServlet

image-20221108201510215

image-20221108201533054

将login.html文件中表单提交方式反复该为post或者get,多次访问,后台输出如下:

(如果表单方式改变了,仍然调用的是旧的访问方法,点击保存html,并刷新浏览器页面即可解决)

image-20221108202231558

11.3PigServlet

image-20221108214752042

在11.1的项目框架上进行编程

在src目录下编写PigServlet

package servlet;

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

@WebServlet(urlPatterns = {"/pig1", "/pig2"},loadOnStartup = 1)
public class PigServlet extends HttpServlet {
    private int getCount = 0;
    private int postCount = 0;

    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        getCount++;
        System.out.println("PigServlet-访问doGet()-get访问次数=" + getCount);
        System.out.println("客户端地址="+req.getRemoteAddr());
    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        postCount++;
        System.out.println("PigServlet-访问doPost()-post访问次数=" + postCount);
        System.out.println("客户端地址="+req.getRemoteAddr());
    }
}

修改login.html文件

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>login</title>
</head>
<body>
<form action="http://localhost:8080/servlet/pig1" method="get">
    name: <input type="text"/><br/><br/>
    <input type="submit" value="login"/>
</form>
</body>
</html>

点击redeploy Tomcat,在浏览器输入地址http://localhost:8080/servlet/login.html,点击login按钮,成功跳转到PigServlet

将login.html文件中表单提交方式反复改为post或者get,多次访问,后台输出如下:

(如果表单方式改变了,仍然调用的是旧的访问方法,点击保存html,并刷新浏览器页面即可解决)

image-20221108204256119

11.4浏览器访问过程

image-20221108191355809

image-20221108210447036