IDEA(2020版)实现Servlet程序 – 每天进步一点点
IDEA(2020版)实现Servlet的生命周期 – 每天进步一点点
IDEA(2020版)实现ServletConfig和ServletContext – 每天进步一点点
IDEA(2020版)实现HttpServletResponse对象 – 每天进步一点点
本文主要介绍在IDEA中实现HttpServletResponse对象
源代码下载: https://box356.lanzoub.com/ij9CW2s8vp2h
1.获取请求行信息的相关方法
右击src—>New—>Create New Servlet,名称就叫TestServlet4_17

代码参考如下:
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;
import java.io.PrintWriter;
@WebServlet(name = "TestServlet4_17",value = "/test417")
public class TestServlet4_17 extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
response.setContentType("text/html;charset=utf-8");
PrintWriter out = response.getWriter();
// 获取请求行的相关信息
out.println("getMethod : " + request.getMethod() + "<br />");
out.println("getRequestURI : " + request.getRequestURI() + "<br />");
out.println("getQueryString:" + request.getQueryString() + "<br />");
out.println("getProtocol : " + request.getProtocol() + "<br />");
out.println("getContextPath:" + request.getContextPath() + "<br />");
out.println("getPathInfo : " + request.getPathInfo() + "<br />");
out.println("getPathTranslated : " + request.getPathTranslated() + "<br />");
out.println("getServletPath:" + request.getServletPath() + "<br />");
out.println("getRemoteAddr : " + request.getRemoteAddr() + "<br />");
out.println("getRemoteHost : " + request.getRemoteHost() + "<br />");
out.println("getRemotePort : " + request.getRemotePort() + "<br />");
out.println("getLocalAddr : " + request.getLocalAddr() + "<br />");
out.println("getLocalName : " + request.getLocalName() + "<br />");
out.println("getLocalPort : " + request.getLocalPort() + "<br />");
out.println("getServerName : " + request.getServerName() + "<br />");
out.println("getServerPort : " + request.getServerPort() + "<br />");
out.println("getScheme : " + request.getScheme() + "<br />");
out.println("getRequestURL : " + request.getRequestURL() + "<br />");
}
public void doPost(HttpServletRequest request,
HttpServletResponse response) throws ServletException,
IOException {
doGet(request, response);
}
}
在浏览器里输入下面的地址,注意和你实际的地址相匹配
http://localhost:8080/Servlet01_war_exploded/test417
运行结果如下:

2.获取请求头的相关方法
右击src,创建一个新的Servlet,名字为TestServlet4_18

代码参考如下:
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;
import java.io.PrintWriter;
import java.util.Enumeration;
@WebServlet(name = "TestServlet4_18",value = "/test418")
public class TestServlet4_18 extends HttpServlet {
public void doGet(HttpServletRequest request,
HttpServletResponse response) throws ServletException, IOException {
response.setContentType("text/html;charset=utf-8");
PrintWriter out = response.getWriter();
// 获取请求消息中所有头字段
Enumeration headerNames = request.getHeaderNames();
// 使用循环遍历所有请求头,并通过getHeader()方法获取一个指定名称的头字段
while (headerNames.hasMoreElements()) {
String headerName = (String) headerNames.nextElement();
out.print(headerName + " : "
+ request.getHeader(headerName) + "<br />");
}
}
public void doPost(HttpServletRequest request,
HttpServletResponse response) throws ServletException, IOException {
doGet(request, response);
}
}
然后访问地址参考如下:
http://localhost:8080/Servlet01_war_exploded/test418
结果如下:

