HttpServletResponse和HttpServletResquest

HttpServletRequest

1、响应行 HTTP/1.1 200 OK

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

2、响应头

sendRedirect(String location) 请求重定向
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);

3、响应正文(主体)

getWrite(); 字符输出流
getOutputStream(); 字节输出流
setCharacterEncoding(String charset) 告知服务器使用什么编码
setContentType(String type);告知服务器使用的编码方式和告知客户端使用的解码方式

代码

public class ServletDemo1 extends HttpServlet {

    public void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {

        //服务器中默认的编码为ISO-8859-1,它不支持中文,tomcat规定的

    /*  //告诉服务器应用使用UTF-8解析文本
        response.setCharacterEncoding("UTF-8");
        //告诉客户端要使用什么编码
        response.setHeader("content-type", "text/html;charset=UTF-8");*/

        //告诉服务器应用使用UTF-8解析文本,告诉客户端要使用什么编码
        response.setContentType("text/html; charset=UTF-8");

        PrintWriter out = response.getWriter();//得到一个字符输出流
        out.write("你好!");//向客户端响应文本内容


    }

    public void doPost(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        doGet(request, response);
    }

下载图片的服务器代码

public class ServletDemo3 extends HttpServlet {

    public void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        //通过路径得到一个输入流
        String path = this.getServletContext().getRealPath("/WEB-INF/classes/美女.jpg");
        FileInputStream fis = new FileInputStream(path);
        //创建字节输出流
        ServletOutputStream sos = response.getOutputStream();

        //得到要下载的文件名
        String filename = path.substring(path.lastIndexOf("\\")+1);

        //设置文件名的编码
        filename = URLEncoder.encode(filename, "UTF-8");//将不安全的文件名改为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);
        }

        sos.close();
        fis.close();
    }

    public void doPost(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        doGet(request, response);
    }

}

请求转发

public class ServletDemo5 extends HttpServlet {
    public void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        System.out.println("A:我要借钱!");
        System.out.println("B:我不有,但是我可以告诉你谁有");
        /*//告诉客户端要重新定向新的资源
        response.setStatus(302);
        //告诉浏览器要去访问哪个URL
        response.setHeader("location", "/day09_00_HttpServletResponse/servlet/demo8");*/

        //请求重定向
        response.sendRedirect("/day09_00_HttpServletResponse/servlet/demo8");

        System.out.println("A: 我去了");

    }

    public void doPost(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        doGet(request, response);
    }
}

HttpServletRequest

1.请求行

Get http://localhost:8080/day09/servlet/req?username=zs
getMedthos(); 获取请求方式
getRequestURL();获取访问资源完整的URL();
getReuqestURI();获取访问资源名称部分
getCOntextPath();返回当前的目录(/day09)
getQueryString()返回当前的参数

2.请求头

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

3.获取表单相关的方法

getParameter(name):根据表单中的name属性获取value值
getParameterValues(String name) 为复选框准备的
getParameterMap()获取表达提交所有值的方法

4请求转发的方法:

void setAttribute(String name, String value);
Object getAttribute(String name)
void removeAttribute(String name)
RequestDispatcher getRequestDispatcher(String path)得到请求转发的协助对象
forward(ServletRequest request, ServletRequest response)
include(ServletRequest request, ServletResponse response)

6.与请求编码相关的方法

解决Post方式:
request.setCharacterEncoding(“UTF-8”);解决post的请求方式
解决get方式的编码
String name = new String(name.getBytes(“iso-8859-1”,”UTF-8”))

代码

  • 与请求消息行有关代码
public class ServletDemo1 extends HttpServlet {

    public void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
//      getMethod(); 获得请求方式
//      ***getRequestURL();返回客户端发出请求时的完整URL。
//      ***getRequestURI(); 返回请求行中的资源名部分。
//      *****getContextPath(); 当前应用的虚拟目录 /day09_01_HttpServletRequest
//      getQueryString() ; 返回请求行中的参数部分。

        System.out.println(request.getMethod());//  GET
        System.out.println(request.getRequestURL()); // http://localhost:8080/day09_01_HttpServletRequest/servlet/demo1
        System.out.println(request.getRequestURI()); //   /day09_01_HttpServletRequest/servlet/demo1
        System.out.println(request.getContextPath()); //  /day09_01_HttpServletRequest
        System.out.println(request.getQueryString()); //  username=tom
    }

    public void doPost(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        doGet(request, response);
    }

}
  • 与请求消息头有关代码
    public void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        //test1(request);
