Javaweb-Servlet总结(概述、接口使用、配置、获取请求方式、路径操作、Request对象、Response对象)

Servlet概述

  • 即Server Applet

  • Servlet 是 JavaWEB 服务端的一个小程序,主要用户用户数据的交互,WEB 数据展示和数据传递,是一个动态的资源

  • Servlet 程序可以应对搜友类型的请求和响应,Servlet 主要用于 HTTP 协议的 WEB 服务器程序实现

  • Servlet 开发需要用到两个包

    javax.servlet

    javax.servlet.http

  • 开发中可能会涉及到的接口和类

    javax.servlet.http.Servlet

    javax.servlet.http.GServlet --abstract修饰的类

    javax.servlet.http.HttpServlet

    javax.servlet.http.HttpServletRequest

    javax.servlet.http.HttpServletResponse

    javax.servlet.http.HttpSession

    javax.servlet.http.Cookie

demo

以一个实例来说明 get 请求和 post 请求,前端有两个按钮分别是以 get 方式提交数据和以 post 方式提交数据

image-20211101223325533

前端html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>test</title>
</head>
<body>
<form action="ServletDemo" method="get">
    <input type="submit" value="GET请求"><br>
</form>

<form action="ServletDemo" method="post">
    <input type="submit" value="POST请求"><br>
</form>
</body>
</html>

后端代码ServletDemo

package cn.ocean888.demo1;

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;

/**
 * 1.继承HttpServlet interface
 * 2.重写doget、dopost
 * 3.使用注解方式告知tomcat服务器当前Servlet的路由
 */
@WebServlet("/test")
public class ServletDemo extends HttpServlet {

    /**
     * 处理GET请求
     * @param req HttpServletRequest对象,对应当前浏览器请求数据内容对应的对象
     * @param resp HttpServletResponse对象,对应是当前浏览器对于浏览器请求的响应
     * @throws ServletException Servlet异常
     * @throws IOException IO异常
     */
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        super.doGet(req, resp);
    }

    /**
     * 处理post请求
     */
    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        /*
        通常情况下,浏览器或者客户端发送数据的请求方式只有一种,对应GET请求和POST请求,在实现Servlet代码时,
        针对GET和POST完成对应的方法,此处使用doget,实现所有的业务逻辑
         */
        //super.doPost(req, resp);
        System.out.println("post请求方式");
        doGet(req, resp);
    }
}

Servlet核心接口和类

interface.javax.servlet.Servlet【核心接口】

Defines methods that all servlets must implement.
	当前接口中所有的Servlet程序必须实现
A servlet is a small Java program that runs within a Web server
	Servlet是一个小的Java程序,需要运行在WEB服务器当中。
	
Servlet接口中定义了5个方法
	public void init(ServletConfig config) throws ServletException;
		初始化当前Servlet程序,这里需要的参数是ServletConfig,ServletConfig
		是当前Servlet的配置,该配置可以从注解方式或者从当前项目中的web.xml加载
		获取
		
	public ServletConfig getServletConfig();
		获取ServletConfig对象,当前对象中保护Servlet配置内容。
		
	public void service(ServletRequest req, ServletResponse res)
            throws ServletException, IOException;
    	【核心方法】Servlet提供服务的方法,浏览器访问当前Servlet程序,service
    	方法是起作用,ServletRequest对应的是请求,ServletResponse对应的是响
    	应
    
    public String getServletInfo();
    	获取当时Servlet程序信息对应字符串
    	
    public void destroy();
    	销毁当前Servlet程序,可以由Tomcat服务器执行,也可也通过servlet程序自己
    	调用

abstract javax.servlet.GenericServlet【Servlet中间商】

	功能是完成了Servlet接口和ServletConfig接口的一部分方法,简化了之后代码的逻辑,主要需要了解的方法:
	public String getInitParameter(String name);
		根据初始化参数名字获取对应的值,而且参数值为String
	public Enumeration<String> getInitParameterNames();
	 	获取所有参数的名字。枚举类型的List
	public ServletConfig getServletConfig();
		获取ServletConfig对象
	public ServletContext getServletContext();
		获取ServletContext对象,一个Servlet Application有且只有一个
		ServletContext对应,这是Servlet上下文对象
	这里同时实现了Servlet接口中的 init 初始化方法

