struts2 中jsp的9个内置对象、四种作用域、转发和重定向及在Action中获取session

    xiaoxiao2021-03-25  67

    一、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; } }

    转载请注明原文地址: https://ju.6miu.com/read-32588.html

    最新回复(0)