首页 > 代码库 > Response&&Request之再体验

Response&&Request之再体验

1、Path总结【★★★★】
    1、java项目
        1 File file = new File("");
            * 使用java命令,输出路径是,当前java命令停留的盘符
                * F:\study\JAVA开发学习路线\后台----------------技术\JAVAWEB\day03\bin
            * 使用myeclipse或eclipse运行时
                * F:\study\JAVA开发学习路线\后台----------------技术\JAVAWEB\day03
        2 File file = new File("/");
            * 获得当前盘符
                * F:\
   2、web项目
        1、通过servletcontext获得文件
            * 获得实际路径
                * sc.getRealPath("/1.html");
            * 获得URL
                * URL url = sc.getResource("/1.html");
            * 获得流【**】
                * InputStream is = sc.getResourceAsStream("/1.html");
                * WebRoot/page/abc/2.html  -- path:/page/abc/2.html
      3、web的相对路径
            * 前提:相对当前的页面1.html
            * 使用分类:
                1、abc:与当前页面同级的目录或servlet的名称
                    * <a href="http://www.mamicode.com/c/c.html">c.html</a><br>
                2、/abc:相对于web站点,%tomcat%/webapps/
                    * <a href="http://www.mamicode.com/day06_web/b/c/c.html">c.html</a><br>
                3、./abc:当前目录,与第一种情况相同
                    * <a href="http://www.mamicode.com/c/c.html">c.html</a><br>
                4、../abc:上一次目录
                    * <a href="http://www.mamicode.com/b/c/c.html">c.html</a><br>
                总结:操作过程(端口为80)
                    当前页面:http://localhost/day06_web/b/b.html
                    目标页面:http://localhost/day06_web/b/c/c.html
                    / -- webapps  -- http://localhost(端口为80)

2、ServletContext
    * 对当前web项目上下文的描述(对当前web项目所有内容的描述),有tomcat在启动时创建,tomcat关闭时销毁。
        * servlet -- > init(ServletConfig)  --> config.getServletContext();
        * 当前servlet的所在的项目
    * tomcat,为每一个web项目单独创建一个区域,用来管理整个项目。此区域成为ServletContext
    * 管理当前项目【*****】
        * 获得实际路径,要求必须/开头(如果不加/直接追加到后面、会出现404错误)

    *sc.getRealPath("");//这样的话是获得这个web应用的全路径

    *例如F:\Program Files\Apache Software Foundation\Tomcat 8.0\webapps\day03
            * sc.getRealPath("/1.html");
        * 操作数据
            * add set get remove delete
            * setAttribute/getAttribute/removeAttribute
            * ServletContext对象对所有的servlet共享数据
        * 给当前web项目配置内容【**】
            * 配置文件的位置:web.xml
            * 配置内容
                <context-param>
                    <param-name>username</param-name>
                    <param-value>root</param-value>
                </context-param>
            * 如何读取
                ServletContext sc = this.getServletContext();

     //不能像获取单个Servlet里面获取参数的方法来使用、因为是全局的、必须通过sc.getInitParameter("user")来读取
          // String user1 = this.getInitParameter("user");

       //获取所有
          Enumeration<String> names = sc.getInitParameterNames();
            while(names.hasMoreElements()){
                System.out.println(sc.getInitParameter(names.nextElement()));
          }
    * context root
        * 当前ServletContext所指web项目的根
            * tomcat --> webapps/webName/
            * myeclipse -->webName/WebRoot/

3、ServletResponse
    * 服务器对浏览器做出的响应,将需要发送给浏览器的所有数据全部存放在此对象上。
    * 发送数据,使用流操作,将所需要的数据,存放在指定的流中,数据将显示到浏览器中
        * 字符流
            * response.getWriter();
        * 字节流
            * response.getOutputStream();
        * 当使用getOutputStream时,不能使用getWriter
            * getOutputStream() has already been called for this response
        * 当使用getWriter时,不能使用getOutputStream
            * getWriter() has already been called for this response
        * 总结:两个流同时只能使用一个
    * 字节流:getOutputStream,一般在程序中使用具有拷贝功能等
        * 发送中文
            * 不能发送
                * out.print(data); 不能发送中文数据
                * 异常信息:java.io.CharConversionException Not an ISO 8859-1 character: 中
            * 可以发送
                * out.write(data.getBytes("UTF-8"));
    * 字符流:getWriter,一般在程序中发送数据内容
        * 发送中文
            * out.println("中文");
    * 乱码【****】
        * response.setContentType("text/html;charset=utf-8");
        * 通知tomcat和浏览器发送数据的编码
        * 注意:
            * 设置编码时,必须放置在需要输出语句之前,建议放置在doGet或doPost第一行
        * 实例:cn.itcast.response.FormServlet

         
4、ServletRequest
    * 浏览器向服务器的请求(浏览器将数据发送给服务器时,数据存放的地方)
    * 请求方式:GET和POST
        * GET:发送的数据,追加在请求的URL之上
        * POST:发送的数据在HTTP请求体中
    * 浏览器发送数据
        * 表单form,
            * method属性:指定的请求方式
            * action属性:接收数据的程序路径
    * 服务器获得浏览器发送的数据
        * 获得单个数据
            * request.getParameter("username");
        * 获得一组数据
            * request.getParameterValues("love");
        * 处理中文乱码
            * request.setCharacterEncoding("UTF-8");
            * 注意:
                * 此方法只对POST请求有效,GET需要单独处理
                * 需要放置在获得数据之前,建议放在第一个行

    *  //针对一般的get方式请求、乱码采用以下方式解决
            //-----1方案一----------
            String str = new String(username.getBytes("ISO-8859-1"),"UTF-8");
                      
            //-----2方案--------
            //获得用户get请求提交的数据、地址栏上所有的参数(只是get方式才有效)
            String query = request.getQueryString();
            //解码(之所以能解码是没有经过http处理成ISO-8859-1的)
            String str = URLDecoder.decode(query, "UTF-8");
       

Response&&Request之再体验