abstract javax.servlet.http.HttpServlet 【Servlet程序基类】

    abstract javax.servlet.http.HttpServlet 这是一个Java中符合Http协议的Servlet程序,继承GenericServlet,同时是Servlet接口和ServletConfig间接实现类。    
    HttpServlet中首先实现service核心方法,并且将service核心方法的请求方式,响应方式强转为符合Http协议的请求和响应    所有和Servlet业务逻辑无关的初始化方法,设置方法,销毁方法,HttpServlet中全部不需要考虑,只考虑符合Http协议请求方式和响应方式

核心方法:
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException
    符合HTTP GET请求的处理方式
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException     
    符合HTTP POST请求的处理方式
    
【注意】
	以上方法不重写,或者执行还是对应的方法,例如super.doGet(req,resp), 响应方式会提示报错 SC_METHOD_NOT_ALLOWED

三种自定义Servlet接口的方法

1.实现Servlet接口
package com.qfedu.b_threeFunction;

import javax.servlet.*;
import javax.servlet.annotation.WebServlet;
import java.io.IOException;

/**
 * 遵从Servlet接口实现Servlet程序
 * 代码中存在太多和业务逻辑无关的代码,增加了程序员的压力!!!
 * 不可取!!!
 */
@WebServlet("/ServletImpl")
public class ServletImpl implements Servlet {

    /**
     * 构造方法
     */
    public ServletImpl() {
        System.out.println("ServletImpl Constructor called");
    }

    /**
     * 初始化方法
     *
     * @param config 需要使用ServletConfig类对象,也就是Servlet配置来完成初始化操作
     * @throws ServletException Servlet异常
     */
    @Override
    public void init(ServletConfig config) throws ServletException {
        System.out.println("init method called");
    }

    /**
     * 获取ServletConfig对象
     *
     * @return 获取ServletConfig对象
     */
    @Override
    public ServletConfig getServletConfig() {
        return null;
    }

    /**
     * 提供服务核心方法
     *
     * @param req ServletRequest对象
     * @param res ServletResponse对象
     * @throws ServletException Servlet异常
     * @throws IOException      IO异常
     */
    @Override
    public void service(ServletRequest req, ServletResponse res) throws ServletException, IOException {
        System.out.println("service method called");
    }

    /**
     * 获取Servlet信息
     * @return
     */
    @Override
    public String getServletInfo() {
        return null;
    }

    /**
     * 销毁Servlet
     */
    @Override
    public void destroy() {
        System.out.println("destroy method called");
    }
}

image-20211102170959704

2.继承GenericServlet抽象类
package com.qfedu.b_threeFunction;

import javax.servlet.GenericServlet;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.annotation.WebServlet;
import java.io.IOException;

/**
 * 继承GenericServlet 抽象类实现Servlet程序
 * 对应Servlet接口,在继承GenericServlet情况下,我们需要完成的方法有且
 * 只有service核心方法。
 *
 * 代码量明显减少,同时和业务逻辑无关的代码不需要考虑,但是没有针对性,
 * 没有对应Http协议请求方式的对应处理方法
 * 
 * @author MI 2020/3/30 11:30
 */
@WebServlet("/GenericServletExtends")
public class GenericServletExtends extends GenericServlet {
    @Override
    public void service(ServletRequest req, ServletResponse res) throws ServletException, IOException {
        System.out.println("GenericServletExtends service method called");
    }
}
3.继承HttpServlet抽象类
package com.qfedu.b_threeFunction;

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;

/**
 * 继承HttpServlet实现符合HTTP协议的Servlet程序
 * 并且可以自定义实现请求方式的对应处理方法
 *
 * @author MI 2020/3/30 11:34
 */
@WebServlet("/HttpServletExtends")
public class HttpServletExtends extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        System.out.println("HttpServletExtends doGet or doPost method called");
        resp.getWriter().append("Hello Servlet");
    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        doGet(req, resp);
    }
}
【注意】
	继承HttpServlet重写HttpServlet对应HTTP协议的处理方法,一定要完成,如果未完成或者说依然执行调用的是HttpServlet中的方法,
	会有错误出现 405 Method Not Allow

