zoukankan      html  css  js  c++  java
  • 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的配置,后续内容持续更新中...

  • 相关阅读:
    闭包的一个经典例子
    手机归属地查询API
    安卓模拟器导入通讯录
    使用RazorGenerator实现项目模块分离
    .met mvc 一种判断是否已登录的方式
    stl 空间配置器理解
    STL 生成全排列
    KMP算法理解
    解决八皇后问题,递归与非递归方式两种
    获取第K大的数
  • 原文地址:https://www.cnblogs.com/AndroidJotting/p/6516910.html
Copyright © 2011-2022 走看看