Servlet2(1)

简介: Servlet2(1)

学习笔记
【尚硅谷最新版JavaWeb全套教程,java web零基础入门完整版-哔哩哔哩】

https://b23.tv/poTB6G

1.HttpServletRequest类

a)HttpServletRequest类有什么作用。

每次只要有请求进入Tomcat服务器,Tomcat服务器就会把请求过来的HTTP协议信息解析好封装到Request对象中。 然后传递到service方法(doGet和doPost)中给我们使用。我们可以通过HttpSerdetRequest对象,获取到所有请求的信息。

b)HttpServletRequest类的常用方法

i. getRequestURI() 获取请求的资源路径

ii. getRequestURL() 获取请求的统一资源定位符(绝对路径)

iii. getRemoteHost() 获取客户端的ip地址

iv. getHeader() 获取请求头

v. getParameter() 获取请求的参数

vi. getParameterValues() 获取请求的参数(多个值的时候使用)

vii. getMethod() 获取请求的方式GET或POST

viii. setAttribute(key, value);设置域数据

ix. getAttribute(key); 获取域数据

x. getRequestDispatcher() 获取请求转发对象

c) 如何获取请求参数

d) POST请求的中文乱码解决

演示

创建web模块07_servlet

创建Tomcat实例

application context:07_servlet


创建包和类


RequestAPIServlet

package com.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 RequestAPIServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//        i. getRequestURI() 获取请求的资源路径
        System.out.println("URI =>"+req.getRequestURI());
//        ii. getRequestURL() 获取请求的统一资源定位符(绝对路径)
        System.out.println("URL =>"+req.getRequestURL());
//        iii.  getRemoteHost() 获取客户端的ip地址
        /**
         * 在IDEA中,使用localhost访问时,得到的客户端ip地址是===>>>0:0:0:0:0:0:0:1
         * 在IDEA中,使用127.0.0.1访问时,得到的客户端ip地址是===>>>127.0.0.1
         * 在IDEA中,使用 真实ip 访问时,得到的客户端ip地址是===>>>真实的客户端ip
         */
        System.out.println("客户端 ip地址"+req.getRemoteHost());
//        iv. getHeader() 获取请求头
        System.out.println("请求头User-Agent==>>"+req.getHeader("User-Agent"));
//        vii.  getMethod() 获取请求的方式GET或POST
        System.out.println("请求的方式===>>"+req.getMethod());
    }
}

ParameterServlet

package com.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 RequestAPIServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//        i. getRequestURI() 获取请求的资源路径
        System.out.println("URI =>"+req.getRequestURI());
//        ii. getRequestURL() 获取请求的统一资源定位符(绝对路径)
        System.out.println("URL =>"+req.getRequestURL());
//        iii.  getRemoteHost() 获取客户端的ip地址
        /**
         * 在IDEA中,使用localhost访问时,得到的客户端ip地址是===>>>0:0:0:0:0:0:0:1
         * 在IDEA中,使用127.0.0.1访问时,得到的客户端ip地址是===>>>127.0.0.1
         * 在IDEA中,使用 真实ip 访问时,得到的客户端ip地址是===>>>真实的客户端ip
         */
        System.out.println("客户端 ip地址"+req.getRemoteHost());
//        iv. getHeader() 获取请求头
        System.out.println("请求头User-Agent==>>"+req.getHeader("User-Agent"));
//        vii.  getMethod() 获取请求的方式GET或POST
        System.out.println("请求的方式===>>"+req.getMethod());
    }
}

form.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
    <form action="http://localhost:8080/07_servlet/parameterServlet" method="get">
      用户名:<input type="text" name="username"><br/>
      密码:<input type="password" name="password"><br/>
      兴趣爱好:<input type="checkbox" name="hobby" value="cpp">C++
     <input type="checkbox" name="hobby" value="java">java
      <input type="checkbox" name="hobby" value="js">JavaScript<br/>
      <input type="submit">
    </form>
