javaweb--HttpServletRequest/HttpServletResponse
程序员文章站
2022-05-08 16:00:32
...
一、HttpServletResponse
web服务器接收到客户端的http请求,分别创建一个代表请求的HttpServletRequest对象,代表响应的HttpServletResponse的对象
- 如果要获取客户端请求过来的参数:找HttpServletRequest
- 如果要给客户端响应一些信息:找HttpServletResponse
响应状态码:
200:请求响应成功
3xx:请求重定向
4xx:404找不到资源,考虑路径错误
5xx:500服务器代码错误
502网关错误
常见应用:
1、向浏览器输出消息
2、下载文件
实现步骤:
1、获取要下载的文件路径
2、知道下载的文件名
3、设置浏览器可以支持下载
4、获取下载文件的输入流
5、创建缓冲区
6、获取输出流
7、使用输出流将数据写出到客户端
public class ResponseDemo extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
// 1、获取要下载的文件路径
// this.getServletContext().getRealPath()
String realPath="F:\\JavaProject\\javaweb\\javawebmaven3\\response\\src\\main\\sources\\图.png";
// 2、知道下载的文件名
String fileName=realPath.substring(realPath.lastIndexOf("\\")+1);
// 3、设置浏览器可以支持下载
// 4、获取下载文件的输入流 此处要写真实的下载文件路径
FileInputStream in = new FileInputStream(realPath);
// 5、创建缓冲区
int len;
byte[] bytes = new byte[1024];
// 6、获取输出流
ServletOutputStream out = resp.getOutputStream();
// 7、使用输出流将数据写出到客户端
while((len=in.read(bytes))!=-1){
out.write(bytes,0,len);
}
in.close();
out.close();
}
注意
resp.setHeader("content-disposition", "attachment;filename=" + URLEncoder.encode(fileName,"utf-8"));
注意到第一个值项是attachment,这是真正的关键,设定了这个值,浏览器就会老老实实地显示另存为对话框,如果这个值设成inline,则无论怎样浏览器都会自动尝试用已知关联的程序打开文件。后面的编码是支持以中文命名的文件!!!
写完程序,一定要记得注册servlet,才能得到下载路径
3、登录重定向
前端代码:
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>登录</title>
</head>
<body>
<form action="${pageContext.request.contextPath}/login" method="get">
<input type="text" name="username">用户名 <br>
<input type="password" name="password">密码<<br>
<input type="submit" value="登录">
</form>
</body>
</html>
public class LoginDemo extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//得到前端参数 可以打印输出
String username = req.getParameter("username");
String password=req.getParameter("password");
System.out.println(username+":"+password);
//重定向到另外的页面
resp.sendRedirect("/r/suc.jsp");
}
<servlet>
<servlet-name>login</servlet-name>
<servlet-class>com.zhoudan.LoginDemo</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>login</servlet-name>
<url-pattern>/login</url-pattern>
</servlet-mapping>
servlet从前端获取路径,结合后台编写的程序,当点击登录时,则页面跳转到成功页面:
suc.jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<h1>恭喜,登录成功!!!</h1>
</head>
<body>
</body>
</html>
二、HttpServletRequest
获取前端参数,请求转发
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>登录</title>
</head>
<body>
<form action="${pageContext.request.contextPath}/login" method="get">
<input type="text" name="username">用户名 <br>
<input type="password" name="password">密码<<br>
<input type="checkbox" name="color" value="red">红色
<input type="checkbox" name="color"value="yellow">黄色
<input type="checkbox" name="color"value="blue">蓝色
<input type="submit" value="登录">
</form>
</body>
</html>
//得到前端参数 可以打印输出
String username = req.getParameter("username");
String password=req.getParameter("password");
String[] colors = req.getParameterValues("color");
System.out.println(Arrays.toString(colors));
System.out.println(username+":"+password);
//请求转发
req.getRequestDispatcher("/suc.jsp").forward(req,resp);
<servlet>
<servlet-name>login</servlet-name>
<servlet-class>com.zhoudan.LoginDemo2</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>login</servlet-name>
<url-pattern>/login</url-pattern>
</servlet-mapping>
结果如下,可以看出 url并没有发生变化!
上一篇: 利用servlet实现用户的登录
下一篇: javaweb实现登录(含数据库)
推荐阅读
-
HttpServletResponse乱码问题_动力节点Java学院整理
-
基于HttpServletResponse 相关常用方法的应用
-
基于HttpServletResponse 相关常用方法的应用
-
Servlet (HttpServletResponse)对象
-
JavaWeb-HttpServletResponse(一)
-
wicket获得原始的HttpServletRequest 和HttpServletResponse
-
javax.servlet.http.HttpServletResponse 得到 status_code
-
MyEclipse开发项目时遇到HttpServletResponse报红叉怎么办?
-
03 HttpServletRequest_HttpServletResponse
-
(JavaWeb)HttpServletResponse和HttpServletRequest