Struts2(八)访问Servlet API

一、Struts2中的Servlet API

1.1、struts2的Action实现了MVC中C层的作用

针对请求用户显示不同的信息

登录后段保存用户信息 ----session

保存当前在线人数等功能---application

1.2、传统的Servlet API类型

HttpServletRequest

HttpSession

ServletContext

1.3、Struts2中将传统的Servlet API类型被处理成Map类型

访问更方便

不依赖传统Servlet API 类型--解耦合

二、ActionContext

所在包com.opensymphony.xwork2

ActionContext被称为Action上下文或者Action环境

ActionContext,提供每个Action运行时与之相关的所有信息

访问Servlet API

ActionContext类提供getContext()方法获得实例

通过ActionContext类的实例可获得Map类型的请求,会话等

通过Put()和Get()方法在Map类型的对象中存取数据

二、简单例子

web.xml中添加

 <filter>
        <filter-name>struts2</filter-name>
        <filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
    </filter>

    <filter-mapping>
        <filter-name>struts2</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>

login.jsp页面

<%@ page language="java" contentType="text/html; charset=UTF-8"
    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" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<base href="<%=basePath %>>">
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>登录页面</title>
</head>
<body>
<form action="user01.action" method="post">
<table>
<tr>
<td>用户名:<input name="username"/></td>
</tr>
<tr>
<td>用户名:<input type="password" name="password"/></td>
</tr>
<tr>
<td><input type="submit" value="提交"/><input type="reset" value="重置"/></td>
</tr>
</table>
</form>
</body>
</html>

loginSuccess.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ taglib prefix="s" uri="/struts-tags"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>登录成功页面</title>
</head>
<body>
<h1>jsp方式取值:</h1>
<%=request.getAttribute("linkaddress") %><br/>
<%=session.getAttribute("uname") %><br/>
<%=application.getAttribute("online") %><br/>
<h1>EL表达式取值:</h1>
${request.linkaddress }<br/>
${session.uname }<br/>
${application.online }<br/>
<h1>struts取值:</h1>
<!-- 推荐使用这种 -->
<s:property value="#request.linkaddress"/><br/>
<!--  使用attr取值不推荐-->
<s:property value="#attr.linkaddress"/><br/>
<s:property value="#session.uname"/><br/>
<s:property value="#attr.uname"/><br/>
<s:property value="#application.online"/><br/>
<s:property value="#attr.online"/><br/>
<s:debug/>
</body>
</html>

UserAction3.java

package com.pb.web.action;

import java.util.Map;

import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.ActionSupport;

public class UserAction3 extends ActionSupport {

    private String username;
    private String password;
    private Map<String , Object> request;
    private Map<String , Object> session;
    private Map<String , Object> application;

    public String login(){
        ActionContext ac=ActionContext.getContext();
        request=(Map<String, Object>) ac.get("request");
        session=ac.getSession();
        application=ac.getApplication();
        if(this.getUsername().equals("accp")&&this.getPassword().equals("accp")){
            request.put("linkaddress", "这次的登录地点:SZ");
            session.put("uname", username);
            application.put("online", "当前在线人数:xxxx");
            System.out.println(request.get("linkaddress"));
            System.out.println(session.get("uname"));
            System.out.println(application.get("online"));

            return SUCCESS;
        }
        return INPUT;

    }

    public String getUsername() {
        return username;
    }
    public void setUsername(String username) {
        this.username = username;
    }
    public String getPassword() {
        return password;
    }
    public void setPassword(String password) {
        this.password = password;
    }

    public Map<String, Object> getRequest() {
        return request;
    }

    public void setRequest(Map<String, Object> request) {
        this.request = request;
    }

    public Map<String, Object> getSession() {
        return session;
    }

    public void setSession(Map<String, Object> session) {
        this.session = session;
    }

    public Map<String, Object> getApplication() {
        return application;
    }

    public void setApplication(Map<String, Object> application) {
        this.application = application;
    }

}

struts.xml

<struts>

    <constant name="struts.enable.DynamicMethodInvocation" value="false" />
    <constant name="struts.devMode" value="true" />
    <package name="default" namespace="/" extends="struts-default">
    <action name="user01" class="com.pb.web.action.UserAction3" method="login">
    <result name="success">/loginSuccess.jsp</result>
    <result name="input">/login.jsp</result>
    </action>
    </package>
</struts>

三、IOC方式获取Servlet API对象

更改以上的代码

login.jsp页面

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ taglib prefix="s" uri="/struts-tags" %>
<%
    String path = request.getContextPath();
    String basePath = request.getScheme() + "://"
            + request.getServerName() + ":" + request.getServerPort()
            + path + "/";
