response是HttpServletResponse的实例,用于提供给浏览器的响应信息
步骤1:设置响应内容
步骤2:设置响应格式
步骤3:设置响应编码
步骤4:301或者302客户端跳转
步骤5:设置不使用缓存
示例 1 : 设置响应内容
通过response设置响应已经用得比较多了,在前面的Servlet学习中都是用到
PrintWriter pw= response.getWriter();
通过response.getWriter(); 获取一个PrintWriter 对象
可以使用println(),append(),write(),format()等等方法设置返回给浏览器的html内容。
import java.io.IOException; import java.io.PrintWriter; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; public class HelloServlet extends HttpServlet{ public void doGet(HttpServletRequest request, HttpServletResponse response){ try { PrintWriter pw= response.getWriter(); pw.println( "<h1>Hello Servlet</h1>" ); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } } |
示例 2 : 设置响应格式
response.setContentType( "text/html" ); |
"text/html" 是即格式 ,在request获取头信息 中对应的request.getHeader("accept").
"text/html" 是存在的,表示浏览器可以识别这种格式,如果换一个其他的格式, 比如 "text/lol" ,浏览器不能识别,那么打开此servlet就会弹出一个下载的对话框。
这样的手段也就常常用于实现下载功能
![设置响应格式](https://i-blog.csdnimg.cn/blog_migrate/e091e8c4336466b142270a76a04680ab.png)
import java.io.IOException; import java.io.PrintWriter; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; public class HelloServlet extends HttpServlet { public void doGet(HttpServletRequest request, HttpServletResponse response) { try { PrintWriter pw = response.getWriter(); pw.println( "<h1>Hello Servlet</h1>" ); response.setContentType( "text/lol" ); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } } |
示例 3 : 设置响应编码
设置响应编码有两种方式
1 . response.setContentType( "text/html; charset=UTF-8" ); 2 . response.setCharacterEncoding( "UTF-8" ); |
这两种方式都需要在response.getWriter调用之前执行才能生效。
他们的区别在于
1 . response.setContentType( "text/html; charset=UTF-8" ); |
不仅发送到浏览器的内容会使用UTF-8编码,而且还通知浏览器使用UTF-8编码方式进行显示。所以总能正常显示中文
2 . response.setCharacterEncoding( "UTF-8" ); |
仅仅是发送的浏览器的内容是UTF-8编码的,至于浏览器是用哪种编码方式显示不管。 所以当浏览器的显示编码方式不是UTF-8的时候,就会看到乱码,需要手动再进行一次设置。
![设置响应编码](https://i-blog.csdnimg.cn/blog_migrate/2924d3daca2cb3d8729ea30dc0021c91.png)
import java.io.IOException; import java.io.PrintWriter; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; public class HelloServlet extends HttpServlet { public void doGet(HttpServletRequest request, HttpServletResponse response) { try { response.setContentType( "text/html; charset=UTF-8" ); // response.setCharacterEncoding("UTF-8"); PrintWriter pw = response.getWriter(); pw.println( "<h1>第一次 使用 Servlet</h1>" ); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } } |
示例 4 : 301或者302客户端跳转
客户端有两种跳转
302 表示临时跳转
301 表示永久性跳转
302就是前面在客户端跳转章节用到过的
response.sendRedirect( "fail.html" ); |
301要使用另外的手段:
response.setStatus( 301 ); response.setHeader( "Location" , "fail.html" ); |
用户感受不出这两种跳转的区别,但是可以借助火狐的调试工具看到响应的头信息是:
301 Moved Permanently。
301和302的区别主要在搜索引擎对页面排名的时候有影响,这是属于SEO范畴的概念,在此就不展开了。
![301或者302客户端跳转](https://i-blog.csdnimg.cn/blog_migrate/6e81cba49b49061268c2cc1dcda5d622.png)
import java.io.IOException; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; public class LoginServlet extends HttpServlet { private static final long serialVersionUID = 1L; protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { String name = request.getParameter( "name" ); String password = request.getParameter( "password" ); if ( "admin" .equals(name) && "123" .equals(password)) { request.getRequestDispatcher( "success.html" ).forward(request, response); } else { response.setStatus( 301 ); response.setHeader( "Location" , "fail.html" ); } } } |
示例 5 : 设置不使用缓存
使用缓存可以加快页面的加载,降低服务端的负担。但是也可能看到过时的信息,可以通过如下手段通知浏览器不要使用缓存
response.setDateHeader( "Expires" , 0 ); response.setHeader( "Cache-Control" , "no-cache" ); response.setHeader( "pragma" , "no-cache" ); |
import java.io.IOException; import java.util.Date; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; public class HelloServlet extends HttpServlet { public void doGet(HttpServletRequest request, HttpServletResponse response) { try { response.setDateHeader( "Expires" , 0 ); response.setHeader( "Cache-Control" , "no-cache" ); response.setHeader( "pragma" , "no-cache" ); response.getWriter().println( "<h1>Hello Servlet!</h1>" ); response.getWriter().println( new Date().toLocaleString()); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } } |
更多内容,点击了解: https://how2j.cn/k/servlet/servlet-response/556.html