Struts2之Action详解

在MVC中,要有一个控制器来负责浏览器与服务器的通信,实现服务器与用户的交互。Struts2控制器最重要的组成部分是Action。

Action接收来自视图层的请求,并接收请求参数,同时负责调用模型Model层方法来完成业务逻辑的处理,最后控制程序的流程,选择一个合适的视图,将结果显示给用户。

Struts2会为每一个Action创建一个线程,因此是线程安全的。

尽量不要将商业逻辑代码放到Action中,而是放到JavaBean或者 EJB中。

一、Action的实现 

有三种方法,最常用的是POJO(Plain Old Java Object).

1.POJO方法,这种方法要编写getter,setter,实现 execute()方法

通过配置拦截器可以找到开发者提供的 Action类,并自动检索execute方法,根据方法返回的结果的不同跳转到不同的页面。

public class HelloWord {
	private String message ;
	public String getMessage(){
		return message ;
	}

	public String execute (){
		message ="success" ;
		return message ;
	}
}

在struts.xml文件中加入

<!--for HelloWord  -->
		<action name="helloword" class ="com.chuiyuan.action.HelloWord">
			<result >/helloword.jsp</result>
		</action>

再写一个helloword.jsp文件就可以了。  

2.实现struts2提供的Action接口

3.继承ActionSupport类

ActionSupport是编写设计业务逻辑Action强有力的支持,它提供了很强大的功能。有很多成员函数。略。

二、在Action中访问Servlet对象

很多时候,Action会与Web容器进行交互,在web容器中,活动着各种对象 ,这些对象在客户端与容器交互的交互过程中有很重要的作用,如HttpSession,HttpServletResponse,

Cookie等,Strus2有两种方法解决这个问题。

1.通过ActionContext访问Servlet对象 

  • action文件
public class ServletAction  implements Action{

	@Override
	public String execute() throws Exception {
		ActionContext ac = ActionContext.getContext() ;

		Map paramMap = ac.getParameters();
		String[] ids = (String []) paramMap.get("id") ;
		String[] names = (String [] )paramMap.get("name");

		Map sessionMap=ac.getSession() ;
		sessionMap.put("id", ids[0]) ;
		sessionMap.put("name", names[0]) ;
		return "toSession";
	}
}

struts.xml文件中加入

<!-- for ServletAction -->
		<action name="servletAction"  class="com.chuiyuan.action.ServletAction">
			<result name="toSession">/session.jsp</result>
		</action>

idname.jsp文件

<%@ page language="java" contentType="text/html; charset=GBK" %>
<%@ taglib prefix="s" uri="/struts-tags" %>
<html>
	<head>
		<title><s:text name="loginPage"/></title>
	</head>
	<body>
	<!-- 方法1 -->
		<form action ="servletAction.action" method="post">
			ID:<input name="id"><br>
			Name:<input name="name"><br>
			<input type="submit" value="提交">
		</form>
	<!-- 方法2 -->
		<s:form action="servletAction">
			<s:textfield name="id" label="ID"/>
			<s:textfield name="name" label="Name"/>
			<s:submit value="提交"/>
		</s:form>
	</body>
</html>

结果显示文件 session.jsp

<%@ page language="java" contentType="text/html; charset=GBK" %>
<%@ taglib prefix="s" uri="/struts-tags" %>
<html>
	<head>
		<title><s:text name="loginPage"/></title>
	</head>
	<body>
		${id }<br>
		${name }
	</body>
</html>

这里用到了EL表达式显示保存在 Session中的数据.

2.使用Ioc将Servlet对象注入到Action

Ioc就是Inversion of Control,控制反转,将设计好的类交给系统去控制,而不是在类的内部控制。

在Struts2中,要使用Ioc,一定要通过一些特定的接口将Servlet对象注入到Action 中,这一切都是由一组接口决定的,这组接口都以Aware结尾。

为了将相应的Servlet对象注入到Action中,只要让Action实现相应的接口就可以了,Struts2会自动将数据和对象注入到Action中。

例子如下

package com.chuiyuan.action;

import java.util.Map;

import javax.servlet.http.HttpServletRequest;
import org.apache.struts2.interceptor.ServletRequestAware;
import org.apache.struts2.interceptor.SessionAware;
import com.opensymphony.xwork2.Action;

