JSP相关技术 二、JSP9个内置对象

来源:互联网 发布:java int转char数组 编辑:程序博客网 时间:2024/05/19 13:17
一、JSP9个内置对象(都是servletApi接口的实例
     编写jsp时要站在servlet和jsp两个角度看问题,查看jsp对应的servlet可以发现jsp9个内置对象,要么是_jspServlet的形参,要么是_jspServlet的局部变量,所以可以在jsp页面内直接使用这些对象不要在jsp中声明这些变量,否则系统将提示找不到这些方法。
    
     1、B/S模式用户浏览器请求客户端步骤:
          1.启动单独线程
          2.使用IO流读取用户请求的二进制流数据
          3.从请求数据中解析参数
          4.处理用户请求
          5.生产响应数据
          6.使用IO流想客户端发送请求数据
          1.2.6是通用的,Web服务器调用servlet的_jspSerices方法来完成3.4.5,而Web服务器则负责完成多线程、网络通信等底层功能
    为了解决jsp和servlet之间的通信服务器提供了4个类似Map的结构:     
          1.page:作用本个页面
          2.request:作用本次请求
          3.session:作用本次会话
          4.application(即ServletContext实例):作用本应用 ,用于保存Web应用的状态。

        1、application:作用在整个web应用中 
//XML中配置参数
<context-param>
    <param-name>URL</param-name>
    <param-value>jdbc:mysql://localhost:3307/webdemo</param-value>
  </context-param>
  <context-param>
    <param-name>driver</param-name>
    <param-value>com.mysql.jdbc.Driver</param-value>
  </context-param>

//在jsp中获取:
request.getInitParameter("URL");

//在jsp和servlet之间通信
application.setAttribute("name","value");
application.getAttribute("name");
//servlet中 application对象为servletConfig实例
ServletContext sc = getServletConfig().getServletContext();
sc.getAttribute("name");
        
     2、config:jsp的配置信息,但是jsp一般无需配置,servlet可以在xml中配置,作用比较大

 //将configTest.jsp配置成config Servlet,并可以在configTest.jsp获取对应参数
<servlet>
    <servlet-name>config</servlet-name>
    <jsp-file>/configTest.jsp</jsp-file>
    <init-param>
        <param-name>age</param-name>
        <param-value>20</param-value>
    </init-param>
    <init-param>
        <param-name>name</param-name>
        <param-value>joy</param-value>
    </init-param>
  </servlet>
  <servlet-mapping>
    <servlet-name>config</servlet-name>
    <url-pattern>/config</url-pattern>
  </servlet-mapping>

//configTest.jsp
    内置对象age的值:<%=config.getInitParameter("age") %>
    内置对象name的值:<%=config.getInitParameter("name") %>

     3、Execption对象只在异常处理页面中才有效

     4、out对象(是一个页面输出流,通常在页面上输出变量和常量)是jspWriter实例

     5、pageContext(代表页面上下文,主要用于jsp之间的共享数据)
         1. pageContext是pageContext的实例,提供了如下两个方法来访问page、request、session、application范围的变量    
getAttribute(String name); //获取page范围内的name属性
getAttribute(String name,int scope); //获取page范围内的name属性
      scope可以对应四个值:PageContext.PAGE_SCOPE、PageContext.REQUEST_SCOPE、                                                                 PageContext.SESSION_SCOPE、PageContext.APPLICATION_SCOPE
提供了对应的set方法                               
          2.pageContext还可以用户获取其他内置对象:
                    ServletRequest getRequest():获取Request对象
                    ServletResponse getResponse():获取response对象
                    ServletConfig getServletConfig():获取config对象
                    ServletContext getServletContext(): 获取application对象
                    HttpSession getSession():获取session对象

     6、request对象
          1.获取请求头/请求参数
GET和POST区别
GET
POST
安全性
url后可以看到请求参数,不安全
参数放在请求头HTML HEADER中,相对安全
数据量
不大于2K
post请求参数不受限制,取决服务器的限制
method
默认或者get
指定post
          2.提交的表单:每个有name的属性对用一个请求参数,如果多个表单域有相同的 name,生成的请求参数值是一个数组
                                   同时可以设置表单域 disabled = "disabled"属性,使其不生成请求参数。
          3.执行forward或include
//作用和使用jsp的动作指令include和forward一样
request.getRequestDispatch("a.jsp").forward(request,response);
request.getRequestDispatch("a.jsp").include(request,response);
     
     7、response对象(用于服务器对客户端的响应)
          1.out对象是jspWriter的子类可以响应输出字符流内容,response一般用来响应非字符内容
          2.response可以用来重定向
response.sendRedirect("a.jsp");

转发forward
重定向redirect
执行forward依然是上一次请求
执行redirect生成第二次请求
所有原页面的请求参数、request范围内的属性全部存在
所有原页面的请求参数、request范围内的属性全部丢失
地址栏url不会变
重定向到目标url,相当于在地址栏输出url回车
          3.增加cookie
//添加cookie   
      //创建cookie对象 
     Cookie cookie = new Cookie("username","joy");
      //设置生存期限
     cookie.setMaxAge(24*3600);
     //向客户端增加cookie对象
     response.addCookie(cookie);

//读取cookie
    //获取本站上的所有cookie
        Cookie[] cookies = request.getCookies();
        //遍历客户端上的每个Cookie
        if (cookies.length > 0) {
            for (Cookie cookie: cookies) {
        //  if (!cookie.getName().equals("username")){
        //      out.println(cookie.getValue());
        //  }
            out.println("Cookie:" + cookie.getName() + "value:" + cookie.getValue() + "</br>");
            }
        }

     7、session对象(代表一次用户对话)       
//用于设置和过去session的方法
setAttribute(String name, Object value);
getAttribute(String name)
session里面的值Object必须是可序列化的,因为session保存在服务器硬盘
     
     8、session和cooke的区别
cookie 和session 的区别:
1、cookie数据存放在客户的浏览器上,session数据放在服务器上。
2、cookie不是很安全,别人可以分析存放在本地的COOKIE并进行COOKIE欺骗
   考虑到安全应当使用session。
3、session会在一定时间内保存在服务器上。当访问增多,会比较占用你服务器的性能
   考虑到减轻服务器性能方面,应当使用COOKIE。
4、单个cookie保存的数据不能超过4K,很多浏览器都限制一个站点最多保存20个cookie。
5、所以个人建议:
   将登陆信息等重要信息存放为SESSION
   其他信息如果需要保留,可以放在COOKIE中