• tomcat的request和response小案例


    1.传统方式读取文件

    @Test
        public void test() throws IOException {
            //创建输入流,关联文件
            InputStream is = new FileInputStream("src/demo.properties");
            Properties pro = new Properties();
            //加载到对象
            pro.load(is);
            //根据key拿到value
            String usernmae = pro.getProperty("username");
            String password = pro.getProperty("passwrod");
        }

    2.使用getRequestAsStream

    public class ServletContext1 extends HttpServlet {
        private static final long serialVersionUID = 1L;
        protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
            //ServletContext对象
            ServletContext context = this.getServletContext();
            
            InputStream is = context.getResourceAsStream("/WEB-INF/classes/demo.properties");
            
            Properties pro = new Properties();
            
            pro.load(is);
            
            pro.getProperty("usernmae");
            
            pro.getProperty("password");
        }
        protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
            doGet(request, response);
        }
    
    }

    3.使用getRealPath读取文件

    //获得ServletContext
            ServletContext context = this.getServletContext();
            //获得文件的绝对磁盘路径
            String realPath = context.getRealPath("/WEB-INF/classes/demo.properties");

    4.ServletContext作为域对象保存数据

      

    整个web目录,而且是全局对象
    服务器启动的时候,服务器为每个web项目创建一个单独的ServletContext对象
    服务器关闭的时候销毁

    5.下载文件的小案例

    分析:
    超链接下载,直接将文件的路径写到超链接的href中,前提是文件类型浏览器不支持
    手动编写代码的方式完成文件的下载
    设置两个头和一个流:
    Content-Type:文件的MIME类型
    Content-Disposition:以下载的方式打开文件
    InputStream:文件的输入流
    代码:

        private static final long serialVersionUID = 1L;
        protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
            //获取在html中的href中传入过来一个filename
            String filename = request.getParameter("filename");
            //设置下载方式
            String type = this.getServletContext().getMimeType(filename);
            response.setHeader("Content-type", type);
            response.setHeader("Content-Disposition", "attachment;filename="+filename);
            //得到文件的绝对路径
            String realPath = this.getServletContext().getRealPath("/download/"+filename);
            //设置流
            InputStream is = new FileInputStream(realPath);
            //获得相应的输出流
            OutputStream os = response.getOutputStream();
            int len = 0;
            byte [] arr = new byte[1024];
            while((len = is.read(arr)) != -1) {
                os.write(arr, 0, len);
            }
            is.close();
        }
        protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
            doGet(request, response);
        }

    6.中文乱码解决问题

    IE浏览器下载中文文件的时候采用的URL的编码
    firefox浏览器下载中文文件的时候采用的是Base64的编码
    1:根据浏览器的类型处理中文乱码问题:

    String filename = request.getParameter("filename");
            //获得浏览器类型
            String agent = request.getHeader("User-Agent");
            //如果是火狐
            if(agent.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);
            }

    2:post方式解决中文乱码问题:
    Request.setCharacterEncoding(“UTF-8”);
    3.get方式解决中文乱码问题
    New String(“name”.getBytes(“IOS-8859-1”),”UTF-8)”;
    4.接收的参数解决中文乱码问题:
    New String(“name”.getBytes(“IOS-8859-1”),”UTF-8)”;
    5.输出中文乱码问题
    字节流
    设置浏览器默认打开的编码:
    resposne.setHeader(“Content-Type”,”text/html;charset=UTF-8”);
    设置中文字节取出的时候的编码
    luanma.getBytes("utf-8");
    字符流
    设置浏览器默认打开的编码:
    resposne.setHeader(“Content-Type”,”text/html;charset=UTF-8”);
    设置response的缓冲区编码:
    response.setCharacterEncoding(“UTF-8”);

    7.Request作为域对象存取数据

      

    setAttribute和getAttribute
    作用范围:
    就是一次请求的范围
    创建和销毁:
    创建:客户端向服务器发送了一次请求以后,服务器就会创建一个request的对象
    销毁:当服务器对这次请求作出了响应之后


    8.转发和重定向的区别(redirect和forward)

    1.重定向地址栏会发生改变
    2.重定向两次请求两次响应,转发一次请求一次响应
    3.重定向需要加工程名,转发路径不需要
    4.重定向可以跳转的任意页面,转发只能在服务器内部

  • 相关阅读:
    C++中的 . 和 >
    JVM内存学习
    JAVA内部类
    2013年3月25日
    Dalvik虚拟机
    多线程访问数据库
    深入学习Android笔记(一)
    结对项目四则运算 “软件”之升级版
    分布式版本控制系统Git的安装与使用
    第一次作业准备
  • 原文地址:https://www.cnblogs.com/learnjfm/p/6910132.html
Copyright © 2020-2023  润新知