</body>
</html>

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_4_0.xsd"
         version="4.0">
    <servlet>
        <servlet-name>RequestAPIServlet</servlet-name>
        <servlet-class>com.servlet.RequestAPIServlet</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>RequestAPIServlet</servlet-name>
        <url-pattern>/requestAPIServlet</url-pattern>
    </servlet-mapping>
    <servlet>
        <servlet-name>ParameterServlet</servlet-name>
        <servlet-class>com.servlet.ParameterServlet</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>ParameterServlet</servlet-name>
        <url-pattern>/parameterServlet</url-pattern>
    </servlet-mapping>
</web-app>

e) 请求的转发

什么是请求的转发?

请求转发是指,服务器收到请求后,从一次资源跳转到另一个服务器资源的操作叫请求转发。

代码

Servlet1

package com.servlet;
import javax.servlet.RequestDispatcher;
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 Servlet1 extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //获取请求的参数(办事的材料)
        String username = req.getParameter("username");
        System.out.println("在Servlet1(柜台1)中查看参数(材料)"+username);
        //改材料盖一个章,并传递到Servlet2(柜台2)去查看
        req.setAttribute("key1","柜台1的章");
        //问路:Servlet2(柜台2)怎么走
        /**
         * 请求转发必须要以斜杠打头,/ 斜杠表示地址为:http://ip:port/工程名/,映射到IDEA代码的web目录
         */
        RequestDispatcher requestDispatcher = req.getRequestDispatcher("/servlet2");
        //走向Servlet2(柜台2)
        requestDispatcher.forward(req,resp);
    }
}

Servlet2

package com.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 Servlet2 extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //获取请求的参数(办事的材料)
        String username = req.getParameter("username");
        System.out.println("在Servlet1(柜台1)中查看参数(材料)"+username);
        //查看 柜台1 是否有盖章
        Object key1 = req.getAttribute("key1");
        System.out.println("柜台1 是否有盖章:"+key1);
        //处理自己的业务
        System.out.println("Servlet2处理自己的业务");
    }
}

web.xml

 <servlet>
        <servlet-name>Servlet1</servlet-name>
        <servlet-class>com.servlet.Servlet1</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>Servlet1</servlet-name>
        <url-pattern>/servlet1</url-pattern>
    </servlet-mapping>
    <servlet>
        <servlet-name>Servlet2</servlet-name>
        <servlet-class>com.servlet.Servlet2</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>Servlet2</servlet-name>
        <url-pattern>/servlet2</url-pattern>
    </servlet-mapping>




相关文章
|
11月前
|
XML Java 应用服务中间件
Servlet详解(上)
Servlet详解
74 0
|
4月前
|
XML 前端开发 Java
servlet使用
servlet使用
|
10月前
|
IDE Java 应用服务中间件
Servlet3.0
Servlet3.0
|
4月前
|
Oracle Java 关系型数据库
浅谈Servlet
浅谈Servlet
26 0
|
小程序 Java 应用服务中间件
Servlet这些你可能还不知道
Servlet这些你可能还不知道
57 0
|
应用服务中间件
Servlet2(2)
Servlet2(2)
64 0
|
11月前
|
JSON 前端开发 Java
Servlet详解(下)
Servlet详解
69 0
|
存储 安全 Java
servlet详解
servlet详解
654 0
|
小程序 Java 应用服务中间件
Servlet1(1)
Servlet1(1)
74 0
|
Java 应用服务中间件
Servlet详解
Servlet(Server Applet)是Java Servlet的简称,称为小服务程序或服务连接器,用Java编写的服务器端程序,具有独立于平台和协议的特性,主要功能在于交互式地浏览和生成数据,生成动态Web内容。 狭义的Servlet是指Java语言实现的一个接口,广义的Servlet是指任何实现了这个Servlet接口的类,一般情况下,人们将Servlet理解为后者。Servlet运行于支持Java的应用服务器中。从原理上讲,Servlet可以响应任何类型的请求,但绝大多数情况下Servlet只用来扩展基于HTTP协议的Web服务器。
151 1