平时主要用的就是这种方式

生命周期

tomcat管理Servlet程序的声明周期,主要涉及4个方法

  • Constructor方法
  • init初始化方法
  • service方法
  • destory销毁方法
概述
  • 阶段一

    Constructor方法执行,实例化过程。Tomcat中的Servlet容器调用Servlet程序对应的构造方法创建Servlet类对象

    前提条件:

    1. 当前Servlet程序需要被执行
    2. 当前Servlet程序配置了开机启动

    而且Constructor有且只执行一次

  • 阶段二:

    init(ServletConfig config) 初始化方法,当Servlet程序创建之后一定要对当前Servlet程序进行初始化过程,需要使用ServletConfig对象完成初始化操作,ServletConfig对象中是从注解或者web.xml中获取对应的配置信息,完成初始化操作,而且只执行一次

  • 阶段三:

    service方法提供服务
    当前Servlet程序准备完毕,Servlet程序是在被请求时执行service方法,完成对应请求和响应的执行过程。到HttpServlet抽象类中对于service方法实现,并且按照HTTP请求方式完成划分工作。比如doGet doPost

  • 阶段四:

    Tomcat服务器中Servlet容量对于Servlet进行销毁过程,有几种情况下会执行destroy方法

    1. Tomcat服务器关闭,Servlet容器会执行每一个Servlet程序的destroy方法
    2. 当前Servlet程序执行过程中,存在特定条件选择关闭
    3. 通常情况下Servlet容器对于Servlet程序的管理是自动完成的,不需要人为干预

配置方式

Servlet3.0之后允许使用注解方式配置
属性名概述
nameServlet名字,可以自定义
valueurl资源匹配方式,和urlPatterns互斥
urlPatterns允许当前Servlet有多个匹配方式,和value互斥
loadOnStartup是否启动服务时加载当前Servlet,默认 -1,选择加载 1
initParamsWebInitParam 注解类型 name和value 当前Servlet配置初始化配置
@WebServlet(name = "AnnotationServlet",
        urlPatterns = {"/AnnotationServlet", "/as", "/saolei"},//允许多个匹配规则
        loadOnStartup = 1,
        initParams = {@WebInitParam(name = "aa", value = "ocean"), @WebInitParam(name = "bb", value = "46号技师")})//初始化参数
public class AnnotationServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        System.out.println("Annotation Config Servlet");
        String aa = this.getServletConfig().getInitParameter("aa");//获取初始化参数
        String bb = this.getServletConfig().getInitParameter("bb");

        System.out.println(aa);
        System.out.println(bb);

        resp.getWriter().append("Annotation Config Servlet");
    }
}
任何一个版本都允许使用web.xml配置
<!-- 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_3_1.xsd"
         version="3.1">
    <!-- Servlet 程序声明,告知Servlet程序对应的名字和Servlet程序对应的class -->
    <servlet>

        <!-- ServletName -->
        <servlet-name>WebXmlServlet</servlet-name>

        <!-- Servlet对应的class,该名字必须是完整的包名.类名 -->
        <servlet-class>cn.ocean.WebXmlServlet</servlet-class>
        <!-- 当前Servlet程序初始化操作,需要放在servlet-class之后 -->
        <init-param>
            <param-name>param1</param-name>
            <param-value>ocean</param-value>
        </init-param>
        <init-param>
            <param-name>param2</param-name>
            <param-value>ocean</param-value>
        </init-param>
        <!-- 当前Servlet随着Tomcat服务器启动加载 -->
        <load-on-startup>1</load-on-startup>

    </servlet>
    <!-- Servlet映射关系 -->
    <servlet-mapping>
        <!-- 告知Tomcat服务器,当前url-pattern映射的是哪一个Servlet -->
        <servlet-name>WebXmlServlet</servlet-name>
        <!-- URL匹配原则 -->
        <url-pattern>/WebXmlServlet</url-pattern>
    </servlet-mapping>
    <!-- Servlet映射关系 -->
    <servlet-mapping>
        <!-- 告知Tomcat服务器,当前url-pattern映射的是哪一个Servlet -->
        <servlet-name>WebXmlServlet</servlet-name>
        <!-- URL匹配原则 -->
        <url-pattern>/wxs</url-pattern>
    </servlet-mapping>
