Day 15 Servlet(一)

1、简介

资源包括静态资源和动态资源。
对于服务器响应,有时候我们需要根据客户的不同请求返回不同的数据和页面。此时就需要一个java类来接收该请求,但是并不是所有的类都能接收,只有实现Servlet接口的java类才能接收和响应请求。Servlet运行在服务端。每当有请求时,Servlet会在服务端运行对应的java代码生成对应的数据返回给浏览器端。
流程:
在这里插入图片描述
①每当客户浏览器像服务器进行请求一个动态资源时,tomcat会创建一个HttpServletRequset对象来接收该请求,同时也会生成一个HttpServletResponse对象,用于返回数据。
②之后会根据请求行的内容找到我们要执行的Servlet类,实例化该类并运行其中的service方法。
③将数据封装给response对象,并返回。
我们只需要填写Service方法中要执行的内容即可。

2、快速入手

开发流程
①创建web项目,将tomat添加为当前项目的依赖
②重写service方法
③在web.xml文件中,配置servlet的映射路径
index.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>first</title>
</head>
<body>
<form method="get" action="userservlet">

   用户名: <input type="text" name="username"> <br>
    <input type="submit" value="校验">
</form>
</body>
</html>

Userservlet

package com.cky.servlet;

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

import java.io.IOException;
import java.io.PrintWriter;

public class UserServlet extends HttpServlet {
    @Override
    protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        String name=req.getParameter("username");
        String info="NO";
        if (name.equals("cky")){
            info="Yes";
        }
        PrintWriter writer = resp.getWriter();
        writer.println(info);
    }
}

web.xml

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="https://jakarta.ee/xml/ns/jakartaee"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="https://jakarta.ee/xml/ns/jakartaee https://jakarta.ee/xml/ns/jakartaee/web-app_5_0.xsd"
         version="5.0">
    <servlet>
        <servlet-name>userServlet</servlet-name>
        <servlet-class>com.cky.servlet.UserServlet</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>userServlet</servlet-name>
        <url-pattern>/userservlet</url-pattern>
    </servlet-mapping>
</web-app>

2.1servlet jar包导入

对于servlet jar包,我们可以创建一个lib将其放入lib下添加到当前项目依赖,但是这样会让我们打包之后的项目也包含该jar包,但是该jar包其实时tomact自带的,对于在tomcat上跑的项目就会有。我们只需要在项目构建时,将其添加为项目依赖即可。
在这里插入图片描述
我们可以看到这是Provided的,即只会在编码时存在,在项目编译和打包时就不会存在了。在项目编译和打包之后,在tomcat上运行时,项目会自动调用tomcat lib下的servlet jar包。
项目编码时是需要jar包的,不然报错,无法编译。

2.2 Content-type

告诉客户端 以什么形式 编码该返回类型。
我们访问servlet时,会自动以html形式返回。在这里插入图片描述
但是不显示,我们可以手动设置

package com.cky.servlet;

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

import java.io.IOException;
import java.io.PrintWriter;

public class UserServlet extends HttpServlet {
    @Override
    protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        String name=req.getParameter("username");
        String info="NO";
        if (name.equals("cky")){
            info="Yes";
        }
        resp.setHeader("Content-Type","text/html");
        PrintWriter writer = resp.getWriter();
        writer.println(info);
    }
}

在这里插入图片描述

2.3 Servlet-url 写法

①精确匹配 比如
/servlet
②模糊匹配
/ 匹配全部 但不包含.jsp
/* 匹配全部 包含jsp

前缀模糊 比如
*.action 前面是什么都可以 只要是.action 结尾

后缀模糊
/a/*

2.4 注解方式配置servlet

package com.cky.servlet;

import jakarta.servlet.ServletException;
import jakarta.servlet.annotation.WebServlet;
import jakarta.servlet.http.HttpServlet;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;

import java.io.IOException;
import java.io.PrintWriter;
//配置多个url路径 使用value 是一样饿效果
@WebServlet(urlPatterns ={"/s1","/s2"})
public class UserServlet extends HttpServlet {
    @Override
    protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        String name=req.getParameter("username");
        String info="NO";
        if (name.equals("cky")){
            info="Yes";
        }
        resp.setHeader("Content-Type","text/html");
        PrintWriter writer = resp.getWriter();
        writer.println(info);
    }
}

注意:web.xml方式 和注解方式 只能使用一个,不要同时使用。

2.5 servlet 生命周期

在这里插入图片描述
servlet是单例的,即在服务器中只会实例化一次,即使是多线程,也是使用这一个对象,所以并不支持在service中修改成员变量,多个线程对一个成员变量进行修改,就会引起线程冲突。

相关推荐

  1. day14 二叉树(

    2024-03-28 17:48:04       62 阅读
  2. LeetCode 每日Day 11||贪心

    2024-03-28 17:48:04       61 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-03-28 17:48:04       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-03-28 17:48:04       101 阅读
  3. 在Django里面运行非项目文件

    2024-03-28 17:48:04       82 阅读
  4. Python语言-面向对象

    2024-03-28 17:48:04       91 阅读

热门阅读

  1. linux内核网络“每日读书”

    2024-03-28 17:48:04       43 阅读
  2. 【OpenGL实践06】如何读入模型文件obj数据

    2024-03-28 17:48:04       32 阅读
  3. OpenAI奥特曼豪赌1.42亿破解长生不老

    2024-03-28 17:48:04       42 阅读
  4. lua 判断字符串是否包含指定字符

    2024-03-28 17:48:04       38 阅读
  5. 网络安全进入AI赋能时代

    2024-03-28 17:48:04       38 阅读
  6. MySQL高级部分学习笔记总结

    2024-03-28 17:48:04       33 阅读