四大域九大内置对象

JSP九大隐式对象:


  request             HttpServletRequest
  response          HttpServletResponse
  session             HttpSession
  application        ServletcContext
  config                ServletConfig
  exception          (特殊情况下使用)
  page                 this(本JSP页面)
  out                   JspWriter(带缓冲的PrintWriter)
       pageContext       (使普通Java类可访问WEB资源,自定义 标签常用)


四个域对象:


  pageContext(称之为page域)
  request(称之为request域)
  session(称之为session域)
  servletContext(称之为application域)

ServletRequest

【使用ServletRequest接收参数】

* String getParameter(String name);     ---用于接收一个名称对应一个值的数据.

* String[] getParameterValues(String name);---用于接收一个名称对应多个值的数据.

* Map getParameterMap();                    ---用于接收表单中的所有的数据,Mapkey是表单提交的参数名称,Mapvalue是提交参数的值.

* Enumeration getParameterNames()           ---用于获取表单中提交的所有的参数的名称.

处理request接收参数的中文乱码的问题:

现在无论是GET还是POST提交中文的时候,都会出现乱码的问题.

解决:

  • POST的解决方案:

* POST的参数在请求体中,直接到达后台的Servlet.数据封装到Servlet中的request中.request也有一个缓冲区.request的缓冲区也是ISO-8859-1编码.

* 设置request的缓冲区的编码:

    * request.setCharacterEncoding(“UTF-8”);  --- 一定要在接收参数之前设置编码就OK.

* POST:request.setCharacterEncoding(“UTF-8”);         -- 在接收参数之前设置

 

  • GET的解决方案:

* 1.修改tomcat的字符集的编码.(不推荐)

* 2.使用URLEncoder和URLDecoder进行编码和解码的操作.

* 3.使用String的构造方法:

  * GET :new String(name.getBytes("ISO-8859-1"),"UTF-8");     -- 使用String的构造方法 (如果是Tomcat8就不需要处理GET请求乱码了)

 

【Request的API】

功能一:获得客户机相关的信息

  • 获得请求方式:

  • 获得请求的路径:

  • 获得客户机相关的信息:

  • 获得工程名:

功能二:获得从页面中提交的参数:

功能三:作为域对象存取数据:

转发:

request.getRequestDispatcher("").forward(request, response);

 

Request作为域对象存取数据:

使用request对象存取数据:

* setAttribute(String name,String value);

* Object getAttribute(String name);

request的作用范围:

* 作用范围就是一次请求的范围.

* 创建和销毁:

    * 创建:客户端向服务器发送了一次请求以后,服务器就会创建一个request的对象.

    * 销毁:当服务器对这次请求作出了响应之后.

 

 

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

* 1.重定向的地址栏会发生变化,转发的地址栏不变.

* 2.重定向两次请求两次响应,转发一次请求一次响应.

* 3.重定向路径需要加工程名,转发的路径不需要加工程名.

* 4.重定向可以跳转到任意网站,转发只能在服务器内部进行转发.

request.getRequestDispatcher("apage.jsp").forward(request, response);//转发到apage.jsp

response.sendRedirect("apage.jsp");//重定向到apage.jsp

或者:

            response.setStatus(302);
            response.setHeader("Refresh", "5;url=/day09_web/CountServlet"); // 可是设置时间多久跳转
            //response.setHeader("Location", "/day09_web/CountServlet");// 不可以设置时间

             重定向简化的写法:

             response.sendRedirect( "/day09_web/CountServlet");

 

 

  • 在jsp页面中你也会看到通过下面的方式实现转发:

<jsp:forward page="apage.jsp" />  //jsp页面中转发

  • 在jsp页面实现重定向

<html>
<head>
<meta charset="UTF-8">
<meta http-equiv="Refresh" content = "5;url=/day09_web/demo_03-login/index.html"/>
<title>Insert title here</title>
<script type = "text/javascript">
    var time = 5;
    
window.onload = function(){
        setInterval('changeTime()',1000);
    }

    function changeTime(){
        time--;
        document.getElementById("s1").innerHTML = time
    }

</script>
</head>
<body>
    <h1>登录成功!!!!</h1>
    <h2>页面将在<span id = "s1">5</span>秒后跳转</h2>
</body>
</html>

 

           

           


HttpServletResponse(文件下载)

【Response的概述】

  • Response:代表响应的对象.从服务器向浏览器输出内容.

【Response的常用的API】

  • 响应行:

* 设置状态码.

  • 响应头:

* 针对一个key对应多个value的头信息.

* 针对一个key对应一个value的头信息.

  • 响应体

【文件下载的方式】

  • 一种:超链接下载.直接将文件的路径写到超链接的href中.---前提:文件类型,浏览器不支持.
  • 二种:手动编写代码的方式完成文件的下载.

* 设置两个头和一个流:

    * Content-Type           :文件的MIME的类型.

    * Content-Disposition    :以下载的形式打开文件.

    * InputStream            :文件的输入流.

如: 

        // 1.接收参数

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

        // 2.完成文件下载:

        // 2.1设置Content-Type头

        String type = this.getServletContext().getMimeType(filename);

        response.setHeader("Content-Type", type);

        // 2.2设置Content-Disposition头

        response.setHeader("Content-Disposition", "attachment;filename="+filename);

        // 2.3设置文件的InputStream.

        String realPath = this.getServletContext().getRealPath("/download/"+filename);

        InputStream is = new FileInputStream(realPath);

        // 获得response的输出流:

        OutputStream os = response.getOutputStream();

        int len = 0;

        byte[] b = new byte[1024];

        while((len = is.read(b))!= -1){

            os.write(b, 0, len);

        }

        is.close();

 

