zoukankan      html  css  js  c++  java
  • 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.重定向可以跳转的任意页面,转发只能在服务器内部

  • 相关阅读:
    hdu 1455 N个短木棒 拼成长度相等的几根长木棒 (DFS)
    hdu 1181 以b开头m结尾的咒语 (DFS)
    hdu 1258 从n个数中找和为t的组合 (DFS)
    hdu 4707 仓鼠 记录深度 (BFS)
    LightOJ 1140 How Many Zeroes? (数位DP)
    HDU 3709 Balanced Number (数位DP)
    HDU 3652 B-number (数位DP)
    HDU 5900 QSC and Master (区间DP)
    HDU 5901 Count primes (模板题)
    CodeForces 712C Memory and De-Evolution (贪心+暴力)
  • 原文地址:https://www.cnblogs.com/learnjfm/p/6910132.html
Copyright © 2011-2022 走看看