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); } }