A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© ...句号 初级黑马   /  2018-2-4 17:19  /  986 人查看  /  0 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 ...句号 于 2018-2-4 17:21 编辑

Tomcat笔记
WEB中路径的编写:
        1.浏览器端如果想直接访问Servlet的话
                路径的编写:使用:  /工程名/servlet的虚拟路径
        2.浏览器如果想要直接访问.html.jsp或者其他静态资源
                路径的编写:使用: /工程名/资源所在的路径
        3.servlet A想要跳转其他servlet B
                1.重定向
                        路径的编写:使用: /工程名/B对应的虚拟路径
                2.请求转发
                        路径的编写:使用: /B对应的虚拟路径
        4.servlet A想要跳转到 .html或者.jsp
                1.重定向
                        路径的编写:使用: /工程名/.jsp或者.html所在的子路径
                2.请求转发
                        路径的编写:使用: /.jsp或者.html所在的子路径
        5.servlet想要读取项目下文件
                1.需要用ServletContext的对象来读取
                        1.ServletContext.getResouceAsStream("资源路径(不用再加工程名)")
                        2.ServletContext.getRealPath("资源路径(不用再加工程名)")
服务器向浏览器输出中文的时候乱码解决???
                设置响应头
                        响应头的编码是固定的ISO-8859-1,所有我们需要给浏览器能看懂的东西
                        if(header.contains("Firefox")){
                                filename = base64EncodeFileName(filename);
                        }else{
                                filename = URLEncoder.encode(filename, "UTF-8");
                        }
                        public static String base64EncodeFileName(String fileName) {
                                BASE64Encoder base64Encoder = new BASE64Encoder();
                                try {
                                        return "=?UTF-8?B?"
                                                        + new String(base64Encoder.encode(fileName
                                                                        .getBytes("UTF-8"))) + "?=";
                                } catch (UnsupportedEncodingException e) {
                                        e.printStackTrace();
                                        throw new RuntimeException(e);
                                }
                        }
                设置响应体
                        getOutputStream
                                 * 字节流:
                                        * 设置浏览器默认打开的编码:
                                                * resposne.setHeader(“Content-Type”,”text/html;charset=UTF-8”);
                                        * 设置中文字节取出的时候编码.
                                                * “中文”.getBytes(“UTF-8”);
                        getWriter
                         * 字符流:
                                * 设置浏览器打开的时候的编码
                                        * resposne.setHeader(“Content-Type”,”text/html;charset=UTF-8”);
                                * 设置response的缓冲区的编码
                                        * response.setCharacterEncoding(“UTF-8”);
                        (重点记)setContextType("text/html;charset=UTF-8")---> setHeader("Context-Type","text/html;
重定向和转发的区别:(redirect和forward的区别)  
        重定向举例:response.sendRedirect(request.getContextPath()+"/demo1-download/login.htm");
        转发举例:request.getRequestDispatcher("/DispatherServlet1").forward(request, response);
        * 1.重定向的地址栏会发生变化,转发的地址栏不变.
        * 2.重定向两次请求两次响应,转发一次请求一次响应.
        * 3.重定向路径需要加工程名,转发的路径不需要加工程名.
        * 4.重定向可以跳转到任意网站,转发只能在服务器内部进行转发.
案例:登陆成功后,完成文件的下载
        Response的概述
                Response:代表响应的对象,从服务器向浏览器输出内容
        常用的方法
                响应行:
                        设置状态码:
                                void setStatus(int sc)
                响应头:
                        response.setContentType("text/html;charset=UTF-8");解决页面输出中文的乱码问题
                        addHeader(String name,String value);                --- 针对一个key对应多个value的响应头.                                       
                                addDateHeader(String name,long date);
                                addIntHeader(String name,int value);
                        * setHeader(String name,String value);                --- 针对一个key对应一个value的响应头.
                                例如://跳转到主页
                                        response.setHeader("Refresh", "3;url=/day12/WEB01/index.html")
                                * setDateHeader(String name,long date);
                                * setIntHeader(String name,int value);
                        例如:头信息: xxx:aaa
                                * addHeader(“xxx”,”bbb”);                -->xxx:aaa,bbb
                                * setHeader(“xxx”,”bbb”);                -->xxx:bbb
                响应体:
                        ServletOutputStream getOutputStream() 字节流
                        PrintWriter getWriter() 字符流                        
文件下载的方式
        第一种方式: 超链接下载,直接将文件的路径写到超链接的href中,---前提:文件类型,浏览器不支持
        第二种方式: 手动编写代码的方式完成文件下载
                需要设置两个头和一个流
                        Content-Type:文件的 MIME的类型
                        Content-Disposition:以下载的形式打开文件
                        InputStream :文件的输入流                        
                        (请求头里的)User-Agent  :代表浏览器的类型. --- 文件下载:下载中文文件:IE使用URLEncodor进行编码,而Firefox使用Base64编码.
Request的概述
        Request代表用户的请求.        
Request的API(方法)        
        功能一:获得客户机相关的信息
                获得请求方式:
                        String getMethod()
                获得请求的路径:
                        String getRequestURI()
                        StringBuffer getRequestURL()
                        代码:
                        String url = request.getRequestURL().toString();获得请求的URL:http://localhost:8080/day13/RequestServlet
                        String uri = request.getRequestURI();获得请求的URI:/day13/RequestServlet
                获得客户机IP地址:
                        String getRemoteAddr()
                获得工程名:
                        String getContextPath()
        功能二:获得从页面中提交的参数:
                String getParameter(String name): 用于接收一个名称对应一个值的数据
                String[] getParameterValues(String name) :用于接收一个名称对应多个值得数据
                Map getParameterMap(): 用于接收表单中的所有的数据,Map的key是表单提交的参数名称,Map的value是提交参数的值
        功能三:作为域对象存取数据:
                void removeAttribute(String name)
                void setAttribute(String name,Object 0) 存数据
                Object getAttribute(String name) 获取数据
Request作为域对象存取数据:
        使用request对象存取数据:
                * setAttribute(String name,String value);
                * Object getAttribute(String name);
        request的作用范围:
                * 作用范围就是一次请求的范围.
                * 创建和销毁:
                        * 创建:客户端向服务器发送了一次请求以后,服务器就会创建一个request的对象.
                        * 销毁:当服务器对这次请求作出了响应之后.
ServletContext的作用:
        1.用来获取全局初始化参数
                方法:
                        String getInitParameter(String name)
                                例如:        <context-param>
                                                        <param-name>username</param-name>
                                                        <param-value>root</param-value>
                                                  </context-param>
                                                 String username = this.getServletContext().getInitParameter("username");获取结果是root
                        Enumeration getInitParameterNames()
                                例如:        <context-param>
                                                        <param-name>username</param-name>
                                                        <param-value>root</param-value>
                                                  </context-param>
                                                 String username = this.getServletContext().getInitParameter("username");获取结果是 username root  
        2.用来获得文件的MIME的类型
                方法:
                        String getMimeType(String file) 获得文件的MIME的类型(编写下载文件代码时使用)
        3.作为域对象存取数据
                ServletContext是一个域对象
                        作用范围:整个web工程
                        创建:服务器启动的时候,Tomcat服务器为每个web项目创建一个单独ServletContext对象
                        销毁:服务器关闭的时候,或者项目从服务器中移除的时候
        4.用来读取web项目下的文件.
                使用ServletContext对象读取WEB项目下的文件
                         InputStream getResourceAsStream(String path); --- 根据提供路径读取文件返回一个文件的输入流.
                         String getRealPath(String path); --- 返回一个路径的磁盘绝对路径.                                

0 个回复

您需要登录后才可以回帖 登录 | 加入黑马