%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<base href="<%=basePath %>>">
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>登录页面</title>
</head>
<body>
<!-- <form action="user01.action" method="post"> -->
<form action="user02.action" method="post">
<table>
<tr>
<td>用户名:<input name="username"/></td>
</tr>
<tr>
<td>用户名:<input type="password" name="password"/></td>
</tr>
<tr>
<td><input type="submit" value="提交"/><input type="reset" value="重置"/></td>
</tr>
</table>
</form>
<s:property value="#session.msg"/>
</body>
</html>

loginSuccess.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ taglib prefix="s" uri="/struts-tags"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>登录成功页面</title>
</head>
<body>
<h1>jsp方式取值:</h1>
<%=request.getAttribute("linkaddress") %><br/>
<%=session.getAttribute("uname") %><br/>
<%=application.getAttribute("online") %><br/>
<h1>EL表达式取值:</h1>
${request.linkaddress }<br/>
${session.uname }<br/>
${application.online }<br/>
<h1>struts取值:</h1>
<!-- 推荐使用这种 -->
<s:property value="#request.linkaddress"/><br/>
<!--  使用attr取值不推荐-->
<s:property value="#attr.linkaddress"/><br/>
<s:property value="#session.uname"/><br/>
<s:property value="#attr.uname"/><br/>
<s:property value="#application.online"/><br/>
<s:property value="#attr.online"/><br/>
<s:debug/>
</body>
</html>

UserAction2.java

package com.pb.web.action;

import java.util.Map;

import org.apache.struts2.interceptor.ApplicationAware;
import org.apache.struts2.interceptor.RequestAware;
import org.apache.struts2.interceptor.SessionAware;
import com.opensymphony.xwork2.ActionSupport;

public class UserAction2 extends ActionSupport implements RequestAware,
        SessionAware, ApplicationAware {

    private static final long serialVersionUID = 1L;
    //属性要有getter、setter方法
    private String username;
    private String password;
    //request,session,application不需要getter、setter方法
    private Map<String , Object> request;
    private Map<String , Object> session;
    private Map<String , Object> application;

    public String login(){

        if(this.getUsername().equals("accp")&&this.getPassword().equals("accp")){
            request.put("linkaddress", "这次的登录地点:SZ");
            session.put("uname", username);
            application.put("online", "当前在线人数:xxxx");
            System.out.println(request.get("linkaddress"));
            System.out.println(session.get("uname"));
            System.out.println(application.get("online"));

            return SUCCESS;
        }
        session.put("msg", "用户名或者密码不正确!");
        return INPUT;

    }

    //使用struts2提供接口来生成application,session,request对象,
    @Override
    public void setApplication(Map<String, Object> application) {
        this.application=application;
    }

    @Override
    public void setSession(Map<String, Object> session) {
        this.session=session;
    }

    @Override
    public void setRequest(Map<String, Object> request) {
        this.request=request;
    }

    public String getUsername() {
        return username;
    }

    public void setUsername(String username) {
        this.username = username;
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }

}

struts.xml

<action name="user02" class="com.pb.web.action.UserAction2" method="login">
    <result name="success"  type="dispatcher">/loginSuccess.jsp</result>
    <result name="input" type="redirect">/login.jsp</result>
    </action>

使用传统的方式获取Servlet API

实现ServletRequestAware接口

package com.pb.web.action;

import javax.servlet.ServletContext;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;

import org.apache.struts2.ServletActionContext;
import org.apache.struts2.interceptor.ServletRequestAware;
import org.apache.struts2.util.ServletContextAware;

import com.opensymphony.xwork2.ActionSupport;

public class UserAction04 extends ActionSupport implements ServletRequestAware,
        ServletContextAware {

    private String username;
    private String password;
    private HttpServletRequest request;
    private HttpSession session;
    private ServletContext application;

    public String login() {
        // 获取对象
        session = request.getSession();
        // 保存数据
        request.setAttribute("loginAddress", "您本次登录地点是:北京");
        session.setAttribute("username", username);
        application.setAttribute("online", "当前在线人数:XXX");
        // 获取数据
        System.out.println(request.getAttribute("loginAddress"));
        System.out.println(session.getAttribute("username"));
        System.out.println(application.getAttribute("online"));
        return SUCCESS;
    }

    public String getUsername() {
        return username;
    }

    public void setUsername(String username) {
        this.username = username;
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }

    @Override
    public void setServletRequest(HttpServletRequest request) {
        this.request = request;
    }

    @Override
    public void setServletContext(ServletContext application) {
        this.application = application;

    }

}

