带你吃透Servlet核心编程下篇(完整图文教程)(上)

简介: 文章目录1 Http协议1.1 什么是 HTTP 协议1.2 GET请求与POST请求1.3 响应的HTTP协议格式1.4 MIME数据类型2 HttpServletRequest类2.1 HttpServletRequest说明及常用方法2.2 HttpServletRequest类演示2.3 获取请求表单中的参数值(POST请求)2.4 解决post请求中的中文乱码问题3 请求转发4 HttpServletResponse类4.1 两个输出流4.2 如何回传客户端数据5 请求重定向5.1 什么是请求重定向5.2 请求重定向演示

1 Http协议

1.1 什么是 HTTP 协议

协议是双方或者多方约定好需要遵守的规则。所谓HTTP协议就是指,在客户端和服务端通信时,发送的数据,需要遵守的规则。HTTP协议中的数据称为报文。


客户端给服务器发送数据叫请求,而服务器给客户端回传数据叫响应。

请求分为GET请求和POST请求。


1.2 GET请求与POST请求

GET请求的组成如下:


请求行

(1)请求的方式 GET

(2)请求的资源路径 [+?+请求参数]

(3)请求的协议版本号 HTTP/1.1

请求头

key:value 组成,不同的键值对,表示不同的含义。

GET请求HTTP协议内容示例:


常用请求头的说明:


Accept: 告诉服务器,客户端可以接收的数据类型;

Accept-Language: 告诉服务器客户端而言接收的语言类型;

User-Agent: 浏览器的信息;

Accept-Encoding: 告诉服务器,客户端可以接收的数据编码(压缩)格式;

Host: 表示请求的服务器ip和端口号;

Connection: 告诉服务器请求连接如何处理

 Keep-Alive:服务器马上回传数据,不要马上关闭,保持一小会儿的连接

 Closed: 马上关闭

POST请求的组成如下:


请求行

(1)请求的方式 GET

(2)请求的资源路径 [+?+请求参数]

(3)请求的协议版本号 HTTP/1.1

请求头

key:value 组成,不同的请求头,表示不同的含义。

请求体:发送给服务器的数据

辨析哪些是GET请求,哪些是POST请求

常用的GET请求:


form标签 method=get

a 标签

link标签引入css

Script标签引入js文件

img标签引入图片

iframe引入html页面

在浏览器地址栏输入地址后敲回车

常用的POST请求:


form标签 method=post

1.3 响应的HTTP协议格式

响应的HTTP协议格式组成如下:


响应行

(1)响应的协议和版本号

(2)响应状态码

(3)响应状态码描述符

响应头

key:value 组成,不同的响应头,表示不同的含义。

响应体:回传给客户端的数据、

示例图如下:



常用的响应码:

响应码 说明
200 表示请求成功
302 表示请求重定向
404 表示请求服务器已经收到,但是需要访问的数据不存在
500 表示服务器已经收到请求,但是服务器内部错误



1.4 MIME数据类型

MIME是HTTP协议中的数据类型。全称是"Multipurpose Internet Mail Extensions"多功能Internet邮件扩充服务,MIME类型的格式是"大类型/小类型",并与某一种文件的扩展名相对应。


常见的MIME类型:


2 HttpServletRequest类

2.1 HttpServletRequest说明及常用方法

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


HttpServletRequest类常用方法

方法 说明
getRequestURL() 获取请求的资源路径
getRequestURL() 获取请求的统一资源定位符(绝对路径)
getRemoteHost() 获取客户端的ip地址
getHeader() 获取请求头
getParameter() 获取请求的参数
getParamterValues() 获取请求的参数(多个值使用)
getMethod() 获取请求的方式POST或GET
setAttribute(key,value) 设置域数据
getAttribute(key) 获取域数据
getRequestDispatcher() 获取请求转发对象


2.2 HttpServletRequest类演示

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>RequestAPIServelet</servlet-name>
        <servlet-class>com.example.servlet_test.RequestAPIServelet</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>RequestAPIServelet</servlet-name>
        <url-pattern>/requestAPIServlet</url-pattern>
    </servlet-mapping>
</web-app>

RequestAPIServelet.java

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
/**
 * @author 兴趣使然黄小黄
 * @version 1.0
 */
public class RequestAPIServelet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //1. 获取请求的资源路径
        System.out.println("URL = " + req.getRequestURI());
        //2. 获取绝对路径(返回值是StringBuffer)
        System.out.println("URL = " + req.getRequestURL());
        //3. 获取客户端的ip地址
        /*
         * 在IDEA中,使用LocalHost访问时,得到的客户端的ip地址时127.0.0.1
         * IPV6表现形式则为0:0:0:0:0:0:0:1
         */
        System.out.println("ip = " + req.getRemoteHost());
        //4. 获取请求头
        System.out.println("请求头User-Agent = " + req.getHeader("User-Agent"));
        //5. 获取请求方式
        System.out.println("请求方式 = " + req.getMethod());
    }
}


