Struts2之web元素访问与模板包含与默认Action使用

  上一篇为大家介绍了如何使用Action进行参数接收,以及简单的表单验证,本篇为大家介绍一下关于Action访问web元素的三种方式(request、session、application);模板包含(include);默认Action的使用。

  下面我先来看一下Action如何访问web元素:1、Map方式进行数据传递:IOC(控制反转);2、Map方式进行数据传递:依赖Struts2;3、原始数据类型参数传递:IOC;4、原始数据类型进行参数传递:依赖Struts2,我们接下来一个一个的为大家介绍,方法有很多,大家最终根据自己的习惯自行选择。下面我们先从Map方式进行数据传递开始介绍,这里简单介绍一下IOC的概念,IOC被称为控制反转,通俗来讲就是:原本自己控制的,交由别人控制了。下面我们看一下如何使用IOC实现用Map来进行数据的传递。

  这里我们还是接上一个工程继续实现,使用ModelDriven的形式将用户传入参数进行接收。我的Action对象:

/***
 * Map方式进行数据传递:IOC(控制反转)
 */
@SuppressWarnings("serial")
public class UserAction extends ActionSupport implements ModelDriven<User>{

    private User user = new User();
    private Map request;
    private Map session;
    private Map application;

    public UserAction(){
        request = (Map) ActionContext.getContext().get("request");//控制翻转
        session = ActionContext.getContext().getSession();//控制翻转
        application = ActionContext.getContext().getApplication();//控制翻转
    }

    @Override
    public String execute() throws Exception {
        return SUCCESS;
    }

    public String login(){
        System.out.println("name="+user.getName()+"  Pwd="+user.getPassword());
        //使用request方式传参
        request.put("name", user.getName()+"");
        request.put("password", user.getPassword()+"");

        //使用session方式传参
        session.put("name", user.getName()+"");
        session.put("password", user.getPassword()+"");

        //使用application方式传参
        application.put("name", user.getName()+"");
        application.put("password", user.getPassword()+"");
        return SUCCESS;
    }

    public User getModel() {
        return user;
    }

}

  我们的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>
    Hello Struts2<br>
    name:<%=request.getAttribute("name") %><br>
    password:<%=request.getAttribute("password") %><br><br>

    name:<%=session.getAttribute("name") %><br>
    password:<%=session.getAttribute("password") %><br><br>

    name:<%=application.getAttribute("name") %><br>
    password:<%=application.getAttribute("password") %><br>
  </body>
</html>


  下面我们看一下第二种Map方式进行数据传递:依赖Struts2的实现:

/***
 * Map方式进行数据传递:依赖Struts2
 */
@SuppressWarnings("serial")
public class UserAction extends ActionSupport implements ModelDriven<User>,RequestAware,SessionAware,ApplicationAware{

    private User user = new User();
    private Map<String, Object> request;
    private Map<String, Object> session;
    private Map<String, Object> application;

    @Override
    public String execute() throws Exception {
        return SUCCESS;
    }

    public String login(){
        System.out.println("name="+user.getName()+"  Pwd="+user.getPassword());
        //使用request方式传参
        request.put("name", user.getName());
        request.put("password", user.getPassword());

        //使用session方式传参
        session.put("name", user.getName());
        session.put("password", user.getPassword());

        //使用application方式传参
        application.put("name", user.getName());
        application.put("password", user.getPassword());
        return SUCCESS;
    }

    public User getModel() {
        return user;
    }

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

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

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

}

  jsp页面接收参数方式同上,就不在这里赘述。



  下面是我们的第三种原始数据类型参数传递:IOC方式:

/***
 * 原始数据类型参数传递:IOC
 * IOC:控制反转
 * 控制反转:原本自己控制的,交由别人控制
 */
@SuppressWarnings("serial")
public class UserAction extends ActionSupport implements ModelDriven<User>{

    private User user = new User();
    private HttpServletRequest request;
    private HttpSession session;
    private ServletContext application;

    public UserAction(){
        request = ServletActionContext.getRequest();
        session = request.getSession();
        application = session.getServletContext();
    }

    @Override
    public String execute() throws Exception {
        return SUCCESS;
    }

    public String login(){
        System.out.println("name="+user.getName()+"  Pwd="+user.getPassword());
        //使用request方式传参
        request.setAttribute("name", user.getName());
        request.setAttribute("password", user.getPassword());

        //使用session方式传参
        session.setAttribute("name", user.getName());
        session.setAttribute("password", user.getPassword());

        //使用application方式传参
        application.setAttribute("name", user.getName());
        application.setAttribute("password", user.getPassword());
        return SUCCESS;
    }

    public User getModel() {
        return user;
    }
}


  接下来是我们原始数据类型进行参数传递:依赖Struts2

/***
 * 原始数据类型进行参数传递:依赖Struts2
 */
@SuppressWarnings("serial")
public class UserAction extends ActionSupport implements ModelDriven<User>,ServletRequestAware{

    private User user = new User();
    private HttpServletRequest request;
    private HttpSession session;
    private ServletContext application;

    @Override
    public String execute() throws Exception {
        return SUCCESS;
    }

    public String login(){
        System.out.println("name="+user.getName()+"  Pwd="+user.getPassword());
        //使用request方式传参
        request.setAttribute("name", user.getName());
        request.setAttribute("password", user.getPassword());

        //使用session方式传参
        session.setAttribute("name", user.getName());
        session.setAttribute("password", user.getPassword());

        //使用application方式传参
        application.setAttribute("name", user.getName());
        application.setAttribute("password", user.getPassword());
        return SUCCESS;
    }

    public User getModel() {
        return user;
    }