或者使用时直接获取对象

package com.pb.web.action;

import javax.servlet.ServletContext;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;

import org.apache.struts2.ServletActionContext;
import com.opensymphony.xwork2.ActionSupport;

public class UserAction03 extends ActionSupport {

    private String username;
    private String password;
    private HttpServletRequest request;
    private HttpSession session;
    private ServletContext application;

    public String login() {
        // 获取对象
        request = ServletActionContext.getRequest();
        session = request.getSession();
        application = ServletActionContext.getServletContext();
        // 保存数据
        request.setAttribute("loginAddress", "您本次登录地点是:北京");
        session.setAttribute("username",username);
        application.setAttribute("online","当前在线人数:XXX");
        // 获取数据
        System.out.println(request.getAttribute("loginAddress"));
        System.out.println(session.getAttribute("username"));
        System.out.println(application.getAttribute("online"));
        return SUCCESS;
    }

    public String getUsername() {
        return username;
    }

    public void setUsername(String username) {
        this.username = username;
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }

}
时间: 2025-01-02 01:20:27

Struts2(八)访问Servlet API的相关文章

struts2如何访问servlet API

 struts2如何访问servlet API 1.struts2 通过提供一个ActionContext 来访问servlet API 2.ActionContext提供了哪些方法来进行访问 Object  get(Object key):该方法类似于调用HttpServletRequest 的getAttribute(String name) Map getApplication() :返回一个Map对象,模拟该应用的ServletContext static ActionContext

struts2中访问servlet API

Struts2中的Action没有与任何Servlet API耦合,,但对于WEB应用的控制器而言,不访问Servlet API几乎是不可能的,例如需要跟踪HTTP Session状态等.Struts2中提供了一个ActionContext类,Struts2的Action可以通过该类来访问Servlet API. ActionContext类中包含的几个常用方法: Object get(Object key):该方法类似于调用HttpServletRequest的getAttribute(Str

struts2 - ation 访问 Servlet api

Web 应用中通常需要访问的 Servlet Api 就是 HttpServletRequest .HttpSession 和 ServletContext,这三个接口分别代表 JSP内置对象中的 request.session 和 application. 一.通过 struts 的 ActionContext 类来访问(间接性访问). eg1: action文件: struts.xml文件: jsp 页面: 二.struts 通过 ServletContextAware.ServletReq

struts2的action访问servlet API的三种方法

学IT技术,就是要学习... 今天无聊看看struts2,发现struts2的action访问servlet API的三种方法: 1.Struts2提供的ActionContext类 Object get(Object key);可以获取request属性 Map getSession():可以得到session属性 Map getAppliction():可以得到ServletContext实例 2.action类实现 ServletContextAware,ServletRequestAwa

Struts2访问Servlet API的几种方式

struts2提供了三种方式访问servlet API:大致分为两类 1. ActionContext: public static ActionContext getContext() :获得当前Action的ActionContext实例. public Object get(Object key) :此方法类似于调用HttpServletRequest的getAttribute(String name)方法. public void put(Object key, Object value

Struts2笔记--Action访问Servlet API

Web应用中通常需要访问的Servlet API就是HttpServletRequest.HttpSession和ServletContext,这三个接口分别代表JSP内置对象中的request.session和application. 1.使用Struts2提供的ActionContext类来访问Servlet API.下面是ActionContext类中包含的几个常用方法. Object get(Object key):该方法类似于调用HttpServletRequest的getAttrib

Struts2学习笔记(五)——Action访问Servlet API

在Strut2中访问Servlet API有三种方式: 1.通过ActionContext访问Servlet API,推荐使用这种,但是这种方案它获取的不是真正的事Servlet API. 步骤: 1).创建一个ActionContext ActionContext context=ActionContext.getContext(); 2).通过context对象获取Servlet API Map<String,Object> getApplication() 获取的是application

笔记01 登录、常用配置参数、Action访问Servlet API 和设置Action中对象的值、命名空间和乱码处理、Action中包含多个方法如何调用

Struts2登录 1. 需要注意:Struts2需要运行在JRE1.5及以上版本 2. 在web.xml配置文件中,配置StrutsPrepareAndExecuteFilter或FilterDispatcher 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 <filter>     <filter-name>struts2</filter-name>     <filter-class>org.apache.struts2.di

Struts2中使用Servlet API步骤

Struts2中使用Servlet API步骤 Action类中声明request等对象 Map<String, Object> request; 获得ActionContext实例 ActionContext ac=ActionContext.getContext(); 获取request等对象   request=(Map<String, Object>)ac.get("request"); 在request等对象中保存数据  request.put(&qu