一、jsp中的9个内置对象
内置对象(又叫隐含对象,有9个内置对象):不需要预先声明就可以在脚本代码和表达式中随意使用
1.page:页面对象,类型 javax.lang.Object,作用域Page
page对象 page对象就是指向当前JSP页面本身,有点象类中的this指针,它是 java.lang.Object类的实例
2.pageContext:页面上下文对象,类型 javax.servlet.jsp.PageContext,作用域Page
pageContext对象 pageContext对象提供了对JSP页面内所有的对象及名字空间的访问,也就是 说他可以访问到本页所在的SESSION,也可以取本页面所在的application的 某一属性值,他相当于页面中所有功能的集大成者,它的本类名也叫pageContext。
3.request:请求对象,类型 javax.servlet.ServletRequest,作用域Request
request对象 客户端的请求信息被封装在request对象中,通过它才能了解到客户的需求, 然后做出响应。它是HttpServletRequest类的实例。
4.session:会话对象,类型 javax.servlet.http.HttpSession,作用域Session
session对象 session对象指的是客户端与服务器的一次会话,从客户连到服务器的一个 WebApplication开始,直到客户端与服务器断开连接为止。它是HttpSession 类的实例.
5.application:应用程序对象, 类型 javax.servlet.ServletContext,作用域Application
application对象 application对象实现了用户间数据的共享,可存放全局变量。它开始于服务器 的启动,直到服务器的关闭,在此期间,此对象将一直存在;这样在用户的前 后连接或不同用户之间的连接中,可以对此对象的同一属性进行操作;在任何 地方对此对象属性的操作,都将影响到其他用户对此的访问。服务器的启动和 关闭决定了application对象的生命。它是ServletContext类的实例。
6.response:响应对象,类型 javax.servlet.SrvletResponse,作用域Page
response对象 response对象包含了响应客户请求的有关信息,但在JSP中很少直接用到它。 它是HttpServletResponse类的实例。
7.out:输出对象,类型 javax.servlet.jsp.JspWriter,作用域Page
out对象 out对象是JspWriter类的实例,是向客户端输出内容常用的对象
8.config:配置对象,类型 javax.servlet.ServletConfig,作用域Page
config对象 config对象是在一个Servlet初始化时,JSP引擎向它传递信息用的,此信息包括Servlet初始化时所要用到的参数(通过属性名和属性值构成)
以及服务器的有关信息(通过传递一个ServletContext对象)
9.exception:例外对象,类型 javax.lang.Throwable,作用域page
exception对象 exception对象是一个例外对象,当一个页面在运行过程中发生了例外,就产 生这个对象。如果一个JSP页面要应用此对象,就必须把isErrorPage设为true, 否则无法编译。他实际上是Java.lang.Throwable的对象
二、jsp中四种作用域
1. page
放在page作用域中的对象,只能在当前页面中访问。 pageContext.setAttribute(key,value),只有当前页面中取出访问。
2. request
放在request作用域中的对象,可以在一次请求中访问。 request.setAttribute(key,value),当页面提交到新页面时,在新页面中可以取出访问。 但是只能在一次请求之间共享该数据,多次请求丢失。
3. session
放在session作用域中的对象,可以在整个会话期间多次访问。 session.setAttribute(key,value),在整个会话期间,均可以访问。
4. application
全局范围。放在application作用域范围的对象,所有人共享,也不会丢失。
三、转发和重定向
struts.xml
<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.1//EN" "http://struts.apache.org/dtds/struts-2.1.dtd"> <struts> <package name="user" namespace="/" extends="struts-default"> <action name="login" class="com.hpsvse.web.action.UsersAction" method="login"> <result name="login"> /index.jsp </result> <!-- 转发和重定向 1.转发 result type="dispatcher"(可以不写) 2.重定向 result type="redirect" --> <result name="seccess" type="redirect"> /main.jsp </result> </action> </package> </struts>
main.jsp
<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <title>My JSP 'main.jsp' starting page</title> </head> <body> 欢迎${uname},登录成功 <br> ${sessionScope.username}<br/> </body> </html>
1. 转发 一次请求,不丢失数据,地址栏不变,只能转发本工程资源。在struts2中实现转 发是在result结点中配置type=dispatcher,或者不写为默认值。
2. 重定向 两次请求,丢失第一次请求数据,地址栏变化为第二次请求地址,可以重定向到任务地址。 在struts2中实现重定向,是在result结点中配置type=”redirect”。
四、struts2的action中获取session
1. 藕合方式:
是指使用原生的sevletApi对象: HttpSession HttpSession session = ServletActionContext.getRequest().getSession();
//1.藕合方式获取 session HttpSession session = ServletActionContext.getRequest().getSession(); session.setAttribute("username", uname);
2. 解藕合方式:
是指用javaapi, HashMap来实现。 Map<String,Object> session = ActionContext.getContext().getSession();
//2.解藕合方式获取 session Map<String, Object> session = ActionContext.getContext().getSession(); session.put("username", uname);3. ioc 注入 通过Action实现SessionAware接口,完成注入。
UserAction.java
package com.hpsvse.web.action; import java.util.Map; import javax.servlet.http.HttpSession; import org.apache.struts2.ServletActionContext; import org.apache.struts2.interceptor.SessionAware; import com.opensymphony.xwork2.ActionContext; public class UsersAction implements SessionAware{ //3.通过 ioc 注入获取 session private Map<String, Object> session; public void setSession(Map<String, Object> session) { this.session = session; } private String uname; private String upwd; public UsersAction() { } /** * 写一个构造方法,返回对应结果。默认为public String execute(),<br/> * 改名为login需要在struts.xml中method="login" <br/> * <action name="login" class="com.hpsvse.web.action.UsersAction" * method="login"><br/> * * @return */ public String login() { //1.藕合方式获取 session // HttpSession session = ServletActionContext.getRequest().getSession(); // session.setAttribute("username", uname); //2.解藕合方式获取 session // Map<String, Object> session = ActionContext.getContext().getSession(); // session.put("username", uname); //3.通过 ioc 注入获取 session session.put("username", uname); if ("admin".equals(uname)) { return "seccess"; } return "login"; } public String getUname() { return uname; } public void setUname(String uname) { this.uname = uname; } public String getUpwd() { return upwd; } public void setUpwd(String upwd) { this.upwd = upwd; } }