</web-app>

两种方式对比

注解
	配置简单,直观,高效
	url-pattern 冲突问题,并且是在Tomcat启动时发现,需要注意细节
	
web.xml
	繁琐,麻烦,步骤繁多
	url-pattern 一旦写错或者冲突,web.xml文件会提示错误!!!

img

img

Servlet获取请求数据

【注意】
	1. 要求前端提交数据的name属性和后台获取getParameter参数一致
	2. 在后台通过HttpServletRequest获取数据使用getParameter方法,返回值是String类型

前端代码

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>02-ParameterUpload</title>
</head>
<body>
<form action="GetParameterServlet" method="get">
    <span>姓名:</span><input type="text" name="userName"> <br>
    <span>密码:</span><input type="password" name="password"> <br>
    <input type="submit" value="提交">
</form>
<hr>
<form action="GetParameterServlet" method="post">
    <span>姓名:</span><input type="text" name="userName"> <br>
    <span>密码:</span><input type="password" name="password"> <br>
    <input type="submit" value="提交">
</form>
</body>
</html>

后端代码

/**
 * 获取前端通过HTTP请求方式发送过来的数据
 *
 * @author MI 2020/3/30 16:02
 */
@WebServlet("/GetParameterServlet")
public class GetParameterServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        // 浏览器通过form表单提交的数据都在HttpServletRequest对象中

        // 通过getParameter获取对应的参数名数据,参数名和form表单中的name属性一致
        String userName = req.getParameter("userName");
        String password = req.getParameter("password");

        System.out.println(userName + ":" + password);

    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        System.out.println("POST请求方式");
        doGet(req, resp);
    }
}

Servlet请求乱码问题

GET请求使用
	Tomcat7以及以下版本使用情况下,前端数据传输使用的HTTP协议,传递的方式是UTF-8编码,Tomcat服务器Request对象接收数据时,使用的编码是ISO-8859-1。
	数据接收方式和发送方式使用的编码集不一致,导致中文乱码
	Tomcat8以上GET请求中文乱码基本上不会出现
String userName = req.getParameter("userName");
// 这里需要转换对应你的编码集方式
userName = new String(userName.getBytes("ISO-8859-1"), "UTF-8");
String password = req.getParameter("password");
System.out.println(userName + ":" + password);
POST请求使用
	客户端发送数据的方式是通过该UTF-8传输,客户端需要设置同样的方式接受,需要设置HttpServletRequest.setCharacterEncoding("utf-8");统一设置编码。
Servlet响应乱码问题
	HttpServletResponse响应对象默认采用的编码集方式是根据当前系统编码集有关,这里使用的编码集是GB2312,浏览器默认解析方式是UTF-8
	解决方案:
		告知HttpServletResponse,当前响应编码集和方式为UTF-8
		response.setContentType("text/html;charset=utf-8");
针对乱码问题总结解决方案
	针对于Tomcat8及其以上版本的Tomcat服务器软件,需要在接受数据时和响应数据时设置对应的编码集
	request.setCharacterEncoding("utf-8");
	response.setContentType("text/html;charset=utf-8");
	以上两行代码可以放在所有的Servlet程序之前
	
	Tomcat7及其以下版本,需要注意GET请求方式使用的编码集为ISO-8859-1

ServletRequest和ServletResponse

重定向
浏览器发送HTTP请求 ==> 服务器
服务器接收到请求之后 发送302状态码 新的location ==> 浏览器
浏览器收到302状态码 + location 按照新的location发送新的请求 ==> 服务器

特征:
	1. 该操作是浏览器行为
	2. 重定向最少存在两次的浏览器请求
	3. 重定向情况下,浏览器的地址栏会发生改变
	4. 重定向操作存在两个或者两个以上的请求,每一次新的请求,都会丢失之前的请求数据,也就是request对象【requeset作用域范围】
	5. 重定向可以访问任何资源,不管是当前WEB服务器资源,还是网络端的资源都是可以访问
