探索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有兴趣的可以进行交流哦!