带你吃透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...");


相关文章
|
Java 应用服务中间件 API
Servlet开发流程 (里面有Idea项目添加Tomcat依赖详细教程)
本文详细介绍了Servlet的开发流程,包括在IntelliJ IDEA中添加Tomcat依赖的详细教程。通过上述步骤,开发者可以快速搭建并运行一个基本的Servlet应用,理解并掌握Servlet的开发流程对于Java Web开发至关重要。希望本文能够帮助开发者顺利进行Servlet开发,提高工作效率。
1553 78
|
自然语言处理 定位技术
Servlet 教程 之 Servlet 国际化 3
Servlet教程展示了如何实现国际化(i18n)和本地化(l10n),利用`request.getLocale()`获取用户区域设置,通过`DateFormat`类格式化特定区域的日期。示例代码演示了根据用户区域显示相应日期,强调了处理多语言网站的关键方法,如`getCountry()`、`getLanguage()`等。
190 6
|
关系型数据库 MySQL Java
Servlet+MySQL增删改查 原文出自[易百教程] 转载请保留原文链接: https://www.yiibai.com/geek/1391
对于任何项目开发,创建,读取,更新和删除(CRUD)记录操作是应用程序的一个最重要部分。
371 20
|
安全 Java API
Java中的Servlet编程详解
Java中的Servlet编程详解
|
Java 应用服务中间件 API
Servlet 教程 之 Servlet 调试 2
Servlet调试常面临挑战,建议采用日志记录,推荐使用log4J。Servlet API的`log()`方法也能辅助调试,如示例代码所示,通过`ServletContext`记录消息。当参数缺失时,它能生成带有异常的日志。Tomcat容器会将这些日志保存在安装目录的logs文件夹下,有助于识别和追踪错误。在不常见异常的catch块中使用`log()`函数是良好实践。
150 8
|
小程序
Servlet 教程 之 Servlet 调试 3
Servlet调试是开发中的挑战,涉及复杂交互且错误难复现。使用JDB调试器,将HttpServer视为Servlet响应HTTP请求的调试目标。调试时,需配置调试器的classpath以包含HttpServer、Servlet及其相关类。为启用Servlet重载,通常将`server_root/servlets`加入classpath,但在调试时此规则有助于在加载Servlet前设置断点。在正确配置后,可在Servlet代码中设定断点,通过浏览器请求该Servlet以启动调试,程序会在断点处暂停。
167 6
|
自然语言处理 定位技术
Servlet 教程 之 Servlet 国际化 4
Servlet教程之国际化讲解了如何根据用户区域设置展示多语言内容。关键术语包括国际化(i18n)、本地化(l10n)和区域设置(locale)。Servlet通过`request.getLocale()`获取区域设置,并使用`NumberFormat`类格式化特定区域的货币。示例代码展示了如何根据客户端locale显示货币格式。
140 3
|
缓存 小程序 Java
Servlet 教程 之 Servlet 调试 6
Servlet调试涉及大量客户端/服务器交互,常带来困难。使用JDB调试器调试HttpServer来模拟HTTP请求,需设置正确类路径,包括servlet和相关类,以及servlet和支撑类的路径。通过在Servlet代码中设置断点,通过浏览器触发请求进行调试。注释法也可辅助调试,通过暂时移除部分代码观察bug变化。查看HTTP头信息对理解Servlet行为有帮助。关键技巧包括:注意classes目录不重载,强制浏览器刷新避免缓存,确保servlet的init()方法正确处理ServletConfig。
168 3
|
开发框架 缓存 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`以验证环境配置成功。
407 1
|
Java
Servlet 教程 之 Servlet 调试 1
Servlet调试常面临挑战,尤其是复杂的客户端/服务器交互导致的错误。`System.out.println()`是常用的调试工具,用于验证代码执行和显示变量值,尤其在无需额外类的环境中,如Servlet、JSP等。它不会中断程序执行,适合时序关键的场景。调试信息会出现在Web服务器日志中,例如:`System.out.println("Debugging message")`。
130 2