`
thrillerzw
  • 浏览: 143859 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

struts

 
阅读更多

一、struts2 

struts2 是以Webwork的设计思想为核心,吸收struts1的优点,是struts1和Webwork结合的产物。 

struts2 的工作原理图:

一个请求在Struts2框架中的处理分为以下几个步骤:

1.客户端发出一个指向servlet容器的请求(tomcat);

2.这个请求会经过图中的几个过滤器,最后会到达FilterDispatcher过滤器。

3.过滤器FilterDispatcher是struts2框架的心脏,在处理用户请求时,它和请求一起相互配合访问struts2

  的底层框架结构。在web容器启动时,struts2框架会自动加载配置文件里相关参数,并转换成相应的类。

  如:ConfigurationManager、ActionMapper和ObjectFactory。ConfigurationManager 存有配置文件的一

  些基本信息,ActionMapper存有action的配置信息。在请求过程中所有的对象(Action,Results,

  Interceptors,等)都是通过ObjectFactory来创建的。过滤器会通过询问ActionMapper类来查找请求中

  需要用到的Action。

4.如果找到需要调用的Action,过滤器会把请求的处理交给ActionProxy。ActionProxy为Action的代理对象

  。ActionProxy通过ConfigurationManager询问框架的配置文件,找到需要调用的Action类。

5.ActionProxy创建一个ActionInvocation的实例。ActionInvocation在ActionProxy层之下,它表示了

  Action的执行状态,或者说它控制的Action的执行步骤。它持有Action实例和所有的Interceptor。 

6.ActionInvocation实例使用命名模式来调用,1. ActionInvocation初始化时,根据配置,加载Action相

  关的所有Interceptor。2. 通过ActionInvocation.invoke方法调用Action实现时,执行Interceptor。在

  调用Action的过程前后,涉及到相关拦截器(intercepetor)的调用。

7. 一旦Action执行完毕,ActionInvocation负责根据struts.xml中的配置找到对应的返回结果。返回结果

  通常是(但不总是,也可能是另外的一个Action链)一个需要被表示的JSP或者FreeMarker的模版。在表

  示的过程中可以使用Struts2 框架中继承的标签。


 

	// struts2 action输出json
	public void output(JSONObject json) {
		try {
			HttpServletResponse response = getResponse();
			response.setContentType("text/json;charset=UTF-8");
			response.setHeader("Pragma", "No-cache");
			response.setHeader("Cache-Control", "no-cache");
			response.setDateHeader("Expires", 0);
			response.getWriter().write(json.toString());
			response.getWriter().flush();
		} catch (IOException e) {
			e.printStackTrace();
		}
	}

  

 

//struts.xml   json-default:  http://xu520.iteye.com/blog/1665923
<package name="default" namespace="/" extends="json-default">
</package>

//action
package xx.action;
import java.util.ArrayList;
import java.util.List;

import javax.servlet.http.HttpServletRequest;

import org.apache.struts2.ServletActionContext;
import org.apache.struts2.convention.annotation.Action;
import org.apache.struts2.convention.annotation.Namespace;
import org.apache.struts2.convention.annotation.ParentPackage;
import org.apache.struts2.convention.annotation.Result;

import com.opensymphony.xwork2.ActionSupport;

@ParentPackage("default")
@Namespace("/")
public class TestAction extends ActionSupport {
	private String name;
	private UserObj userObj;
	private List<UserObj> list;
	//{"list":[{"age":19,"name":"zs1"},{"age":20,"name":"zs2"}],"name":"zhang san","userObj":{"age":18,"name":"thriller"}}
	@Action(value = "testjson", results = { @Result(name = "success", type = "json") })
	public String testJson() {
		this.name = "zhang san";
		//json中不会出现
		String nameMethod = "li si";
		HttpServletRequest request = ServletActionContext.getRequest();
		request.setAttribute("nameMethod", nameMethod);
		//对象
		userObj = new UserObj("thriller",18);
		//list
		list=new ArrayList<UserObj>();
		list.add(new UserObj("zs1",19));
		list.add(new UserObj("zs2",20));
		return SUCCESS;
	}

	//必须加get,json串中才会出现 
	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

	public UserObj getUserObj() {
		return userObj;
	}

	public void setUserObj(UserObj userObj) {
		this.userObj = userObj;
	}

	public List<UserObj> getList() {
		return list;
	}

	public void setList(List<UserObj> list) {
		this.list = list;
	}
	
}

 

自定义拦截器:

 

编写拦截器类,需要实现 Interceptor接口,并实现该接口的三个方法:init ,intercept ,destroy

或者继承 AbstractInterceptor抽象类 ,并实现 intercept 方法就够了

或者继承 MethodFilterInterceptor抽象类,并实现 doIntercept方法

//struts.xml配置
<package name="default" namespace="/" extends="json-default">
		<interceptors>
			<interceptor name="testInterceptor"
				class="TestInterceptor" />		
				
			<interceptor-stack name="loginStack">
				<interceptor-ref name="testInterceptor">
					<param name="excludeMethods">
							xx,xx
					</param>
				</interceptor-ref>
				<interceptor-ref name="defaultStack" />
			</interceptor-stack>
			
			<interceptor-stack name="nologinStack">
				<interceptor-ref name="defaultStack" />
			</interceptor-stack>
		</interceptors>

		<default-interceptor-ref name="nologinStack" />
</package>   

 

  传值:  xx.do?templateVo.bizType=2

 

 Unable to load configuration. - bean - jar:file:/E:/dhlocalRepository/org/apache/struts/struts2-core/2.3.3/struts2-core-2.3.3.jar!/struts-default.xml:29:72 
 jar冲突。

 

 Struts 2 Action对象为每一个请求产生一个实例,因此没有线程安全问题。

 

demo

页面到Action传List
<input type="text" id="pagename" name="pageInfoList[0].pagename" value="页面0"/>	
<input type="text" id="pagename" name="pageInfoList[1].pagename" value="页面1"/>	
private List<PageInfoVo> pageInfoList;

页面到Action传对象
<input type="text" id="pagename" name="pageInfoVo.pagename" value="页面"/>	
private PageInfoVo         pageInfoVo;

@Action(value = "showsave", results = { @Result(name = "success", type = "velocity", location = "page/save.vm") })
    public String showsave() {
        return SUCCESS;
    }
    
@Action(value = "page_saveinfo", results = { @Result(name = "success", type = "redirect", location = "/page_list.do") })
 
@Action(value = "path_verification", results = { @Result(name = "success", type = "json") })

 

二、struts1

 

1)ActionForm接收数据

当点击submit后,把表单中的数据全部提交,在后台是用一个Map来接收表单中的数据,struts对ActionForm中的数据赋值也是从这个map里取值的。比如:
  1:如果key是简单的'userName',直接form.setUserName(map.get('userName'));
  2:如果key是'user.userName', 执行的操作是 form.getUser().setUserName(map.get
      ('user.userName');
  3:如果key是'list[0].userName', 它可以对应到数据或集合中,如对于数组 form.list[0].
      name=map.get('list[0].userName'); 对于集合(List) form.getList().get(0).setUserName
      (map.get('list[0].UserName'))

 

2)请求转发

 mapping.findForward("hello") 转向hello.jsp   new ActionForward ("hello.jsp")与它效果一样 ,第一个写法规范一点 方便配置

 

3)页面标签库

 <%@ taglib uri="http://jakarta.apache.org/struts/tags-logic" prefix="logic"%>
     <%@ taglib uri="http://jakarta.apache.org/struts/tags-bean" prefix="bean"%>
   <%@ taglib uri="http://jakarta.apache.org/struts/tags-html" prefix="html"%>
   
     类: <logic:notEmpty name="searchForm" property="title"><bean:write name='searchForm' property='title'/>test title</logic:notEmpty>
     变量:<logic:notEmpty name="zero_result_precatalog"> in ${zero_result_precatalog}</logic:notEmpty>.
      <logic:equal name="searchForm" property="listZeroTip" value="allcatalog"> xxx </logic:equal>
     <logic:lessThan value="3" name="index"> xxx </logic:lessThan>
      <logic:greaterEqual value="3" name="index"> xxx </logic:greaterEqual>
     
      //private List<SearchProduct> productlistdatas;
      <logic:iterate id="element" name="searchForm" property="productlistdatas"  indexId="index" > 
       <a class="pro-title" href="${element.productDetailUrl}">${element.productname}</a>
      </logic:iterate>  
      iterate标记
      id 脚本变量的名称,它保存着集合中当前元素的句柄。
   name 代表了你需要叠代的集合,来自session或者request的属性。
   type 是其中的集合类元素的类型
   length属性来指定输出元素的个数
   offset属性指定了从第几个元素开始输出,如此处为1,则表示从第二个元素开始输出。
   <logic:iterate id="country" name="countries">
    <bean:write name="country" property="key"/>:
    <bean:write name="country" property="value"/>
   </logic:iterate>
     
      <bean:write name='searchForm' property='title' />
      <bean:write name="color" />
     
      request.setAttribute("zero_result_precatalog", myForm.getCatalogname());
      SearchForm myForm = (SearchForm) form;   //public class SearchForm extends ActionForm

       页面使用  jsp自带el表达式,如     ${searchForm.navigationLine}       //设置JSP不使用EL : <%@page isELIgnored="true"%>

4)Action基类

     DispatchAction继承自Action类,它是一个抽象类,封装了一些基础方法,来解决使用一个Action处理多个操作.

     get:  xx.do?act=updatexx

     post: <input type="hidden" name="act" value="updatexx" />

     参考:Struts1之Action小结 http://blog.sina.com.cn/s/blog_6ff660880101484s.html

5)Action配置属性详解

<action input="/list/listmain.jsp" name="searchForm" path="/wholesale/search"

scope="request" type="com.b2besoft.web.action.SearchAction">

<forward name="newpage" path="/list/listmain.jsp" contextRelative="true" />

<forward name="totalvitems" path="/productcount.jsp" contextRelative="true" />

<forward name="listzero" path="/list/listzero.jsp" contextRelative="true"/>

</action>

attribute:指定ActionForm保存到指定上下文所使用的属性名,如果不指定attribute属性值,

将使用name属性值作为保存时的属性名。即attribute的默认值就是name属性值。

input: 该Action中相关ActionForm获取用户输入的输入页面,当将ActionForm设为自动验证输入数据,发现不合法数据返回错误时,将返回该页面    

name: 当前Action中用到的ActionForm的名字,其具体信息在配置文件其他地方另有详细定义

scope:指定保存ActionForm上下文的范围。即Action中所用到的ActionForm的生存期,可以为“request”或“session”,随着生存期的设置,该Action也会在相应的时间被创建

validate:如果本属性为true则在Action动作之前其对应的ActionForm的validate方法会自动被调用,一般用以验证用户输入的数据    

forward:设置处理用户请求的Servlet或其它资源如Jsp页面等。如指定了这属性则type属性就会失去作用

严格来说<forward,include,type>属性应该使用且只使用其中的一个。 这属性用于跳转到另一个非Action处理程序中。

unknown: 如果将该属性设置为true,那么就是声明这个Action将处理整个应用中所有未找到相应处理Action的请求,当然,一个应用系统中也只会有一个Action的unknown属性可以设为true    

Prefix:用来匹配请求参数与bean属性的前缀  

Suffix: 用来匹配请求参数与bean属性的后缀  

contextRelative      设为true时表示当前path属性以/开头时,给出的是相对于当前上下文的url。默认为false

 

redirect设置响应返回类型,redirect="true":重定向    缺省值为redirect="false"

 

6)如果想跳转到另外一个action的某个页面,可以这样:

ActionForward actionForward = new ActionForward();

actionForward.setPath("/customer/creditApprManage.do?method=searchCreditLevel&levelName=");

return actionForward;

注:如果需要重定向,只需要给actionForward加一个redirect属性,使用actionForward.setRedirect(true);

 

三、struts2

 

 

  • 大小: 48.7 KB
分享到:
评论

相关推荐

    Struts2漏洞检查工具Struts2.2019.V2.3

    Struts2是一款非常流行的Java Web框架,用于构建企业级应用。然而,随着时间的推移,Struts2在安全方面暴露出了一些重要的漏洞,这给使用该框架的系统带来了潜在的安全风险。"Struts2漏洞检查工具Struts2.2019.V2.3...

    struts1.2驱动包

    Struts1.2驱动包是Java Web开发中一个重要的组件,它是Apache Struts框架的特定版本,用于支持基于Model-View-Controller (MVC)设计模式的应用程序开发。Struts1.2因其稳定性和广泛的功能集而在过去备受推崇,尤其在...

    Struts2视频教程

    ### Struts2核心知识点解析 #### 一、Struts2框架概述 - **定义与特点**:Struts2是一款基于MVC(Model-View-Controller)设计模式的Java Web应用程序框架,它继承了Struts1的优点,同时在设计上更加灵活、易用,...

    全网最全Struts 2 全版本漏洞检测工具,最新struts漏洞更新

    Struts 2是一款基于Java的开源MVC框架,它在Web应用开发中广泛使用,但同时也因其复杂的架构和历史遗留问题,成为了网络安全的焦点。这个标题提到的是一个全面的Struts 2漏洞检测工具,旨在帮助开发者和安全专家识别...

    Struts2VulsTools-Struts2系列漏洞检查工具

    该工具的打开路径为:\Struts2VulsTools-2.3.20190927\Test\bin\Release\Text.exe 2019-09-25: 优化部分EXP在部分情况下被WAF拦截的问题,提高检测成功率,优化自定义上传路径exp,文件所在目录不存在时自动创建...

    Struts所需要的jar

    Struts是一个开源的Java Web应用程序框架,主要用于构建MVC(Model-View-Controller)模式的Web应用。在Java EE世界中,Struts扮演着至关重要的角色,它简化了开发过程,提高了代码的可维护性和可扩展性。SSH框架是...

    最新版本的Struts2+Spring4+Hibernate4框架整合

    项目原型:Struts2.3.16 + Spring4.1.1 + Hibernate4.3.6 二、 项目目的: 整合使用最新版本的三大框架(即Struts2、Spring4和Hibernate4),搭建项目架构原型。 项目架构原型:Struts2.3.16 + Spring4.1.1 + ...

    struts2jar包

    Struts2是一个强大的Java EE应用程序框架,主要用于构建企业级的Web应用。它的核心是MVC(Model-View-Controller)设计模式,可以帮助开发者组织代码,提高开发效率,并且提供了丰富的特性来支持表单验证、国际化、...

    struts2项目开发

    Struts2 项目开发 Struts2 是一个基于 Java Web 的框架,广泛应用于 Web 应用程序的开发。下面将从 Struts2 项目开发的角度,详细介绍 Struts2 框架的应用、开发流程、技术架构、实践经验等方面的知识点。 项目...

    struts2-core.jar

    struts2-core-2.0.1.jar, struts2-core-2.0.11.1.jar, struts2-core-2.0.11.2.jar, struts2-core-2.0.11.jar, struts2-core-2.0.12.jar, struts2-core-2.0.14.jar, struts2-core-2.0.5.jar, struts2-core-2.0.6.jar,...

    Struts2接口文档

    Struts2是一个强大的Java web应用程序开发框架,它基于Model-View-Controller(MVC)设计模式,旨在简化创建用户交互式、数据驱动的web应用的过程。这个“Struts2接口文档”是开发者的重要参考资料,提供了关于...

    搭建struts2框架

    struts2框架的详细搭建 &lt;?xml version="1.0" encoding="UTF-8"?&gt; &lt;!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN" ...

    struts2 chm 帮助文档

    struts2 chm 程序包 org.apache.struts2 接口概要 接口 说明 StrutsStatics Constants used by Struts. 类概要 类 说明 RequestUtils Request handling utility class. ServletActionContext Web-specific ...

    struts2.0整合Struts 1

    Struts 2整合Struts 1,允许开发者利用Struts 1已有的投资,同时享受Struts 2带来的优势,如增强的类型安全和更强大的拦截器机制。 在《Struts 2权威指南--基于WebWork核心的MVC开发》这本书中,作者李纲深入浅出地...

    struts2.2.3加载的核心jar包

    Struts2是一个基于MVC(Model-View-Controller)设计模式的Java Web应用程序框架,它在Web开发领域中被广泛使用,提供了强大的控制层来处理请求、数据绑定、验证和结果展示。Struts2.2.3是Struts2的一个版本,这个...

    Struts升级到Struts2.3.35

    北京时间8月22日13时,Apache官方发布通告公布了Struts2中一个远程代码执行漏洞(cve-2018-11776)。该漏洞可能在两种情况下被触发,第一,当没有为底层xml配置中定义的结果设置namespace 值,并且其上层动作集配置...

    Struts2开发常用jar包

    包含struts2-core-2.5.10.1.jar,struts2-jfreechart-plugin-2.5.10.1.jar,struts2-json-plugin-2.5.10.1.jar,struts2-junit-plugin-2.5.10.1.jar,struts2-bean-validation-plugin-2.5.10.1.jar,struts2-cdi-...

    struts-2.5所有jar包

    Struts2是一个基于MVC(Model-View-Controller)设计模式的开源Java Web框架,它在Web应用开发中被广泛使用。Struts2的核心是Action类,它负责处理用户请求,与模型进行交互,并将结果返回给视图。在Struts2的版本...

    struts2所有jar包程序文件

    Struts2是一个非常著名的Java Web开发框架,由Apache软件基金会维护。它基于MVC(Model-View-Controller)设计模式,极大地简化了构建基于Java EE的Web应用程序的过程。本资源包含"struts2所有jar包程序文件",是...

    struts-config详解

    Struts-config详解 Struts-config.xml 是Struts框架的核心配置文件,它描述了所有的Struts组件。在这个文件中,我们可以配置主要的组件及次要的组件。下面是struts-config.xml文件的主要元素: 一、struts-config....

Global site tag (gtag.js) - Google Analytics