欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

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并没有发生变化!
javaweb--HttpServletRequest/HttpServletResponse

相关标签: javaweb