public class ServletAction2 implements Action, ServletRequestAware, SessionAware
{
	private Map sessionMap;
	private HttpServletRequest request;
	@Override
	public void setSession(Map<String, Object> session) {
		this.sessionMap = session ;
	}
	@Override
	public void setServletRequest(HttpServletRequest request) {
		this.request = request ;
	}
	@Override
	public String execute() throws Exception {
		String id =this.request.getParameter("id") ;
		String name = this.request.getParameter("name") ;
		sessionMap.put("id" , id);
		sessionMap.put("name", name );
		return "toSession";
	}

}

 在struts.xml中加入

<!-- for servletAction1 -->
		<action name ="servletAction2" class="com.chuiyuan.action.ServletAction2">
			<result name="toSession">/session.jsp</result>
		</action>

然后修改idname.jsp中action为servletAction2。  

 

时间: 2024-12-10 18:29:18

Struts2之Action详解的相关文章

Struts2的Action详解

Struts2中的action,主要是完成业务逻辑操作.Action替代在servlet中完成的作用.Action的学习主要有两点如何创建一个struts2的action如果访问一个struts2的action1. Action类创建方式(三种)创建一个pojo类Pojo(plani Ordinary java object)简单的java对象Pojo类就是没有实现任何接口没有继承任何类优点:无耦合缺点:所有的功能都要自己完成创建一个类实现一个Action接口com.opensymphony.x

Struts2的Action详解【转载】

Struts 2.0的Action讲解 有Struts 1.x经验的朋友都知道Action是Struts的核心内容,当然Struts 2.0也不例外.不过,Struts 1.x与Struts 2.0的Action模型很大的区别.         Struts 1.xStuts 2.0        接口必须继承org.apache.struts.action.Action或者其子类无须继承任何类型或实现任何接口        表单数据表单数据封装在FormBean中表单数据包含在Action中,

Struts2 配置Action详解

Struts2的核心功能是action,对于开发人员来说,使用Struts2主要就是编写action,action类通常都要实现com.opensymphony.xwork2.Action接口,并实现该接口中的execute()方法. 该方法如下: public String execute() throws Exception Struts2并不是要求所有编写的action类都要实现Action接口,也可以直接编写一个普通的Java类作为action,只要实现一个返回类型为String的无参的

【Struts2】☆★之详解constant常量配置问题

[Struts2]☆★之详解constant常量配置问题 本文详细讲解web开发中使用Struts2时constant的常量配置问题 如下,constant添加位置 <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.3//EN" &qu

struts2标签库详解

原文:struts2标签库详解 源代码下载地址:http://www.zuidaima.com/share/1781606927846400.htm 要在jsp中使用Struts2的标志,先要指明标志的引入.通过jsp的代码的顶部加入以下的代码: <%@taglib prefix="s" uri="/struts-tags" %> If elseif  else 描述: 执行基本的条件流转. 参数: 名称 必需 默认 类型 描述 备注 test 是 bo

struts2基本配置详解2

接上篇struts2基本配置详解,还有一些配置没有讲到,下面将继续. struts.xml <package name="com.amos.web.action" namespace="/" extends="struts-default"> <action name="HelloWorldAction" method="execute"> <result name="

Struts2之命名空间详解及JSP文件上传了解

学习案例:struts配置元素详解以及简单的jsp文件上传. 一.案例分析: a)将鼠标放在struts.xml中的package标签上.Alt+/会自动提示: 1.name 2.namespace 3.extends 4.externalReferenceResolver 5.abstract 6.strict-method-invocation b)abstract属性表示该包是抽象的,不能直接使用,需要有子包继承才能使用.Struts-default既是abstract,所以我们要继承使用

Struts2 XML配置详解

struts官网下载地址:http://struts.apache.org/ 1.    深入Struts2的配置文件 本部分主要介绍struts.xml的常用配置. 1.1.    包配置: Struts2框架中核心组件就是Action.拦截器等,Struts2框架使用包来管理Action和拦截器等.每个包就是多个Action.多个拦截器.多个拦截器引用的集合. 在struts.xml文件中package元素用于定义包配置,每个package元素定义了一个包配置.它的常用属性有: l name

Struts2基本配置详解

Struts2配置文件加载顺序 struts2 配置文件由核心控制器加载 StrutsPrepareAndExecuteFilter (预处理,执行过滤) init_DefaultProperties(); // [1] ---------- org/apache/struts2/default.properties init_TraditionalXmlConfigurations(); // [2] --- struts-default.xml,struts-plugin.xml,strut