美文网首页
HttpServletResponse和HttpServletR

HttpServletResponse和HttpServletR

作者: 达摩君 | 来源:发表于2017-10-26 23:47 被阅读202次

Web服务器收到客户端的http请求,会针对每一次请求,分别创建一个用于代表请求的request对象、和代表响应的response对象。

HttpServletResponse

1、响应行 HTTP/1.1 200 OK

setStatus(int sc) 设置响应状态码

2、响应头
  • sendRedirect(String location) 请求重定向
//        //告诉浏览器要重新定向新的资源
//        response.setStatus(302);
//        //告诉浏览器要去访问那个url
//        response.setHeader("location","/demo4");
        
        response.sendRedirect("/demo4");
  • setHeader(String name, String value) 设置响应头信息
//告知浏览器使用什么码表
response.setHeader("content-type", "text/html;charset=UTF-8");
//告知客户端不缓存
response.setHeader("pragma", "no-cache");
response.setHeader("cache-control", "no-cache");
response.setDateHeader("expires", 0);

Referesh刷新

response.setIntHeader("refresh",1); //1秒刷一次
//3秒后跳转
 response.setHeader("refresh","3;url=/demo");
3、响应正文(主体)
  • getWrite(); 字符输出流
  • getOutputStream(); 字节输出流
  • setCharacterEncoding(String charset) 告知服务器使用什么编码
  • setContentType(String type)
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
         /*
        response.setHeader("content-type","text/html;charset=utf-8");
        //告知服务器使用什么编
        response.setCharacterEncoding("utf-8");*/
         //可替代上面方法
        response.setContentType("text/html;charset=GBK");
        PrintWriter out = response.getWriter();
        out.write("hello world 你好啊");
    }
-----------------------
//下载
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        //通过路径得到一个输入流
        String path = this.getServletContext().getRealPath("/WEB-INF/classes/haha.jpeg");
        FileInputStream fis = new FileInputStream(path);
        //创建字节输出流
        ServletOutputStream sos = response.getOutputStream();

        String filename = path.substring(path.lastIndexOf("/") + 1);
        filename = URLEncoder.encode(filename,"utf-8");

        response.setHeader("content-disposition","attachment;filename="+filename);
        response.setHeader("content-type","image/jpeg");

        //执行输出操作
        int len = 1;
        byte[] b = new  byte[1024];
        while ((len = fis.read(b)) != -1) {
             sos.write(b,0,len);
        }
    }
例子:验证码
@WebServlet(name = "ServletDemo1", urlPatterns = "/demo1")
public class ServletDemo1 extends HttpServlet {
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {


    }

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//第三方
        ValidateCode vc = new ValidateCode(110, 25, 4, 9);
        vc.write(response.getOutputStream());
        System.out.println("1111111");
    }

    private void text1(HttpServletResponse response) throws IOException {
        int width = 110;
        int height = 25;
        //在内存中创建一个内存
        BufferedImage img = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);

        Graphics g = img.getGraphics();

        g.setColor(Color.PINK);
        g.fillRect(1,1,width - 2, height - 2);

        g.setColor(Color.RED);
        g.drawRect(0,0,width - 1,height -1);

        g.setFont(new Font("宋体",Font.BOLD|Font.ITALIC,15));
        g.setColor(Color.BLUE);

        Random r = new Random();
        for (int i = 0;i < 4;i++){

            g.drawString(r.nextInt(10) + "",20 * (i + 1),20);
        }

        g.setColor(Color.DARK_GRAY);
        for (int i = 0;i < 9; i++) {
            g.drawLine(r.nextInt(width),r.nextInt(height),r.nextInt(width),r.nextInt(height));
        }

        //将图片元素以流的方式输出客户端
        ImageIO.write(img,"jpg",response.getOutputStream());
    }
}
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>登录</title>

    <script type="text/javascript">
        function changCode() {
            var img = document.getElementById("img");
            img.src = "/servlet/demo1?time=" + new Date().getTime();
        }

    </script>

</head>
<body>
    <form action="#" method="post">
        用户名:<input type="text" name="username"><br>
        密码:<input type="password" name="pwd"><br>
        验证码:<input type="text" name="code">
        ![](/servlet/demo1)<a href="javascript:changCode()">看不清换一张</a><br>
        <input type="submit" value="登录"><br>
    </form>

</body>
</html>

HttpServletRequest

1、请求行

Get http://localhost:8080/day09/servlet/req1?username=zs http/1.1
getMethod(); 获得请求方式
getRequestURL();返回客户端发出请求时的完整URL。
getRequestURI(); 返回请求行中的资源名部分。
getContextPath(); 当前应用的虚拟目录 /day09_01_request
getQueryString() ; 返回请求行中的参数部分。

2、请求消息头

String getHeader(String name) 根据头名称得到头信息值
Enumeration getHeaderNames() 得到所有头信息name
Enumeration getHeaders(String name) 根据头名称得到相同名称头信息值

3、请求正文

与获取表单数据相关的方法
getParameter(name) 根据表单中name属性的名,获取value属性的值方法
getParameterValues(String name)专业为复选框取取提供的方法
getParameterNames() 得到表单提交的所有name的方法
getParameterMap 到表单提交的所有值的方法 //做框架用,非常实用
getInputStream 以字节流的方式得到所有表单数据

protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

        request.setCharacterEncoding("utf-8");

        String username = request.getParameter("username");
        String psd = request.getParameter("psd");
        String sex = request.getParameter("sex");

        String[] hobbys = request.getParameterValues("hobby");
        String city = request.getParameter("city");

        System.out.println(username);
        System.out.println(psd);
        System.out.println(sex);
        System.out.println(city);
        for (int i = 0; hobbys!=null && i < hobbys.length; i ++) {
            System.out.println(hobbys[i]);
        }
    }
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>

    <form action="/demo5" method="post">
        用户名:<input type="text" name="username"><br>
        密码;<input type="password" name="psd"><br>
        性别:<input type="radio" name="sex" value="男" checked="checked">男
            <input type="radio" name="sex" value="女">女<br>
        爱好:<input type="checkbox" name="hobby" value="basketball">篮球
            <input type="checkbox" name="hobby" value="football">足球
             <input type="checkbox" name="hobby" value="coding">编码<br>
        所在城市:
        <select name="city">
            <option>--- 请选择 -----</option>
            <option value="bj">北京</option>
            <option value="sh">上海</option>
            <option value="zj">浙江</option>
        </select>
        <br>
        <input type="submit" value="注册">
    </form>
</body>
</html>
与操作非表单数据相关的方法(request也是一个域对象)

*** void setAttribute(String name, Object value);
*** Object getAttribute(String name);
Void removeAttribute(String name);

与请求转发相关的方法

//得到请求转发或请求包含的协助对象
RequestDispatcher getRequestDispatcher(String path)
forward(ServletRequest request, ServletResponse response) //转发的方法
include(ServletRequest request, ServletResponse response) //请求包含

与请求编码相关的方法

//解决post方式编码
*****request.setCharacterEncoding("UTF-8"); //告诉服务器客户端什么编码,只能处理post请求方式

//解决get方式编码
String name = new String(name.getBytes(“iso-8859-1”),”UTF-8”);

相关文章

网友评论

      本文标题:HttpServletResponse和HttpServletR

      本文链接:https://www.haomeiwen.com/subject/oakkpxtx.html