//      test2(request);
        //获得相关name的消息头
        Enumeration headers = request.getHeaders("accept-language");
        while(headers.hasMoreElements()){
            String e = (String) headers.nextElement();
            System.out.println(e+":"+request.getHeader(e));
        }
    }

    private void test2(HttpServletRequest request) {
        //获得所有请求消息头的name
        Enumeration names = request.getHeaderNames();

        while(names.hasMoreElements()){
            String e = (String) names.nextElement();
            System.out.println(e+":"+request.getHeader(e));
        }
    }

    private void test1(HttpServletRequest request) {
        //获得请求消息头的信息
        String header = request.getHeader("User-Agent");
        System.out.println(header);

        if(header.toLowerCase().contains("msie")){
            System.out.println("你使用的是IE浏览器");
        }else if(header.toLowerCase().contains("firefox")){
            System.out.println("你使用的是火狐浏览器");
        }else if(header.toLowerCase().contains("chrome")){
            System.out.println("你使用的是谷歌浏览器");
        }else{
            System.out.println("你使用的是其它浏览器");
        }
    }

    public void doPost(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        doGet(request, response);
    }

}
public class ServletDemo3 extends HttpServlet {

    public void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        //告诉服务器要使用什么编码,注:浏览器使用的是什么编码传过来的就是什么编码 
        request.setCharacterEncoding("UTF-8");//只能解决post方式的乱码

        test4(request);
    }

    private void test4(HttpServletRequest request) {
        try {
            User u = new User();
            System.out.println("封装数据前:"+u);

            BeanUtils.populate(u, request.getParameterMap());

            System.out.println("封装数据后:"+u);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    private void test3(HttpServletRequest request) {
        try {
            User u = new User();
            System.out.println("封装数据前:"+u);
            //获取表单数据
            Map<String,String[]> map = request.getParameterMap();

            for (Map.Entry<String, String[]> m : map.entrySet()) {
                String name = m.getKey();
                String[] value = m.getValue();

                //创建一属性描述器
                PropertyDescriptor pd = new PropertyDescriptor(name, User.class);
                //得到setter属性
                Method setter = pd.getWriteMethod();

                if(value.length==1){
                    setter.invoke(u, value[0]);//给一个值的变量赋值
                }else{
                    setter.invoke(u, (Object)value);//相关于给复选框赋值
                }
            }

            System.out.println("封装数据后:"+u);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    private void test2(HttpServletRequest request) {
        //获取所有的表单name的名子
        Enumeration names = request.getParameterNames();
        while(names.hasMoreElements()){
            String name = (String) names.nextElement();//得到每一个name名
            String[] values = request.getParameterValues(name);//根据name名,得到value值
            for (int i = 0;values!=null && i < values.length; i++) {
                System.out.println(name+"\t"+values[i]);
            }
        }
    }

    private void test1(HttpServletRequest request) throws UnsupportedEncodingException {
        //获取表单数据

        //根据表单中name属性的名,获取value属性的值方法 
        String userName = request.getParameter("userName");
        String pwd = request.getParameter("pwd");
        String sex = request.getParameter("sex");
        String[] hobbys = request.getParameterValues("hobby");

        String city = request.getParameter("city");

        userName = new String(userName.getBytes("iso-8859-1"),"UTF-8");
        System.out.println(userName);
        System.out.println(pwd);
        System.out.println(sex);

        for (int i = 0;hobbys!=null && i < hobbys.length; i++) {
            System.out.print(hobbys[i]+"\t");
        }
        System.out.println();

        System.out.println(city);
    }

    public void doPost(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        doGet(request, response);
    }

}
public class ServletDemo4 extends HttpServlet {

    public void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        request.setCharacterEncoding("UTF-8");
        //获取表单数据
        ServletInputStream sis = request.getInputStream();
        int len = 0;
        byte[] b = new byte[1024];
        while((len=sis.read(b))!=-1){
            //System.out.println(new String(new String(b,0,len).getBytes(),"utf-8"));
            System.out.println(new String(b, 0, len, "UTF-8"));
        }

        sis.close();
    }

    public void doPost(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        doGet(request, response);
    }

}
  • request1作为域对象
public class ServletDemo5 extends HttpServlet {

    public void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        request.setCharacterEncoding("UTF-8");
        response.setContentType("text/html;charset=UTF-8");

        String str = "aaaaa";

        System.out.println("A:我想办事");
        System.out.println("B:我办不了,但我可以找人帮你办");

        //将非表单的数据添加到request的域中
        request.setAttribute("s", str);
        //将请求转发到demo6中
        //request.getRequestDispatcher("/servlet/demo6").forward(request, response);
        //注:请求转发不能跳转到其它应用
        //request.getRequestDispatcher("http://www.baidu.com").forward(request, response);
        //使用重定向
        //response.sendRedirect(request.getContextPath()+"/servlet/demo6");
        //可以跳转到其它应用
        //response.sendRedirect("http://www.baidu.com");
        System.out.println("B:事办完了");

        //请求包含
        request.getRequestDispatcher("/servlet/demo6").include(request, response);
    }

    public void doPost(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        doGet(request, response);
    }

}
public class ServletDemo6 extends HttpServlet {

    public void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        response.setContentType("text/html;charset=UTF-8");
        System.out.println("这个事我能办");
        //将request对象中的移除
        //request.removeAttribute("s");
        //从request对象中获取s的值
        String s = (String) request.getAttribute("s");
        System.out.println(s);
    }

    public void doPost(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        doGet(request, response);
    }

}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值