zoukankan      html  css  js  c++  java
  • 探索JSP中的 "9大内置对象!"

    1.什么是JSP内置对象?

    jsp内置对象就是Web容器创建的一组对象,我们都知道Tomcat可以看成是一种Web容器,所以我们可以知道所谓的内置对象Tomcat创建的,使用内置对象时可以不适用new关键字,

    直接使用即可.

    2.什么是内置对象?

    解析:就是Web容器创建的一组对象,当Tocmat启动时,这组对象在Tomcat服务器启动的时候加载到内存,可以用户直接使用.

    3.JSP内置对象都有哪些?

    out(常用) out 对象用于在Web浏览器内输出信息,并且管理应用服务器上的输出缓冲区。在使用 out 对象输出数据时,可以对数据缓冲区进行操作,及时清除缓冲区中的残余数据,为其他的输出让出缓冲空间。待数据输出完毕后,要及时关闭输出流。
    request(常用) request 对象是 javax.servlet.httpServletRequest类型的对象。 该对象代表了客户端的请求信息,主要用于接受通过HTTP协议传送到服务器的数据。(包括头信息、系统信息、请求方式以及请求参数等)。request对象的作用域为一次请求。
    response(常用) response 代表的是对客户端的响应,主要是将JSP容器处理过的对象传回到客户端。response对象也具有作用域,它只在JSP页面内有效。
    session(常用) session 对象是由服务器自动创建的与用户请求相关的对象。服务器为每个用户都生成一个session对象,用于保存该用户的信息,跟踪用户的操作状态。session对象内部使用Map类来保存数据,因此保存数据的格式为 “Key/value”。 session对象的value可以使复杂的对象类型,而不仅仅局限于字符串类型。
    application(常用) application 对象可将信息保存在服务器中,直到服务器关闭,否则application对象中保存的信息会在整个应用中都有效。与session对象相比,application对象生命周期更长,类似于系统的“全局变量”。

    pageContext 

    pageContext 对象的作用是取得任何范围的参数,通过它可以获取 JSP页面的out、request、reponse、session、application 等对象。pageContext对象的创建和初始化都是由容器来完成的,在JSP页面中可以直接使用 pageContext对象。

    config 

    config 对象的主要作用是取得服务器的配置信息。通过 pageConext对象的 getServletConfig() 方法可以获取一个config对象。当一个Servlet 初始化时,容器把某些信息通过 config对象传递给这个 Servlet。 开发者可以在web.xml 文件中为应用程序环境中的Servlet程序和JSP页面提供初始化参数。

    page 

    page 对象代表JSP本身,只有在JSP页面内才是合法的。 page隐含对象本质上包含当前 Servlet接口引用的变量,类似于Java编程中的 this 指针。

    exception

    exception 对象的作用是显示异常信息,只有在包含 isErrorPage="true" 的页面中才可以被使用,在一般的JSP页面中使用该对象将无法编译JSP文件。excepation对象和Java的所有对象一样,都具有系统提供的继承结构。exception 对象几乎定义了所有异常情况。在Java程序中,可以使用try/catch关键字来处理异常情况; 如果在JSP页面中出现没有捕获到的异常,就会生成 exception 对象,并把 exception 对象传送到在page指令中设定的错误页面中,然后在错误页面中处理相应的 exception 对象。

    request如何在另一个页面拿到值,并且解决post提交的中文乱码问题!

    <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
    <%
    String path = request.getContextPath();
    String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
    %>
    
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
    <html>
      <head>
        <base href="<%=basePath%>">
        
        <title>My JSP '1.jsp' starting page</title>
        
        <meta http-equiv="pragma" content="no-cache">
        <meta http-equiv="cache-control" content="no-cache">
        <meta http-equiv="expires" content="0">    
        <meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
        <meta http-equiv="description" content="This is my page">
        <!--
        <link rel="stylesheet" type="text/css" href="styles.css">
        -->
    
      </head>
      
      <body>
        <form action="index.jsp" method="post">
            <input typr="text" name="txtName" /><br/>
            <input type="password" name="txtPwd" /><br/><input type="submit" name="Login" />
        </form>
      </body>
    </html>

    另一个index.jsp页面中写入如下代码

    <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
    <%
    String path = request.getContextPath();
    String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
    %>
    
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
    <html>
      <head>
        <base href="<%=basePath%>">
        
        <title>My JSP 'index.jsp' starting page</title>
        <meta http-equiv="pragma" content="no-cache">
        <meta http-equiv="cache-control" content="no-cache">
        <meta http-equiv="expires" content="0">    
        <meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
        <meta http-equiv="description" content="This is my page">
        <!--
        <link rel="stylesheet" type="text/css" href="styles.css">
        -->
      </head>
      
      <body>
       <%
    <!-- 用post方式提交解决乱码的方法 -->
        request.setCharacterEncoding("UTF-8");
    %> <%
        <!-- request.getParameter(form表单中文本框的name名字);  用来拿到提交过来的文本框的属性 -->
        String name=request.getParameter("txtName");
        String pwd=request.getParameter("txtPwd");
        
        %>
        <%=name %><br/>
        <%=pwd %>
      </body>
    </html>

    运行结果如下:用户名和密码输入的都是123 (当然,没有做逻辑判定了  嘻嘻)

    当点击提交之后,跳转到index.jsp页面:

    结果就是:

    request转发的方法

    <!-- 2.jsp页面 -->
    <% if(request.getParameter("txtName").equals("123")){ String str=request.getParameter("txtName"); request.setAttribute("name", str); //转发 request.getRequestDispatcher("index.jsp").forward(request, response); } %>

    我们可以看到,通过中转站2.jsp进行判定通过之后,转发到欢迎页面,但是URL中显示的还是2.jsp

    response重定向方法

    <%
        if(request.getParameter("txtName").equals("123")){
        	String str=request.getParameter("txtName");
        	request.setAttribute("name", str);
        	//重定向
        	response.sendRedirect("index.jsp");
        }
        %>
    

    通过重定向跳转之后,我们可以看到URL地址中变成index.jsp页面.

    request转发和response重定向的区别

    (1).Request Dispatcher.forward()是容器中控制权的转向,在客户端浏览器地址栏中不会显示出转向后的地址;
    (2).response.sendRedirect()则是完全的跳转,浏览器将会得到跳转的地址,并重新发送请求链接。这样,从浏览器的地址栏中可以看到跳转后的链接地址。
    前者更加高效,在前者可以满足需要时,尽量使用RequestDispatcher.forward()方法.

    注:在有些情况下,比如,需要跳转到一个其它服务器上的资源,则必须使用HttpServletResponse.sendRequest()方法。

    out方法的使用:

    <%
          
          out.print("我是out内置对象");
          
      %>

    其运行结果是:

    session的使用方法:

    <!-- 一个网页中把变量username以username为名字保存在session上-->
    <%session.setAttribute("username",username);%>
    <!-- 在另一个页面中通过getAttribute方法取得username的值-->
    <%String username = (String)session.getAttribute("username");%>
    
    <!-- "username"是传递变量的名字 username 是变量-->
    <!-- session是一次会话只要浏览器不关闭就不会关闭会话 一般默认保存30分钟可以根据自己的需要更改-->

    application的使用方法

    <%@ page language="java" import="java.util.*" pageEncoding="ISO-8859-1"%>
    <html>
      <head>
        <title>My JSP 'ServletContextAttribute.jsp' starting page</title>
      </head>
    
      <body>
        <%
          application.setAttribute("name","Hello") ;
          application.removeAttribute("name") ;
        %>
      </body>
    </html>
    
    ServletContextListenerDemo.java:
    package org.lxh.listener.app;
    
    import javax.servlet.ServletContextAttributeEvent;
    import javax.servlet.ServletContextAttributeListener;
    import javax.servlet.ServletContextEvent;
    import javax.servlet.ServletContextListener;
    
    public class ServletContextListenerDemo implements
        ServletContextAttributeListener, ServletContextListener {
      public void attributeAdded(ServletContextAttributeEvent arg0) {
        System.out.println("** 增加属性:" + arg0.getName() + " --> " + arg0.getValue()) ;
      }
      public void attributeRemoved(ServletContextAttributeEvent arg0) {
        System.out.println("** 删除属性:" + arg0.getName() + " --> " + arg0.getValue()) ;
      }
      public void attributeReplaced(ServletContextAttributeEvent arg0) {
        System.out.println("** 替换属性:" + arg0.getName() + " --> " + arg0.getValue()) ;
      }
      public void contextDestroyed(ServletContextEvent arg0) {
        System.out.println("** 容器销毁:" + arg0.getServletContext().getRealPath("/"));
      }
      public void contextInitialized(ServletContextEvent arg0) {
        System.out.println("** 容器初始化:" + arg0.getServletContext().getRealPath("/"));
      }
    }

                                                                                             如若转载,请标明 @小小菜鸟,飞得高

                                                                本人QQ是 : 1878321819

                                                            对jsp/servlet有兴趣的可以进行交流哦!

  • 相关阅读:
    ACM常用算法及练习(2)
    ACM常用算法及练习(1)
    ACM进阶计划
    《算法艺术与信息学竞赛》题目-提交方式对照表
    ACM之Java速成(4)
    ACM之Java速成(3)
    ACM之Java速成(2)
    ACM之Java速成(1)
    uva 11520
    uva 10755
  • 原文地址:https://www.cnblogs.com/xjdoconline/p/4940026.html
Copyright © 2011-2022 走看看