@WebServlet("/RedirectServlet")
public class RedirectServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        // 请求和响应乱码问题解决
        req.setCharacterEncoding("utf-8");
        resp.setContentType("text/html;charset=utf-8");
		// 重定向操作,重定向当前WEB Application中的index.jsp
        resp.sendRedirect("index.jsp");
    }
}
请求转发
浏览器发送HTTP请求 ==> 服务器
服务器接收到请求之后内部资源处理跳转 ==> 服务器其他资源
服务器其他资源处理完毕之后,才通过原始的请求和响应返回数据 ==> 客户端

特征:
	1. 转发是服务器行为
	2. 转发情况下浏览器有且只发送了一次请求
	3. 转发情况下浏览器的地址栏没有发生任何改变
	4. 转发情况下,浏览器的请求数据时被保存的,是通过request进行传递的
	5. 转发情况下有且只能转发WEB Application整个项目的内容资源
@WebServlet("/dispatch")
public class DispatchServlet1 extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        // 转发到WEB Application内部资源
        // getRequestDispatcher("dispatch2") 指定的内部资源名字
        // forward(req, resp) 转发到指定资源,并且带有当前对应用户请求的request对象和response对象
		req.getRequestDispatcher("/dispatch2").forward(req, resp);
    }
}
请求资源路径
浏览器输入: 
	http://localhost:8080/Day42/dispatch
	
HOST:
	http://127.0.0.1:8080
	
资源名:
	Day42/dispatch

Tomcat收到Day42/dispatch,资源请求之后,首先找到Day42项目或者说路径,然后在web.xml或者注解中找到url-pattern 为 dispatch的内容。从而执行对应的Servlet

url-pattern是存在匹配原则
	精确匹配
		/具体名字
	后缀名匹配
		*.do *.action 
		*.xxx  主要是按照规定结尾的url-pattern都可以触发对应的Servlet程序
	通配符匹配
		/* 匹配所有请求,服务器端所有资源都可以匹配
单Servlet实现多请求
WEB Application中Servlet是整个WEB项目的核心,Servlet用于接收用户的请求,并且处理用户响应,每一个业务逻辑都有一个对应的Servlet,Servlet非常非常多,对于Servlet容器是存在一定压力的。
采用Servlet做一个分发操作,分发用户去请求和对应的响应,让别人处理。Servlet程序做的事情就非常的Easy了

需要对于用户请求的URL进行解析操作,通过一写特定的参数完成分发操作,让一个Servlet程序能够满足多个条件处理

后缀名匹配:
	*.do匹配

代码

/**
 * 分发操作的Servlet,使用*.do匹配,并且解析操作,执行对应的方法
 */
@WebServlet("*.do")
public class TransferServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        String requestURI = req.getRequestURI();
        System.out.println(requestURI);

        String method = requestURI.substring(requestURI.lastIndexOf("/") + 1, requestURI.lastIndexOf("."));
        System.out.println(method);

        Class<ExecuteMethod> executeMethodClass = ExecuteMethod.class;
        Method method1 = null;
        try {
            method1 = executeMethodClass.getMethod(method);
            method1.invoke(null);
        } catch (NoSuchMethodException | IllegalAccessException | InvocationTargetException e) {
            e.printStackTrace();
        }


    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        doGet(req, resp);
    }
}
/**
 * 目标执行方法
 */
public class ExecuteMethod {
    public static void add() {
        System.out.println("Add Method");
    }

    public static void delete() {
        System.out.println("Delete Method");
    }

    public static void update() {
        System.out.println("Update Method");
    }

    public static void select() {
        System.out.println("Select method");
    }
}
ServletContext Servlet上下文对象

概述

Servlet上下文对象,当WEB Application启动时,Tomcat服务器会根据web.xml以及注解方式,创建一个唯一的ServletContext对象,包含整个项目中很多核心的资源数据,并且是一个整个WEB Application的【公共区域】,所有的Servlet程序和JSP程序都可以使用ServletContext中存储的数据。

当WEB Application项目关闭时,ServletContext对象被销毁