3.请求转发
请求转发实习两个Servlet之间的跳转,我们创建两个Servlet,第一个TestServlet4_19和TestServlet4_20,当我们访问TestServlet4_19的时候,自动跳转到TestServlet4_20。
右击Src,创建第一个TestServlet4_19,代码参考如下:
import javax.servlet.RequestDispatcher;
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;
@WebServlet(name = "TestServlet419",value = "/test419")
public class TestServlet4_19 extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse
response) throws ServletException, IOException {
response.setContentType("text/html;charset=utf-8");
request.setAttribute("username", "张三");// 将数据存储到request对象中
//RequestDispatcher dispatcher = request.getRequestDispatcher("/ResultServlet"); //原版
RequestDispatcher dispatcher = request.getRequestDispatcher("/test420"); //新版
dispatcher.forward(request, response);
}
public void doPost(HttpServletRequest request, HttpServletResponse
response) throws ServletException, IOException {
doGet(request, response);
}
}
再创建一个Servlet4_20,代码参考如下
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;
import java.io.PrintWriter;
@WebServlet(name = "TestServlet4_29",value = "/test420")
public class TestServlet4_20 extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse
response) throws ServletException, IOException {
response.setContentType("text/html;charset=utf-8");
PrintWriter out = response.getWriter();
String username = (String) request.getAttribute("username");
if (username != null) {
out.println("用户名:" + username + "<br/>");
}
}
public void doPost(HttpServletRequest request, HttpServletResponse
response) throws ServletException, IOException {
doGet(request, response);
}
}
我们访问第一个Servlet的地址
http://localhost:8080/Servlet01_war_exploded/test419

运行结果如下:

4.获取请求参数
右击web——>New——>HTML file,名称为form.html

代码参考如下:
(注意,action的地址已经修改)
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
<form action="/Servlet01_war_exploded/test422" method="POST">
用户名:<input type="text" name="username"><br />
密 码:<input type="password" name="password">
<br />
爱好:
<input type="checkbox" name="hobby" value="sing">唱歌
<input type="checkbox" name="hobby" value="dance">跳舞
<input type="checkbox" name="hobby" value="football">足球<br />
<input type="submit" value="提交">
</form>
</body>
</html>
然后右击src创建一个servlet,名字为TestServlet4_22

代码参考如下:
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;
@WebServlet(name = "TestServlet4_22",value = "/test422")
public class TestServlet4_22 extends HttpServlet {
public void doGet(HttpServletRequest request,
HttpServletResponse response) throws ServletException, IOException {
request.setCharacterEncoding("utf-8");
String name = request.getParameter("username");
String password = request.getParameter("password");
System.out.println("用户名:" + name);
System.out.println("密 码:" + password);
// 获取参数名为“hobby”的值
String[] hobbys = request.getParameterValues("hobby");
System.out.print("爱好:");
for (int i = 0; i < hobbys.length; i++) {
System.out.print(hobbys[i] + ", ");
}
}
public void doPost(HttpServletRequest request,
HttpServletResponse response) throws ServletException, IOException {
doGet(request, response);
}
}
我们在浏览器里访问form.html
http://localhost:8080/Servlet01_war_exploded/form.html

实现效果如下:

5.解决请求参数中文乱码问题
设置方法就是在代码中加入下面的代码
request.setCharacterEncoding("utf-8");
在上述文件TestServlet4_22中,已经加了上述代码,所以结果没有乱码
如果去掉这段代码,就会出现中文乱码。
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;
@WebServlet(name = "TestServlet4_22",value = "/test422")
public class TestServlet4_22 extends HttpServlet {
public void doGet(HttpServletRequest request,
HttpServletResponse response) throws ServletException, IOException {
request.setCharacterEncoding("utf-8");
String name = request.getParameter("username");
String password = request.getParameter("password");
System.out.println("用户名:" + name);
System.out.println("密 码:" + password);
// 获取参数名为“hobby”的值
String[] hobbys = request.getParameterValues("hobby");
System.out.print("爱好:");
for (int i = 0; i < hobbys.length; i++) {
System.out.print(hobbys[i] + ", ");
}
}
public void doPost(HttpServletRequest request,
HttpServletResponse response) throws ServletException, IOException {
doGet(request, response);
}
}