    public void setServletRequest(HttpServletRequest request) {
        this.request = request;
        session = request.getSession();
        application = session.getServletContext();
    }
}

  到这里关于Action访问web元素进行参数传递的知识就为大家介绍完毕,接下来我们在简单了解一下模块包含和默认Action的使用:

  首先是我们的模块包含(include),这个主要是在我的struts.xml中使用,我们知道一般我们的开发都是协作开发,不同的人负责不同的模块,如果都在一个配置文件上进行修改,那样比较麻烦,这是我们就可以使用include属性,不同的开发人员管理着自己的struts.xml文件,最后通过include将不同的开发人员的配置文件进行引用。

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC
    "-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
    "http://struts.apache.org/dtds/struts-2.3.dtd">

<struts>

    <constant name="struts.enable.DynamicMethodInvocation" value="true" />
    <constant name="struts.devMode" value="true" />

    <include file="struts2.xml"></include>

</struts>


  最后我们在来看一下默认Action的设置:

<package name="default" namespace="/" extends="struts-default">

        <default-action-ref name="index"></default-action-ref>

        <action name="index" class="com.edu.action.UserAction">
            <result>
                /index.jsp
            </result>
        </action>
        <!-- 访问控制 -->
        <action name="hell" class="com.edu.action.UserAction">
            <result>
                /hello.jsp
            </result>
        </action>
    </package>

  default-action-ref就是设置我们的默认访问action的配置信息,这样当我们在浏览器输入的URL地址找不到对应的Action时,默认会调用index.action

<default-action-ref name="index"></default-action-ref>

  到今天关于Struts2的Action方面内容已经为大家介绍完毕,下一篇我们一起探讨一个关于action下的result的配置,后续内容持续更新中...

时间: 2024-10-25 14:53:11

Struts2之web元素访问与模板包含与默认Action使用的相关文章

Struts2学习---namespace,file模块包含,默认action

我们上一节已经将action基本的配置和使用讲了,接下来我们讲以下struts一些小知识点: namespac: 上一节学习action的时候我们访问我们jsp文件时候使用的: http://localhost:8080/testStruts2/hello 这个路径,有同学就会问,为啥只能用这个路径, 其实我们也可以用: http://localhost:8080/testStruts2/hello.action 这两种是默认的方法,但是同样我们也可以自定义. <package name="

Struts2理解--动态方法和method属性及通配符_默认Action

众所周知,默认条件下,在浏览器输入indexAction!execute.action,便会执行indexAction类里的execute方法,这样虽然方便,但可能带来安全隐患,通过url可以执行Action中的任意方法. 想要禁止调用动态方法,则要在struts.xml中通过constant元素将属性strutsenableDynamicMethodInvocation设置为false,来禁止调用动态方法. <constant name="strutsenableDynamicMetho

Struts2的默认action配置真的是bug?

最近在捯饬struts2,其中在学习一个namespace中的默认action的时候,遇到了一个问题,先提供下struts的配置文件如下: <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.3//EN" "http://str

Struts2学习之路(五)—— 访问web元素

以下是Action类中访问web元素的示例,共有四种方法.其中第一种和第三种依赖容器,第二种和第四种利用IOC思想.前面两种取得Map类型的request.session.application:后面两种是真实类型HttpServletRequest.HttpServletSession.ServletContext的引用. 1.第一种方法: 1 package com.user.action; 2 3 import java.util.Map; 4 5 import com.opensymph

Struts2中访问web元素的四种方式

Struts2中访问web元素的四种方式如下: 通过ActionContext来访问Map类型的request.session.application对象. 通过实现RequestAware.SessionAware.ApplicationAware接口来访问Map类型的request.session.application对象(IoC方式). 通过ServletActionContext来访问Servlet API类型的HttpServletRequest. HttpSession. Serv

Struts2中访问web元素

有很多时候我们都需要访问web元素,比如说用户管理系统,用户登录成功了需要往session中放置一个值,然后要在前台拿到这个值,常用的web元素包括request.session和application等. Struts2中有四种方式可以访问到web元素: 1.通过ActionContext来访问Map类型的request.session.application对象. 2.通过实现RequestAware.SessionAware.ApplicationAware接口来访问Map类型的reque

Struts2访问web元素的各种方法

1.通过RequestAware,SessionAware,ApplicationAware获取: 在Struts2中不能直接访问Request,Session,Application元素,但是可以使用Struts2中提供的RequestAware,SessionAware,ApplicationAware.在这里要分别为三个对象提供setter方法,以便让struts自动执行,使用IoC(控制反转)进行赋值. 下面的LoginAction使用ModelDriven获取User,放入Sessio

Struts2访问web元素

一.为什么Action要访问web元素? 在使用struts2框架进行开发的时候, 页面与Action类进行交互, 由于Action中无法取得前端request.session.application.HttpServletRequest.HttpSession.ServletApplication,但是当有用户登录的时候, 需要在程序中为该用户创建session以标识该用户的登录状态及其他信息, 如何才能使得Action能够访问web元素,并把相应数据放到session.application

OpenCV:Mat元素访问方法、性能、代码复杂度以及安全性分析

欢迎转载,尊重原创,所以转载请注明出处: http://blog.csdn.net/bendanban/article/details/30527785 本文讲述了OpenCV中几种访问矩阵元素的方法,在指定平台上给出性能比较,分析每种矩阵元素访问方法的代码复杂度,易用性. 一.预备设置 本文假设你已经正确配置了OpenCV的环境,为方便大家实验,在文中也给出了编译源程序的Makefile,其内容如代码段1所示. 采用如代码段2所示的计时函数,这段代码你可以在我之前的博文中找到,abtic()