获取ServletContext对象

方式一:
	GenericServlet可以通过getServletContext方法获取
方式二:
	ServletConfig接口中提供了getServletContext方法获取
方式三:
	HttpSession提供getServletContext方法获取
方式四:
	HttpServletRequest提供getServletContext方法获取

ServletContext对象特征

1. 唯一性,不管通过哪一个方式获取,都是同一个对象
2. WEB Application启动时加载创建,退出时销毁
3. ServletContext中存储的数据时一个共享资源,使用小心
4. ServletContext是一个【域对象】
@WebServlet("/TestServletContext")
public class TestServletContext extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        // 1. 可以直接通过当前Servlet对象来获取对应的ServletContext数据 【墙裂推荐】
        ServletContext servletContext1 = this.getServletContext();

        // 2. 通过ServletConfig对象获取对应的ServletContext对象
        ServletContext servletContext2 = this.getServletConfig().getServletContext();

        // 3. 通过Request请求对象获取对应都是ServletContext对象
        ServletContext servletContext3 = req.getServletContext();

        // 4. 通过HtttpSession对象获取ServletContext对象
        HttpSession session = req.getSession();
        ServletContext servletContext4 = session.getServletContext();

        System.out.println(servletContext1 == servletContext2);
        System.out.println(servletContext2 == servletContext3);
        System.out.println(servletContext3 == servletContext4);
        
        /*
        有效方法1:
            获取当前项目的发布路径
         */
        System.out.println(servletContext1.getRealPath("/"));

        /*
        有效方法2:
            获取服务器版本号
            可以资源的根目录
         */
        System.out.println(servletContext1.getServerInfo());
        System.out.println(servletContext1.getContextPath());

        /*
         有效方法3:
            作为数据传递的容器
         */
        servletContext1.setAttribute("Tag", "骚磊");
        /*
        有效方法4:
            ServletContext 刚刚区域数据存储还是删除
         */
        System.out.println(this.getServletContext().getAttribute("Tag"));
        this.getServletContext().removeAttribute("Tag");
    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        doGet(req, resp);
    }
}
HttpServletRequest对象
	HttpServletRequest对象是有服务器根据用户的请求创建得到,一个请求对应一个Request对象。

继承关系
	interface ServletRequest
	--| interface HttpServletRequest
	Tomcat完成的符合HttpServletRequeset接口的实现类对象,对应Requeset
	----| org.apache.catalina.connector.RequestFacade

Request对象中存在一大堆的方法
方法名功能
getMethod()获取请求方式 GET or POST
getRequestURL()获取用户访问浏览器的完整路径
getRequestURI()获取用户请求资源名
getContextPath()获取虚拟目录名 Application Context
getQueryString()GET请求的所有参数,POST请求通过请求实体无法获取
getProtocol()获取当前使用的网络传输协议 HTTP/1.1
getRemoteAddr()获取客户端IP地址
getRemoteHost()主机地址
getRemotePort()用户请求当前资源的端口号
getRemoteUser()用户名字
Enumeration getHeaderNames()获取所有请求头名字
getHeader(String)获取指定请求头名称对应的值

请求参数相关方法【重点】

方法功能
String getParameter(String)根据指定的参数名获取对应的值,返回值类型为String
Enumeration getParameterNames()获取所有参数的名字
String[] getParameterValues(String)获取指定参数名对应的字符串数组参数值 例如: 多选
Map<String, String[]> getParameterMap()获取当前Request请求中所有参数和参数值的Map双边队列,而且可以存着数组形式【框架常用】
HttpServletResponse对象
用户发送请求到服务器,服务器会对应当前用户的请求针对性的提供的响应,对应的就是HttpServletResponse对象
服务器可以通过response对象发送响应告知浏览器,浏览器可以根据服务器响应数据进行解析操作。
方法功能
setContentType()设置当前响应返回数据类型
PrintWriter getWriter()字符流对象
setHeader(name, value)设置响应头信息
setStatus(int)设置当前页面的状态码
getOutputStream()输出字节流对象
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

OceanSec

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

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

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

打赏作者

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

抵扣说明:

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

余额充值