示例 2 : 设置响应格式 示例 3 : 设置响应编码 示例 4 : 301或者302客户端跳转 示例 5 : 设置不使用缓存
通过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();
}
}
}
response.setContentType("text/html"); "text/html" 是即格式 ,在request获取头信息 中对应的request.getHeader("accept"). "text/html" 是存在的,表示浏览器可以识别这种格式,如果换一个其他的格式, 比如 "text/lol" ,浏览器不能识别,那么打开此servlet就会弹出一个下载的对话框。 这样的手段也就常常用于实现下载功能 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();
}
}
}
设置响应编码有两种方式
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的时候,就会看到乱码,需要手动再进行一次设置。 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();
}
}
}
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");
}
}
}
使用缓存可以加快页面的加载,降低服务端的负担。但是也可能看到过时的信息,可以通过如下手段通知浏览器不要使用缓存
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();
}
}
}
HOW2J公众号,关注后实时获知最新的教程和优惠活动,谢谢。
问答区域
2020-07-18
状态码301和302区别
回答已经提交成功,正在审核。 请于 我的回答 处查看回答记录,谢谢
2018-04-25
关于步骤2的下载,提醒一下
5 个答案
起个名 跳转到问题位置 答案时间:2024-03-26 111
Chrome 版本 99.0.****.**(正式版本)并不会弹出下载框! yjxjn 跳转到问题位置 答案时间:2020-03-25 其实是会的 但是需要在chrome的下载设置中勾选 "下载前询问"
Chrome 80 路过,表示并不会。还是会把H1标签打印出来
tll 跳转到问题位置 答案时间:2019-06-12 勾选了还是不打印,显示<h1>Hello Servlet!</h1>
leevanes 跳转到问题位置 答案时间:2019-05-06 其实是会的 但是需要在chrome的下载设置中勾选 "下载前询问" 丽丽哒云儿 跳转到问题位置 答案时间:2019-04-22 谢谢
回答已经提交成功,正在审核。 请于 我的回答 处查看回答记录,谢谢
2017-07-29
我的tomcat显示的是上一节的内容
2017-07-13
大佬我没有出现下载,浏览器显示的是 <h1>Hello Servlet</h1>。
2017-05-14
关于客户端跳转
提问太多,页面渲染太慢,为了加快渲染速度,本页最多只显示几条提问。还有 1 条以前的提问,请 点击查看
提问之前请登陆
提问已经提交成功,正在审核。 请于 我的提问 处查看提问记录,谢谢
|