2.3 获取请求表单中的参数值(POST请求)

下面演示如何获取表单的信息,以Post请求方式为例

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>ServletRequest</servlet-name>
        <servlet-class>com.example.servlet_test.ServletRequest</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>ServletRequest</servlet-name>
        <url-pattern>/servletRequest</url-pattern>
    </servlet-mapping>
</web-app>

html页面信息如下:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<form action="http://localhost:8080/Servlet_Test/servletRequest" method="post">
    用户名:<input type="text" name="username"><br/>
    密码:<input type="password" name="password"><br/>
    兴趣爱好:<input type="checkbox" name="hobby" value="java">Java
    <input type="checkbox" name="hobby" value="python">Python
    <input type="checkbox" name="hobby" value="C++">C++
    <input type="submit">
</form>
</body>
</html>



相关文章
|
13天前
|
关系型数据库 MySQL Java
Servlet+MySQL增删改查 原文出自[易百教程] 转载请保留原文链接: https://www.yiibai.com/geek/1391
对于任何项目开发,创建,读取,更新和删除(CRUD)记录操作是应用程序的一个最重要部分。
50 20
|
7月前
|
自然语言处理 定位技术
Servlet 教程 之 Servlet 国际化 3
Servlet教程展示了如何实现国际化(i18n)和本地化(l10n),利用`request.getLocale()`获取用户区域设置,通过`DateFormat`类格式化特定区域的日期。示例代码演示了根据用户区域显示相应日期,强调了处理多语言网站的关键方法,如`getCountry()`、`getLanguage()`等。
52 6
|
5月前
|
安全 Java API
Java中的Servlet编程详解
Java中的Servlet编程详解
|
5月前
|
前端开发 Java 应用服务中间件
JavaEE:Servlet后端搭建部署 一条龙全教程
JavaEE:Servlet后端搭建部署 一条龙全教程
|
7月前
|
Java API
Servlet 教程 之 Servlet 发送电子邮件 2
使用Servlet发送HTML邮件需要JavaMail API和JAF。在示例中,Servlet创建MimeMessage对象,设置发件人、收件人、主题及HTML内容,然后通过Transport.send()发送。确保相关jar在CLASSPATH中。当Servlet被调用时,它会向指定邮箱发送带有HTML标题的邮件。
57 11
|
7月前
|
Java 应用服务中间件 API
Servlet 教程 之 Servlet 调试 2
Servlet调试常面临挑战,建议采用日志记录,推荐使用log4J。Servlet API的`log()`方法也能辅助调试,如示例代码所示,通过`ServletContext`记录消息。当参数缺失时,它能生成带有异常的日志。Tomcat容器会将这些日志保存在安装目录的logs文件夹下,有助于识别和追踪错误。在不常见异常的catch块中使用`log()`函数是良好实践。
58 8
|
7月前
|
开发框架 缓存 Java
JSP 教程 之 Eclipse JSP/Servlet 环境搭建 1
本教程指导如何使用Eclipse搭建JSP/Servlet开发环境。需下载Eclipse J2EE和Tomcat,将Tomcat解压至无中文和空格的D盘目录。启动Tomcat后,服务器运行,通过浏览器访问`http://localhost:8080/`。在Tomcat的webapps\ROOT目录创建test.jsp文件,输入代码并访问`http://localhost:8080/test.jsp`以验证环境配置成功。
105 1
|
7月前
|
小程序
Servlet 教程 之 Servlet 调试 3
Servlet调试是开发中的挑战,涉及复杂交互且错误难复现。使用JDB调试器,将HttpServer视为Servlet响应HTTP请求的调试目标。调试时,需配置调试器的classpath以包含HttpServer、Servlet及其相关类。为启用Servlet重载,通常将`server_root/servlets`加入classpath,但在调试时此规则有助于在加载Servlet前设置断点。在正确配置后,可在Servlet代码中设定断点,通过浏览器请求该Servlet以启动调试,程序会在断点处暂停。
68 6
|
7月前
|
自然语言处理 定位技术
Servlet 教程 之 Servlet 国际化 4
Servlet教程之国际化讲解了如何根据用户区域设置展示多语言内容。关键术语包括国际化(i18n)、本地化(l10n)和区域设置(locale)。Servlet通过`request.getLocale()`获取区域设置,并使用`NumberFormat`类格式化特定区域的货币。示例代码展示了如何根据客户端locale显示货币格式。
44 3
|
7月前
|
定位技术
Servlet 教程 之 Servlet 国际化 3
Servlet教程展示了如何实现国际化(i18n)和本地化(l10n)。通过request对象的getLocale()获取用户区域设置,利用DateFormat进行特定区域的日期格式化。示例代码显示了根据用户浏览器设置显示相应语言和文化的日期。
42 2