带你吃透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 请求重定向演示

4.1 两个输出流

使用场景
字节流 getOutputStream() 常用于下载(传递二进制数据)
字符流 getWriter() 常用于回传字符串


两个流只能同时使用一个

4.2 如何回传客户端数据

往客户端回传字符串数据

案例代码如下:

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.PrintWriter;
/**
 * @author 兴趣使然黄小黄
 * @version 1.0
 */
public class ResponseIO extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        PrintWriter writer = resp.getWriter();
        writer.write("response's content!!!");
    }
}

同样,该案例中也存在响应的中文乱码问题

与post请求的中文乱码问题不同的是,不能仅仅设置服务端的编码格式,还需要将浏览器默认解析的编码格式统一!

代码如下:

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.PrintWriter;
/**
 * @author 兴趣使然黄小黄
 * @version 1.0
 */
public class ResponseIO extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //设置服务器的字符集
        resp.setCharacterEncoding("UTF-8");
        //通过响应头,设置浏览器的字符集
        resp.setHeader("Content-Type", "text/html;charset=UTF-8");
        PrintWriter writer = resp.getWriter();
        writer.write("这是一段中文!");
    }
}

也可以在获取流对象前,通过一个方法同时设置服务端和客户端的编码集:


resp.setContentType("text/html;charset=UTF-8");
1

5 请求重定向

5.1 什么是请求重定向

请求重定向是指客户端给服务端发请求,然后服务器给客户端提供了一个新的地址去访问。可以简单理解为:呼叫转移~


需要注意请求重定向与请求转发的区别!

请求重定向的特点如下:


不共享Request域的数据

两次请求

浏览器地址栏会发生变化

不能访问到WEB-INF目录下的资源

可以访问到工程外的资源


5.2 请求重定向演示

Response1.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 Response1 extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        System.out.println("----------Response1---------");
        //设置状态码302 表示重定向
        resp.setStatus(302);
        resp.setHeader("Location", "http://localhost:8080/Servlet_Test/response2");
    }
}

Response2.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 Response2 extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        System.out.println("----------Response2---------");
        resp.getWriter().write("response2");
    }
}



补充

请求重定向也有一种简便的实现方式:

resp.sendRedirect("http://xxxx/xxx/xxx...");


相关文章
|
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