中文文件的下载:

  • IE浏览器下载中文文件的时候采用的URL的编码.
  • Firefox浏览器下载中文文件的时候采用的是Base64的编码.

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

        // 1.接收参数

        String filename = new String(request.getParameter("filename").getBytes("ISO-8859-1"),"UTF-8");

        System.out.println(filename);

        // 2.完成文件下载:

        // 2.1设置Content-Type头

        String type = this.getServletContext().getMimeType(filename);

        response.setHeader("Content-Type", type);

        // 2.3设置文件的InputStream.

        String realPath = this.getServletContext().getRealPath("/download/"+filename);

       

        // 根据浏览器的类型处理中文文件的乱码问题:

        String agent = request.getHeader("User-Agent");

        System.out.println(agent);

        if(agent.contains("Firefox")){

            filename = base64EncodeFileName(filename);

        }else{

            filename = URLEncoder.encode(filename,"UTF-8");

        }

        // 2.2设置Content-Disposition头

        response.setHeader("Content-Disposition", "attachment;filename="+filename);

       

        InputStream is = new FileInputStream(realPath);

        // 获得response的输出流:

        OutputStream os = response.getOutputStream();

        int len = 0;

        byte[] b = new byte[1024];

        while((len = is.read(b))!= -1){

            os.write(b, 0, len);

        }

        is.close();

    }

    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);

        }

    }

response输出响应内容的方法:

 

向页面响应的方法:

* getOutputStream();   //字节流

* getWriter();                //字符流

* 这两个方法是互斥的.

    * 做出响应的时候只能使用其中的一种流响应.

 

* 输出中文乱码的处理:

    * 字节流: response.getOutputStream().write("".getByte())

        * 设置浏览器默认打开的编码:

            * resposne.setHeader(“Content-Type”,”text/html;charset=UTF-8”);

        * 设置中文字节取出的时候编码.

            * “中文”.getBytes(“UTF-8”);

    * 字符流: response.getWriter().println("")

        * 设置浏览器打开的时候的编码

            * resposne.setHeader(“Content-Type”,”text/html;charset=UTF-8”);

        * 设置response的缓冲区的编码

            * response.setCharacterEncoding(“UTF-8”);

         **简化的写法:同时设置浏览器和response缓冲区:

        ***** 简化的写法:response.setContentType(“text/html;charset=UTF-8”);


 HttpSession

session何时创建和销毁?作用范围:

* 创建:服务器端第一次调用getSession()创建session.

* 销毁:三种情况销毁session:

    * 1.session过期. 默认过期时间为30分钟.

    * 2.非正常关闭服务器.如果正常关闭session序列化到硬盘.目录:apache-tomcat-7.0.69\work\Catalina\localhost\day11_web

    * 3.手动调用session.invalidate();

* 作用范围:多次请求.(一次会话)

 

 

 

ServletContext

ServletContext对象存取数据,存的数据都是有一定的作用的范围的.这种对象称为是域对象.

ServletContext的作用:

* 1.用来获得全局初始化参数.

如:

<!-- Servlet全局初始化参数 在所有的servlet中使用ServletContext可以获取 -->
  <context-param>
      <param-name>username</param-name>
      <param-value>root2</param-value>
  </context-param>
  <context-param>
      <param-name>password</param-name>
      <param-value>654321</param-value>
  </context-param>

 

* 2.用来获得文件的MIME的类型.

使用ServletContext对象读取WEB项目下的文件

* InputStream getResourceAsStream(String path); --- 根据提供路径读取文件返回一个文件的输入流.

* String getRealPath(String path); --- 返回一个路径的磁盘绝对路径.

// getResourceAsStream:

        ServletContext context = this.getServletContext();

        InputStream is = context.getResourceAsStream("/WEB-INF/classes/db.properties");

        Properties properties = new Properties();

        properties.load(is);

 

// getRealPath

        ServletContext context = this.getServletContext();

        String realPath = context.getRealPath("/WEB-INF/classes/db.properties");

        // 获得该文件的磁盘绝对路径.

        System.out.println(realPath);

        InputStream is = new FileInputStream(realPath);

        Properties properties = new Properties();

// 使用类的加载器来读取文件.(扩展)

        // 类的加载器用来加载class文件,将class文件加载到内存.

        InputStream is = ReadFileUtils.class.getClassLoader().getResourceAsStream("db.properties");

        Properties properties = new Properties();

        properties.load(is);

 

获得文件的MIME的类型】

* 获得文件的MIME的类型.

代码实现:

    /* 获得文件的MIME的类型 */

    private void test2() {

        String type = this.getServletContext().getMimeType("1.html");

        System.out.println(type);

    }

* 3.作为域对象存取数据.

ServletContext是一个域对象.

    * 作用范围:整个web工程.

    * 创建:服务器启动的时候,tomcat服务器为每个web项目创建一个单独ServletContext对象.

    * 销毁:服务器关闭的时候,或者项目从服务器中移除的时候.

* 用来存取数据:

* 用来向ServletContext中存入数据.

* 用来从ServletContext中获取数据.

* 用来从ServletContext中移除数据.

 

ServletConfig

ServletConfig:了解.获得Servlet的配置信息.就是web.xml中某个servlet中的初始化参数

如:

 

* String getServletName();      ---获得Servlet在web.xml中配置的name的值.

* String getInitParameter(String name); ---获得Servlet的初始化参数的.

* Enumeration getInitParameterNames();      ---获得所有Servlet的初始化参数的名称.

  • 6
    点赞
  • 30
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值