struts2例子

合集下载

Struts2学习之二--Struts2标签介绍

Struts2学习之二--Struts2标签介绍

Struts2学习之二--Struts2标签介绍热12已有 14625 次阅读 2009-07-12 18:53[顶]3G移动--Android开发工程师全能班(转) Struts2学习之二--Struts2标签介绍在上一篇文章《为Struts 2.0做好准备》中,我过于详细地介绍了Struts 2.0开发环境和运行环境的配置,所以,本文很少涉及的以上两方面的细节。

如果,您看完《为Struts 2.0做好准备》后,还有什么不明白,或者没法运行文中例子,请联系我。

我的E-MAIL:Max.M.Yuan@。

在介绍常用标志前,我想先从总体上,对Struts 1.x与Struts 2.0的标志库(Tag Library)作比较。

分类将标志库按功能分成HTML、Tiles、Logic和Bean等几部分严格上来说,没有分类,所有标志都在URI为“/struts-tags”命名空间下,不过,我们可以从功能上将其分为两大类:非UI标志和UI标志表达式语言(expression languages)不支持嵌入语言(EL)OGNL、JSTL、Groovy和Velcity以上表格,纯属个人总结,如有所不足或错误,请不吝指正好了,我要开始介绍“常用”(这里所谓的“常用”,是指在已往工作中使用Struts里经常用到的)的标志了。

1.非UI标志o if、elseif和else描述:执行基本的条件流转。

参数:名称必需默认类型描述备注test 是Boolean 决定标志里内容是否显示的表达式else标志没有这个参数id 否Object/String 用来标识元素的id。

在UI和表单中为HTML的id属性例子:<%@ page contentType="text/html; charset=UTF-8" %><%@ taglib prefix="s" uri="/struts-tags" %><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"><html><head><title>Condition Flow</title></head><body><h3>Condition Flow</h3><!--这里有点小技巧:本来可以用#[0]来获得,请求中name的值。

struts2

struts2

—高级软件人才实作培训专家! 高级软件人才实作培训专家!
搭建Struts2开发环境
搭建Struts2环境时,我们一般需要做以下几个步骤的工作: 1》找到开发Struts2应用需要使用到的jar文件. 2》编写Struts2的配置文件 3》在web.xml中加入Struts2 MVC框架启动配置
北京传智播客教育
北京传智播客教育
—高级软件人才实作培训专家! 高级软件人才实作培训专家!
搭建Struts2开发环境--Struts2在web中的启动配置
在struts1.x中, struts框架是通过Servlet启动的.在struts2中, struts框架是通过Filter启动的.他在web.xml中的配置如下:
—高级软件人才实作培训专家! 高级软件人才实作培训专家!
Struts2
讲师: 讲师:黎活明
北京传智播客教育
—高级软件人才实作培训专家! 高级软件人才实作培训专家!
Struts2
Struts2是在WebWork2基础发展而来的.和struts1一样, Struts2也属于MVC框架. 不过有一点大家需要注意的是:尽管Struts2和struts1在名字上的差别不是很大,但 Struts2和struts1在代码编写风格上几乎是不一样的.那么既然有了struts1,为何还要 推出struts2.主要是因为struts2有以下优点:
北京传智播客教育
—高级软件人才实作培训专家! 高级软件人才实作培训专家!
第一个Struts2应用--HelloWorld
在默认的配置文件struts.xml 中加入如下配置:
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN" "/dtds/struts-2.0.dtd"> <struts> <package name="itcast" namespace="/test" extends="struts-default"> <action name="helloworld" class="cn.itcast.action.HelloWorldAction" method="execute" > <result name="success">/WEB-INF/page/hello.jsp</result> </action> </package> </struts>

Struts2标签使用

Struts2标签使用

Struts2标签使用(1):<s:textfield> ---- 文本输入框使用:<s:textfield name=”实体Bean。

属性”></s:textfield>(2):<s:textarea> ----- 文本域输入框使用:<s:textarea name=”实体Bean。

属性”></s:textarea>(3):<s:password> ----- 密码输入框使用:<s:password name=”实体Bean。

属性”></s:password>前三个基本都是一样的。

如果是要显示值的话可以这样:value = “实体Bean。

Get***()”。

(4):<s:radio list=””> ---- 单选按钮使用:<s:radio list=””>其中list 属性是必须要有的。

<1>:第一种方式:list = “#{‘male’:’男’,’female’:’女’}”<2>:第二中方式:list = “#request/session.list”。

---- 与action 结合起来了。

如果要默认选中的话后面加上value = “”.也可以通过javascript 的方式来默认选中。

(5):<s:url/> --- url连接<s:a/> --- 超链接这两个标签一般结合起来来使用。

使用:<s:url id = “id” action = “userAction”/><s:a href=”%{id}”/>(6):<s:form/> --- 获取相应form的值使用:<1>:<s:form action = “userAction”><2>:<s:url id=”userId” action = “userAction”> -- 定义了一个userId的指向userActionde 路径<s:form action=”%{userId}”>(7):<s:submit/> ---- 提交标签(8):<s:reset/> ---- 重置标签(9):<s:hidden/> ---- 隐藏域标签使用:<s:hidden name=”实体Bean。

Struts2简单示例

Struts2简单示例

Struts2增删改查例子UserBean//要添加set,getpublic class UserBean{private Long id;private String name;private String password;private int age;private Date birthday;private Long sex;private Set<Long> likes;private String des;//描述}public class LikeBean{private Long id;private String name;}FormActionpublic class FormAction{//属性要生成get,set//标记(添加,修改)private String tip;private UserBean userBean;private List<LikeBean> likeList;private List<UserBean> userList;//到列表页面public String list(){userList =new ArrayList<UserBean>();userList.add(new UserBean("abc",19,new Date())); userList.add(new UserBean("def",70,new Date())); userList.add(new UserBean("ghi",40,new Date()));return"list";}//到添加页面public String toAdd(){likeList =new ArrayList<LikeBean>();likeList.add(new LikeBean(new Long(1),"上网")); likeList.add(new LikeBean(new Long(2),"读书")); likeList.add(new LikeBean(new Long(3),"游戏"));tip ="add";return"info";}//添加方法,Struts2会自动把对应的值赋值给userBeanpublic String add(){System.out.println(userBean);return"toList";}//到更新页面,取出值,设置标记public String toUpdate(){likeList =new ArrayList<LikeBean>();likeList.add(new LikeBean(new Long(1),"上网"));likeList.add(new LikeBean(new Long(2),"读书"));likeList.add(new LikeBean(new Long(3),"游戏"));tip ="update";System.out.println("update name:"+userBean.getName()); userBean =new UserBean("update",100,new Date());userBean.setId(new Long(101));userBean.setSex(new Long(2));userBean.setDes("Struts2用户");Set<Long> likes =new HashSet<Long>();likes.add(new Long(2));likes.add(new Long(3));userBean.setLikes(likes);return"info";}//更新方法public String update(){System.out.println(userBean);return"toList";}//删除方法public String delete(){System.out.println("del name:"+userBean.getName());return"toList";}}struts.xml配置<struts><package name="form"namespace="/form"extends="struts-default"> <!-- 使用通配符调用多个方法,method为*对应的字符串 --><action name="userAction_*"class="com.struts2.form.FormAction" method="{1}"><!-- 方法返回的字符串对应name,再转发到页面 --><result name="list">/form/list.jsp</result><result name="info">/form/info.jsp</result><!-- 重定向Action,可以有Action名字和空间,参数 --><result name="toList"type="redirectAction"><!-- 空间参数,不写代表和当前Action同一个空间<param name="namespace">form</param>--><!-- 重定向Action的名称 --><param name="actionName">userAction_list</param><!-- url带的参数,${}是动态参数,值为Action的属性userBean中name的值 --><param name="userName">${}</param><param name="userAge">${userBean.age}</param></result></action></package></struts>jsp页面1.list(列表页面)<!-- 添加标签 --><%@ taglib prefix="s" uri="/struts-tags" %><div><ahref="${pageContext.request.contextPath}/form/userAction_toAdd.action">添加</a></div><div><!-- 判断用户是否为空 --><s:if test="(userList!=null)&&(!userList.isEmpty())"><div>用户列表</div><!-- 遍历用户 --><s:iterator value="#erList"id="u"status="st"><s:property value="#st.index+1"/>&nbsp;<s:property value="#"/>&nbsp;<s:property value="#u.age"/>&nbsp;<!-- 格式化日期 --><s:date name="#u.birthday"format="yyyy-MM-dd HH:mm:ss"/>&nbsp;&nbsp;&nbsp;&nbsp;<ahref="${pageContext.request.contextPath}/form/userAction_toUpdate.action?use=${}">修改</a>&nbsp;&nbsp;&nbsp;&nbsp;<ahref="${pageContext.request.contextPath}/form/userAction_delete.action?userB =${}">删除</a><br/></s:iterator></s:if><s:else><div>无用户</div></s:else></div>.jsp(添加和修改页面)<!-- 添加标签 --><%@ taglib prefix="s" uri="/struts-tags" %><!-- 显示标记(添加/修改) --><s:property value="tip"/><!-- action="userAction_%{tip}"tip为Action中的标记变量 submit不加method --><s:form action="userAction"namespace="/form"method="POST"><!-- userBean.id为Action中属性userBean中id的值 --><s:hidden name="userBean.id"></s:hidden><s:textfield name=""label="用户名"></s:textfield><s:textfield name="userBean.age"label="年龄"></s:textfield><s:textfield name="userBean.birthday"label="生日"><!-- 格式化日期 --><s:param name="value"><s:date name="userBean.birthday" format="yyyy-MM-dd"/></s:param></s:textfield><!-- 密码不能回填 --><s:password name="userBean.password"label="密码"></s:password><s:textarea name="userBean.des"label="描述"cols="35"rows="8"></s:textarea><!-- 这种checkbox显示出来是一行只有一个checkbox<s:iterator value="likeList"><s:checkbox name="userBean.likes" label="%{name}" fieldValue="%{id}"></s:checkbox></s:iterator>--><!-- 这种是一行多个 --><s:checkboxlist list="likeList"name="userBean.likes"listKey="id"listValue="name"label="爱好"></s:checkboxlist><!-- 下拉框<s:select list="likeList" listKey="id" listValue="name" headerKey="-1" headerValue="请选择爱好"></s:select>--><!-- value="1" 设置默认,但是好像设置了不能回填 --><s:radio list="#{'1':'男','2':'女'}"label="性别"name="userBean.sex"></s:radio><s:submit value="%{tip}"id="submitBut"method="%{tip}"></s:submit></s:form>。

struts2入门教程一(环境搭建,基本案例实现)CSDN

struts2入门教程一(环境搭建,基本案例实现)CSDN

Struts2入门初步需掌握1.struts2概述2.struts2环境搭建(第一个struts2的应用程序)3.struts.xml文件配置详解4.struts2请求的URL的搜索路径的顺序概述5.struts2工作原理概述6.struts2指定多个配置文件7.struts2动态方法调用8.使用通配符定义action一:简介Struts 2是Struts的下一代产品,是在 struts 1和WebWork的技术基础上进行了合并的全新的Struts 2框架。

其全新的Struts 2的体系结构与Struts 1的体系结构差别巨大。

Struts 2以WebWork为核心,采用拦截器的机制来处理用户的请求,这样的设计也使得业务逻辑控制器能够与Servlet API完全脱离开,所以Struts 2可以理解为WebWork的更新产品。

虽然从Struts 1到Struts 2有着太大的变化,但是相对于WebWork,Struts 2的变化很小。

二:环境搭建搭建Struts2环境时,我们一般需要做以下几个步骤的工作:1.找到开发Struts2应用需要使用到的jar文件.下载官网:/download.cgi#struts221解压后:开始学习使用依赖的最基本的jar 包2:编写Struts2的配置文件解压其中一个案例在此目录下找到struts.xml 文件先拷贝到项目的src 下。

再对起进行修改。

删除剩余如下代码:[html]01.<?xml version ="1.0"encoding ="UTF-8" ?> 02.<!DOCTYPE struts PUBLIC 03."-//Apache Software Foundation//DTD StrutsConfiguration 2.3//EN" 04."/dtds/struts-2.3.dtd"> 05.06.<struts> 07.08. </struts>无法加载插件。

struts2常见面试题

struts2常见面试题

struts2常见面试题Introduction:Struts2是一种用于开发Java Web应用程序的开源Web应用框架。

在软件工程领域,Struts2常常是面试中的热门话题。

本文将介绍一些常见的Struts2面试题,并提供详细解答和示例。

Question 1: 什么是Struts2框架?它的主要特点是什么?Struts2是一个基于MVC设计模式的Web应用框架。

它通过集成多个核心组件(如拦截器、过滤器、表单验证等)提供了一套丰富的功能,用于简化开发和管理Java Web应用程序。

Struts2的主要特点包括:1. 松耦合:Struts2使用基于配置的方式来管理组件之间的依赖关系,降低了模块之间的耦合。

2. 灵活性:开发人员可以根据自己的需求进行扩展和定制,以适应不同的项目需求。

3. 可测试性:Struts2的组件松耦合特点使得单元测试变得容易,并且可以方便地模拟用户请求进行测试。

Question 2: Struts2的核心组件有哪些?Struts2的核心组件包括:1. Action:处理用户请求的核心组件,负责接收请求并执行相应的业务逻辑。

2. Interceptor:用于对请求进行预处理和后处理的拦截器组件。

3. Result:负责生成响应结果,可以是页面视图或其他格式的数据(如JSON、XML等)。

4. FilterDispatcher:负责将请求分发给合适的Action处理。

5. ValueStack:用于存储Action处理的结果数据,支持OGNL表达式以便于数据的访问和操作。

Question 3: 如何定义一个Struts2的Action?在Struts2中,可以通过以下几种方式来定义一个Action:1. 实现Action接口:通过实现Action接口,并提供相应的业务方法来处理请求。

2. 继承ActionSupport类:ActionSupport是一个提供了一些方便方法的抽象类,可以直接继承并实现自己的业务逻辑。

01、struts2(Struts2开发入门 、常用配置、参数传递) - 副本

01、struts2(Struts2开发入门 、常用配置、参数传递) - 副本

1. Struts2简介1.1. 什么是Struts21.1.1. Struts2的概念Struts2是轻量级的MVC框架,它主要解决了请求分发的问题,重心在于控制层和表现层。

轻量级,指的是Struts2具有较低的侵入性,就是它对我们业务代码的依赖程度很低,简单来说,在使用Struts2框架时,我们的业务代码中基本上不需要import它的包。

Struts2实现了MVC,满足了MVC设计思想。

在我们使用Struts2做开发的时候,就相当于使用了MVC,这是Struts2自动帮助我们实现的,是默认的、隐含的,我们不需要再写特别的代码来实现MVC了。

作为一个框架,Struts2提供了一系列的API,我们可以使用它们来简化代码的编写,从而提升开发效率。

这些API复用程度很高,对业务代码的依赖性也很小,甚至很多是Struts2自动调用的,因此在很大程度上,我们的开发变得可以复用。

Struts2解决请求分发的问题,我们会在后面为什么使用Struts2中讲解。

重心在控制层和表现层,是纵观整个Struts2理论课程来看的,从中我们会体会到这一点,随着大家对Struts2的逐步了解,届时我们再回顾这一点。

1.1.2. 什么是MVCMVC是代码的分层思想,是软件设计领域经典的设计模式。

它根据代码功能的不同,将一个软件的代码分为3部分,即模型、视图、控制器,这3部分代码的含义和功能如下。

1、M-Model 模型模型(Model)的职责是负责业务逻辑。

包含两层:业务数据和业务处理逻辑。

比如实体类、DAO、Service都属于模型层。

2、V-View 视图视图(View)的职责是负责显示界面和用户交互(收集用户信息)。

属于视图的组件是不包含业务逻辑和控制逻辑的JSP。

3、C-Controller 控制器控制器是模型层M和视图层V之间的桥梁,用于控制流程。

比如:在Servlet项目中的单一控制器ActionServlet。

Struts2详细实例教程

Struts2详细实例教程

Struts2(上)一、经典的MVC模式二、Struts1.x对MVC的实现三、Struts1.x的主要组件和作用组件作用ActionServlet 中央控制器Action 分控制器,调用JavaBean实现业务逻辑,Action可以分为Action、DispatchAction等不同类型ActionForm 封装参数,实现服务器验证,文件上传等Forward 转发到目的地,可以是JSP,也可以是另一个ActionStruts-config.xml 配置文件,配置有ActionForm,Action,Forward等,通过XML解析,然后使用反射技术使用该文件Struts标签库和JSTL类似,和Struts-config.xml、ActionForm、Action等对象可以紧密集成四、Struts1.x 开发实例-登录程序见案例。

五、Struts2(WebWork)的MVCStruts2的MVC架构六、Struts2的主要组件组件作用FilterDispatcher 起中央控制器作用的过滤器Action 处于Model层的Action,调用JavaBean实现业务逻辑struts.xml 核心配置文件,配置有Action、Result等result 和forward类似,转发的目的地,支持多种视图技术。

七、Struts2的实例-登录在MyEclipse环境中建立一个新的web工程,名称“Struts2Login”,存放路径“f:\Struts2Login”。

在Struts2.0.11版本中找到war包struts2-blank-2.0.11.war,解开该war包,在WEB-INF/lib 目录下复制出所有的jar包,这些jar包就是一个Struts2程序所需要的基础jar包,把它们复制到新建的web工程的WEB-INF/lib目录中。

在src目录下建立一个类,包名mypack,类名UserAction,其代码如下:package mypack;import com.opensymphony.xwork2.ActionSupport;public class UserAction extends ActionSupport {private String username;private String userpass;public String getUsername() {return username;}public void setUsername(String username) {ername = username;}public String getUserpass() {return userpass;}public void setUserpass(String userpass) {erpass = userpass;}@Overridepublic String execute() throws Exception {if ("Mike".equals(username) && "123".equals(userpass)|| "张三".equals(username) && "abc".equals(userpass))return "success";elsereturn "error";}}在src目录下建立Struts2的配置文件struts.xml,内容如下:<?xml version="1.0" encoding="UTF-8" ?><!DOCTYPE struts PUBLIC"-//Apache Software Foundation//DTD Struts Configuration 2.0//EN""/dtds/struts-2.0.dtd"><struts><!-- 定义包管理配置的action 继承struts-default.xml中的配置 --><package name="actions" extends="struts-default"><!-- 定义Action(login.action) --><action name="login" class="erAction"><!-- 定义转发路径对应的字符串名 --><result name="success">/Success.jsp</result><result name="error">/Error.jsp</result></action></package></struts>修改web.xml,在其中加入一个过滤器,过滤/*路径。

STRUTS2标签中符号#,$,%的用法示例

STRUTS2标签中符号#,$,%的用法示例

#、%和$符号在OGNL表达式中经常出现,而这三种符号也是开发者不容易掌握和理解的部分。

在这里笔者简单介绍它们的相应用途。

1.#符号的用途一般有三种。

1)访问非根对象属性,例如示例中的#session.msg表达式,由于Struts 2中值栈被视为根对象,所以访问其他非根对象时,需要加#前缀。

实际上,#相当于ActionContext. getContext();#session.msg表达式相当于ActionContext.getContext().getSession(). getAttrib ute(”msg”) 。

2)用于过滤和投影(projecting)集合,如示例中的persons.{?#this.age>20}。

3)用来构造Map,例如示例中的#{’foo1′:’bar1′, ’foo2′:’bar2′}。

2.%符号%符号的用途是在标志的属性为字符串类型时,计算OGNL表达式的值。

如下面的代码所示:构造Map<s:set name=”foobar” value=”#{’foo1′:’bar1′,‘foo2′:’bar2′}” /><p>The value of key “foo1″ is <s:property value=”#foobar['foo1']” /></p><p>不使用%:<s:url value=”#foobar['foo1']” /></p><p>使用%:<s:url value=”%{#foobar['foo1']}” /></p>3.$符号$符号主要有两个方面的用途。

在国际化资源文件中,引用OGNL表达式,例如国际化资源文件中的代码:reg.agerange=国际化资源信息:年龄必须在${min}同${max}之间。

struts2_超链接与action使用

struts2_超链接与action使用

Struts2 超链接和 action 使用Struts2.0 链接标签Web 应用区别于普通的站点之处在于Web 应用可以创建一个动态的响应。

为了使从一个页面中链接一个动态数据变得简单,Struts2 框架提供了一系列的标签。

Struts 标签的一种用法是创建链接到其他 Web 资源,特别是针对那些在本地应用中的资源。

1.普通链接Web 程序中最普通的应用是链接到其他页面,下面看 Welcome.jsp。

<%@ page contentType="text/html; charset=UTF-8" %> <%@ taglib prefix="s" uri="/struts-tags" %><html><head><title>Welcome</title><link href="<s:url value="/css/tutorial.css"/>" rel="stylesheet"type="text/css"/></head><body><h3>Commands</h3><ul><li><a href="<s:url action="Login_input"/>">Sign On</a></li><li><a href="<s:url action="Register"/>">Register</a></li></ul></body></html>1.1 说明1.<%@ taglib prefix="s" uri="/struts -tags" %>此句表示导入 struts 标签,并以 s 为前缀。

SpringSide3中的Struts2

SpringSide3中的Struts2

在SpringSide 3 中,使用的MVC框架是Struts 2。

Struts 2 向对于Struts 1 来说,具有相当多的优点,有很多人都说,用过Struts 2之后,再也不想看Struts 1了。

然而,任何东西都有它的复杂性,Struts 2也不例外,SpringSide 3做了很多工作来简化Struts 2 的使用。

先来说说Struts 2的特点:1、编写Action变得简单了,Action变成了简单的POJO,再也不用和ActionForm、ActionForward打交道了,返回的时候直接返回字符串即可。

如果要访问Servlet API,则直接使用ServletActionContext类的静态方法。

2、Struts 2提供了插件机制,允许我们自己为它编写插件,当然,要我自己写是不现实的,但是面对别人写的琳琅满目的插件,我一样会昏头。

再网上随便一搜,就可以发现40多种Struts 2插件。

SpringSide 3选择的CodeBehind,就是一种Struts 2插件,它的目的是为了简化配置。

3、Struts 2提供了拦截器机制,之所以编写Action的任务那么简单,靠的都是这些拦截器,比如它们可以自动解析Web表单和URL参数,把它们注入到Action中。

4、Struts 2提供了丰富的taglib,当然,丰富也代表着我们要化更多的时间去学习。

5、Struts 2依然提供了Validator和i18n支持。

等等...下面,我们来看看SpringSide 3是怎么使用Struts 2的吧。

SpringSide 3的主要目标是降低我们使用Struts 2的复杂性,所以,它选择了这些办法:1、没有使用Validator和i18n,对数据的验证交给了JQuery,这变成了表现层的任务,而且JQuery也可以使用AJAX从服务器端进行验证。

至于i18n,江南白衣说小网站用不上。

2、没有使用Struts 2的UI标签,当然也就没有使用FreeMaker或SiteMesh了。

struts2 漏洞原理

struts2 漏洞原理

struts2 漏洞原理Struts2 是一种开放源代码的 Java Web 应用框架,被广泛应用于构建 Web 应用程序。

然而,Struts2 框架的一个漏洞却给许多应用程序带来了安全隐患。

本文将解释Struts2 漏洞的原理,并提供对于修复漏洞的一些方法。

Struts2 框架漏洞的原理Struts2 框架漏洞源于框架自身的设计缺陷。

设计缺陷使得攻击者可以利用恶意的输入来欺骗 Struts2 框架,从而在应用程序中执行任意的代码。

这种攻击就被称为“远程代码执行攻击”( Remote Code ExecutionAttack )。

Struts2 框架的漏洞主要是由于以下两点原因所导致的:· Struts2 使用了 OGNL (Object-Graph Navigation Language) 来解析 EL (Expression Language) 表达式,但没有正确地对表达式进行过滤,这使得恶意行为成为可能。

· Struts2 框架中的相当一部分功能是通过拦截器来实现的。

攻击者可以利用 Struts2 框架中的拦截器漏洞,绕过应用程序的权限控制来访问关键数据或者执行任意代码。

这两点都是 Struts2 框架漏洞的主因。

攻击者可以利用这两个漏洞来构建恶意的请求,并欺骗 Struts2 框架来执行恶意代码。

导致 Struts2 漏洞的例子为了更好地理解 Struts2 漏洞,可以通过一些例子来说明。

以下是一些可能导致 Struts2 框架漏洞的例子:· 未正确过滤用户输入。

比如在 Struts2 编译以数据表格为基础的应用程序时,如果没有过滤 script 标记,那么攻击者就可以通过执行JavaScript来远程控制代码,这就是远程代码执行攻击。

· XML SSI 漏洞。

攻击者可以通过将恶意代码嵌入到XML 消息中来利用该漏洞。

此漏洞允许攻击者利用Struts2 使用 XML 包含的注入布局中的初始资源解析器来绕过安全检查并完成任意文件读取/写入操作。

java相关的Struts2-Json插件的使用例子

java相关的Struts2-Json插件的使用例子

The JSO N p lug in p ro vid es a "js on" re sult type that se ria lizes a ctio ns into JSO N. The se ria liza tion p ro cess is re curs ive, me aning that the w ho le ob je ct g r a ph, s ta rting on the a ctio n class (b ase class not include d) w ill b e s e ria lize d (r o ot ob je ct ca n be cus to mize d us ing the "ro ot" a ttribute). If the inte rcep to r is used, the a ction w ill b e pop ulate d fro m the JSO N co ntent in the re ques t, thes e a re the rules o f the inte rce pto r:1The "conte nt-type" must be "a pp lica tio n/jso n"2The JSO N co nte nt mus t b e we ll fo rme d, s ee js on.o rg fo r g ra mma r.3Actio n mus t ha ve a p ub lic "s ette r" me tho d fo r fie ld s tha t mus t b e p o pula ted.4Sup po rte d type s fo r p op ula tio n a re: P rimitive s (int,long...String), Da te, Lis t, Map, P rimitive Arra ys, O the r cla ss (mo re o n this la te r), a nd Array o f O the r clas s.5Any o b je ct in JSO N, tha t is to b e p op ula ted ins ide a lis t, o r a ma p, w ill b e o f type Map (ma p p ing fro m p rope rtie s to va lues), a ny who le numbe r w ill b e o f type Long, a ny de cima l numbe r w ill be o f type Doub le, and a nya rra y o f type Lis t.JSON插件提供一种叫做“json”返回类型,来将action序列化成JSON 格式。

struts2(checkbox_radio_select)表单标签的应用及详细事例

struts2(checkbox_radio_select)表单标签的应用及详细事例

一、表单标签_checkbox复选框如果集合为list<s:checkboxlist name="list"list="{'Java','.Net','RoR','PHP'}"value="{'Java','.Net'}"/>生成如下html代码:<input type="checkbox"name="list"value="Java" checked="checked"/><label>Java</label><input type="checkbox"name="list"value=".Net" checked="checked"/><label>.Net</label><input type="checkbox"name="list" value="RoR"/><label>RoR</label><input type="checkbox"name="list"value="PHP" /><label>PHP</label><input type="checkbox"name="list"value="PHP" /><label>PHP</label>************************************************ *****<br>如果集合为MAP<s:checkboxlist name="map"list="#{1:'瑜珈用品',2:'户外用品',3:'球类',4:'自行车'}"listKey="key"listValue="value"value="{1,2,3}"/>生成如下html代码:<input type="checkbox"name="map"value="1" checked="checked"/><label>瑜珈用品</label><input type="checkbox"name="map"value="2" checked="checked"/><label>户外用品</label><input type="checkbox"name="map"value="3" checked="checked"/><label>球类</label><input type="checkbox"name="map"value="4"/><label>自行车</label>******************************************************<br>如果集合里存放的是javabean(id和name为Person的属性)<%Person person1 = new Person(1, "第一个");Person person2 = new Person(2, "第二个");List<Person> list = new ArrayList<Person>();list.add(person1);list.add(person2);request.setAttribute("persons", list);%><s:checkboxlist name="beans"list="#request.persons"listKey="id"listValue="name"/>生成如下html代码:<input type="checkbox"name=“beans" value="1"/><label>第一个</label><input type="checkbox"name=“beans" value="2"/><label>第二个</label>************************************************ ******<br>表单标签_radio单选框<a href="radio.jsp">测试</a><br>表单标签_select单选框<a href="select.jsp">测试</a>代码运行结果如下:----------------------------------------------------------------------------------------------------------------------------二、表单标签_radio下拉选择框如果集合里存放的是javabean(id和name为Person的属性) <%Person person1 = new Person(1, "第一个");Person person2 = new Person(2, "第二个");List<Person> list = new ArrayList<Person>();list.add(person1);list.add(person2);request.setAttribute("persons", list);%>< s:radio name="beans" list="#request.persons" listKey="id"listValue="name"/> 生成如下html代码:<input type="radio"name="beans"id="beans1" value="1"/><label>第一个</label><input type="radio"name="beans"id="beans2" value="2"/><label>第二个</label>************************************************ **************<br>该标签的使用和checkboxlist复选框相同。

Struts2入门经典实例

Struts2入门经典实例

写一个Steuts2的经典入门案例,怕忘记啊,有时候突然记不起知识概念了,所以还是记个笔记,网络上找了几个,发现部署出来要报错,最后还是自己写一个比较靠谱。

做了一个登陆程序作为入门例子。

登陆会去交互,并返回页面,比较适合以后扩展的项目,容易理解!例子:登陆的Struts2案例环境:IDE工具:Myeclipse , Tomcat6.0所需jar包:struts2-core-2.1.8.1.jarstruts2-json-plugin-2.1.8.1.jarxwork-core-2.1.6.jarcommons-fileupload-1.2.1.jarfreemarker-2.3.15.jarjunit4.4.jarognl-2.6.7.jar步骤:1. 创建一个web project项目2.导入Struts2所需jar包3.配置web.xml4.配置struts2.xml5.写action类(LoginUser.java)6.写jsp页面7.启动tomcat.运行项目项目最后截图:开始:1.创建一个项目还是截图,项目名称为:Struts2SpExa2.导入所需jar包导入所需jar包到项目的lib文件夹下(或者通过Build Path导入也可)3.在WEB-INF下面的web.xml中配置:配置拦截器和起始页面[html]view plain copy print?01.<?xml version ="1.0" encoding ="UTF-8"?> 02.<web-app version ="2.5" 03.xmlns ="/xml/ns/javaee" 04.xmlns:xsi ="/2001/XMLSchema-instance" 05.xsi:schemaLocation ="/xml/ns/javaee 06./xml/ns/javaee/web-app_2_5.xsd"> 07.<filter> 08.<filter-name>struts2</filter-name> 09.<filter-class> 10.org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter 11.</filter-class> 12.</filter> 13.14.<filter-mapping> 15.<filter-name>struts2</filter-name> 16.<url-pattern>/*</url-pattern> 17.</filter-mapping> 18.<welcome-file-list> 19.<welcome-file>/WEB-INF/jsp/login.jsp </welcome-file> 20.</welcome-file-list> 21.22. </web-app>4.配置struts.xml配置strust2要调用的action[html] view plain copy print ?01.<?xml version ="1.0" encoding ="UTF-8"?> 02.<!DOCTYPE struts PUBLIC 03."-//Apache Software Foundation//DTD Struts Configuration 2.0//EN" 04."/dtds/struts-2.0.dtd"> 05.<!--配置struts action > 06.<struts> 07.<package name ="todayMZ" extends ="struts-default" namespace ="/"> 08.<action name ="loginUser" class ="erAction"> 09.<result name ="success">/WEB-INF/jsp/success.jsp </result> 10.<result name ="fail">/WEB-INF/jsp/fail.jsp </result> 11.</action> 12.</package> 13. </struts>5.写action 类(LoginUser.java)这个类主要用于struts2跳转到这个action 后。

struts2标签详解

struts2标签详解

Struts2 标签详解详细的说明了struts2所有标签由整理版权属 以及原作者。

由于标签太多难做目录索引,如果你觉得有目录索引更好,请到/p/myjdemo/downloads/list 下载CHM版本的Struts2标签详解,谢谢。

aa标签创建一个HTML超链接,等价于HTML 的<a href=""....示范代码:<s:a href="login.action">登陆</s:a>action使用action标签可以允许在JSP页面中直接调用Action,因为需要调用Action,故可以指定需要被调用Action的name以及namespace。

如果指定了executeResult参数的属性值为true,该标签还会把Action的处理结果(视图支援)包含到本页面中来。

action标签的属性:id:可选属性,该属性将会作为该Action的引用IDname:必填属性,指定该标签调用哪个Actionnamespace:可选,指定该标签调用的Action所在的namespace. executeResult:可选,指定是否要将Action的处理结果页面包含到本页面。

默认是false,即不包含ignoreContextParams:可选,它指定该页面中的请求参数是否需要传入调用的Action、默认是false,即将本页的请求参数传入被调用的Action。

下面是本示例应用中的Action类,包含连个处理逻辑。

代码如下public class TagAction extednds ActionSupport{//封装用户请求参数的author属性private String author;//author的get和set的方法,省略……public String execute() throws Exception{return "done";}public String login() throws Exception{ServletActionContext.getRequest().setAttribute("author",getAuthor()); return "done";}}上面的Action类包含两个处理逻辑,可以在struts.xml文件中通过指定method属性来将该Action类映射成两个逻辑Action。

Struts2 中拦截器和Action的调用关系

Struts2 中拦截器和Action的调用关系
<!--注意,每一个action都有一个默认的拦截器,如果指定了自定义的拦截器,那么默认的拦截器就失去作用了,所以这里要再加上默认的拦截器-->
</action>
<action name="action2" class="com.suo.actions.Action2">
this.password = password;
}
public String execute()
{
System.out.println("action2 invoke !");
return SUCCESS;
}
public String execute()
{
System.out.println("action1 invoke !");
return SUCCESS;
}
}
复制代码
复制代码
Action2.java:
public class MyInterceptor implements Interceptor {
@Override
public void destroy() {
// TODO Auto-generated method stub
System.out.println("destroy invoke !");
}
@Override
public void init() {
// TODO Auto-generated method stub
System.out.println("init invoke !");

Struts2返回JSON数据的具体应用范例

Struts2返回JSON数据的具体应用范例

Struts2返回JSON数据的具体应用范例早在我刚学Struts2之初的时候,就想写一篇文章来阐述Struts2如何返回JSON数据的原理和具体应用了,但苦于一直忙于工作难以抽身,渐渐的也淡忘了此事。

直到前两天有同事在工作中遇到这个问题,来找我询问,我又细细地给他讲了一遍之后,才觉得无论如何要抽一个小时的时间来写这篇文章,从头到尾将Struts2与JSON的关系说清楚。

其实网络中,关于这个问题的答案已是海量,我当初也是从这海量的答案中吸收精华,才将“Struts2返回JSON数据”这个问题搞清楚的。

但是这些海量的答案,有一个共同的缺陷,就是作者们只关注问题核心,即“如何在具体的Struts2应用中返回JSON数据到客户端”如何实现,而对于"为何要这样实现"以及实现的本质却解释的不甚了了,在笔者看来这只是“授人以鱼”而非笔者所推崇的“授人以鱼的同时,授人以渔”。

在这篇文章中,笔者将总结前辈们的经验,并结合自己的理解,来从理论到实践由浅入深的说明“Struts2返回JSON数据”这一问题。

JSON(JavaScript Object Notation)首先来看一下JSON官方对于“JSON”的解释:JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式。

易于人阅读和编写。

同时也易于机器解析和生成。

它基于JavaScript Programming Language, Standard ECMA-262 3rd Edition - December 1999的一个子集。

JSON采用完全独立于语言的文本格式,但是也使用了类似于C语言家族的习惯(包括C, C++, C#, Java, JavaScript, Perl, Python等)。

这些特性使JSON成为理想的数据交换语言。

JSON建构于两种结构:“名称/值”对的集合(A collection of name/value pairs)。

struts2例子三【Action】整理文

struts2例子三【Action】整理文

struts2例⼦三【Action】整理⽂Action 的配置是 Struts2 框架的⼀个基础⼯作单元,每⼀个 Action 的配置都有对应的处理类,当⼀个请求和 Action 的 name 相匹配时,框架将根据所配置的 Action 映射来决定对请求的处理。

1、Action 映射配置在 Action 映射中可以指定 result types 、异常处理器( exception handlers )及拦截器,但是,只有Action 的 name 属性是必需指定的,其他属性也可以在 package 范围内进⾏定义,供该 package 下配置的所有 Action 引⽤。

如:<action name="Logon" class="tutorial.Logon"><result name="input">Logon.jsp</result></action>2、Action 名称及命名注意:如果在你的 action 的 name 中包含有斜线(如: <action name="xxxxxx/xxxxxx" class="xxxxxx.xxxxx"/> ),你需要在 struts.xml 中进⾏如下配置: <constant name="struts.enable.SlashesInActionNames" value="true"/> ,但是,启⽤该配置也会产⽣⼀些副作⽤。

具体-。

-问度娘警告:谨慎使⽤在 action 名称中包含点 (er) 、斜线 (create/user) 和横线 (create-user) 的情况,虽然 action 的名称定义⾮常灵活,但是,当在 action 的 name 中使⽤点、斜线或横线时,应该谨慎。

struts2 实验报告

struts2 实验报告

1.系统分析与设计1.1系统功能描述本系统是个非常简单的注册、登录系统。

本系统的实现是基于Struts2、Spring、Hibernate三个框架,系统功能单一,业务逻辑简单。

当用户注册信用户时,就是向系统中增加一个新用户,对应的数据库增加一条记录。

当用户输入注册信息时,系统提供了基本的输入验证判断用户输入是否合法,只有当用户输入满足基本输入要求时,才会被提交到实际的登录系统,进行实际的登录处理。

系统还使用了随机产生的图形验证码来防止刷新,防止用户通过单击浏览器的书安心按钮来重复注册多个用户。

系统还提供了一种Ajax方式来验证用户输入的注册名是否有效,系统要求所有的用户名不能重复。

故当用户输完用户名后,系统立即在页面上方提示用户该用户名是否可用,如果系统中没有该用户名,则系统提示该用户名可用;否则提示用户该用户名重复,用户必须重新选择用户名注册。

当用户注册一个新用户名之后,就可以使用系统的登录功能来登录系统了,用户输入登录用的用户名、密码后,系统一样提供了基本的输入校验。

除此之外,系统还采用了随机产生图形验证码来防止恶意用户的暴力破解,系统随机生成一个图形验证码,而用户登录必须输入图形验证码中显示的字符串,只有用户输入的字符串和系统随机生成的验证码字符相同时,系统才允许用户登录。

1.2系统功能流程处理用户注册的流程图东北大学软件学院实践考核类课程(四)实验报告1.3数据库设计ColumnNarneDatatppe HOTH ULLAUTOI NC :FlagsDefaultValue Commentuser_id|S>INT(11)✓ ✓_|UNSIGNED _|ZEROFELLEBBQ username 心.VARCH.4.R(50]_|BINARYQ user_pass VARCHAR(50] ✓_|BIN4RYQ emailVARCHAR(100]1BIN4RY相关的映射文件:<hibernate-mapping package ="org.reg_login.model"><class name ="User"table ="usertable"〉<id name ="id"column ="user_id"><generator class ="identity"/> </id ><property name ="user"column ="user_name"not-null ="true"length ="50"unique ="true"/><property name ="pass"column ="userpass"n ot-null ="true"C=3length ="50"/><property name ="email"length ="100"/></class></hibernate-mapping >一旦提供了上面的映射文件,Hibernate 就可以理解User 和user_table 之间的对应关系。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

三.Struts2实例下面我们通过实例来学习一下Struts2的使用。

通过本实例的学习,我们将会对struts2的表单以及表单验证有一个初步的认识、了解struts2的配置以及初探Struts2的本地化输出。

1.实例说明本例是Struts2的简单实例,通过本工程的学习,我们将会对struts2的表单以及表单验证有一个初步的认识、了解struts2的配置以及初探Struts2的本地化输出。

2. 编码准备1)包的引入在MyEclipse或NetBeans中建立web工程,将所需的包放入WebRoot/lib目录中,本实例所需的包有:commons-logging-1.1.jarfreemarker-2.3.8.jarognl-2.6.11.jarstruts2-core-2.0.8.jarxwork-2.0.3.jar这些包在struts-2.0.8-all\struts-2.0.8\lib目录下都可以找到,请读者自行下载。

2) web.xml的配置要使struts能正常工作,需修改web.xml的内容,为其增加struts2的FilterDispatcher,修改后的web.xml的内容如下:3)建立源码目录和jsp存放目录在src目录下建立example文件夹,用于存放本实例的java文件等。

在WebRoot文件夹下建立子文件夹example,用于存放本工程的jsp文件。

3. 编码1) Welcome.jsp和Login.jsp的编写首先我们建立Welcome.jsp,该文件包含两个链接,点击“登录”链接后跳转到登录信息输入页面,点击“注册”按钮跳转到注册页,为了学习struts2配置中的通配符使用,我们暂不实现注册功能。

Welcome.jsp的代码如下:在该页面的顶部,我们需要将struts2的标签库引入,语句为:<%@ taglib prefix="s" uri="/struts-tags" %>在该页面,主要用到struts2的<s:url>标签,该页面主要用到该标签的两个属性,分别为value 和action,其中action属性表示用action来产生url,而value表示使用的目标值。

在页面上点击“查看源文件”按钮,可看到生成的语句分别变为:<link href="/struts2-blank-2.0.8/css/examplecss" rel="stylesheet" type="text/css"/> <a href="/struts2-blank-2.0.8/example/Login.jsp "><a href="/struts2-blank-2.0.8/example/Register.action">由此可知使用该标签时,struts2会自动为我们带上下文路径,对于加了属性action的<s:url>标签,后面会自动带上“.action”作为后缀。

点击“登录”链接后,跳转到Login.jsp页面,该页包含一个登录表单,让用户输入用户名和密码信息,用户点击提交按钮,跳转到指定的Action——Login进行处理。

Login.jsp的内容如下:该页用到Struts2的表单标签<s:form>、<s:textfield>和<s:password>。

<s:form>的action属性表示表单提交后跳转的action的名称,此处为Login,该标签最终将生成HTML的form;<s:textfield>标签类同于HTML的<input type=”text”…>,其中name表示属性域的名称,label表示其前的提示名;<s:password>标签类同于HTML的<input type=”password”…>,其name和label类同于<s:textfield>,在此略。

2)配置文件struts.xml和example.xml在上述jsp页面,我们需跳转到两个Action地址,需在struts2的配置文件中配置,因当工程变大时,一个庞大的struts2的配置极难维护,建议按包路径分开配置文件,所以本实例除了struts.xml配置文件外,还新增了一个额外的配置文件example.xml。

该文件在struts.xml中引用。

struts.xml放在src目录下,该文件的内容如下:可看到该文件通过<include file="example.xml"/>将example.xml也作为struts2的配置文件。

接下来,让我们看看example.xml的配置:3) Login和ExampleSupport类以及验证配置类Login-validation.xml的编写在配置文件example.xml中,定义了两个Action,下面我们用代码来实现这两个Action首先让我们来看看ExampleSupport这个Action,这个Action不做任何操作,集成自ActionSupport,是本工程的各Action类的基类,该类的代码如下:package example;import com.opensymphony.xwork2.ActionSupport;publicclass ExampleSupport extends ActionSupport {}接着让我们来看看Login这个Action,该类继承自ExampleSupport类,该Action需实现的业务逻辑如下:a) 当用户名(username)或密码(password)有一者或两者为空时,登录不成功,跳转到登录信息输入页面;b) 当用户名(username)和密码(password)都不为空时,登录成功,跳转到主菜单页。

对于用户名和密码的验证,我们可以先考虑在Login类中用代码实现的方式,此时该类的代码如下:当工程变得愈发复杂时,这一小段一小段验证代码将会变得难以维护,出于此原因,我们可以考虑采用struts2提供的验证机制来实现。

在src目录下建立实现验证的xml文件Login-validation.xml,为Login Action中的username和password属性增加非空验证,验证配置如下:当验证未通过时,将不会进入Login Action中的execute方法,此时可删除掉Login这个Action 中的验证内容,该类的execute方法直接跳转到SUCCESS即可,修改后的代码略。

4)本地化输出——资源文件package.properties为了本地化的输出验证错误信息,我们可以将参数信息和错误信息放入资源文件中,资源文件package.properties位于src/example目录下,内容如下:requiredstring = ${getText(fieldName)}不能为空.password = 密码username = 用户名Missing.message = 该部分尚未构建,请稍候访问...在src/example目下下建立对应的中文资源文件package_zh_CN.properties,为了避免中文乱码问题,我们编写一个批处理文件code.bat来对package.properties进行编码处理,主要用到native2ascii命令,其内容如下:del package_zh_CN.propertiescopy package.properties package_zh_CN.properties.gbknative2ascii -encoding GBK package_zh_CN.properties.gbk package_zh_CN.properties del package_zh_CN.properties.gbkdel *.bak运行该批处理文件,可在package_zh_CN.properties中可看到编码后的资源文件信息,如下:requiredstring = ${getText(fieldName)}\u4e0d\u80fd\u4e3a\u7a7a.password = \u5bc6\u7801username = \u7528\u6237\u540dMissing.message =\u8be5\u90e8\u5206\u5c1a\u672a\u6784\u5efa\uff0c\u8bf7\u7a0d\u5019\u8bbf\u95ee...5)Register.jsp和Missing.jsp的编写在2中的example.xml中,我们配置了通配符映射,在Welcome.jsp中,我们使用<a href="<s:url action="Register"/>">注册</a>其中的Register在example中找不到相关映射,于是在用户点击“注册”按钮时,将映射到通配符所映射的Action:example. ExampleSupport.而后跳转到Register.jsp页面,其代码如下:四.总结到此为止,我们的实例已构建完,可通过浏览器访问:http://localhost:8080/struts2-blank-2.0.8/example/Welcome.jsp看到我们的劳动成果。

下面总结一下我们在该实例中学到的东西。

常用的一些标签的使用在本实例中,我们学习了<s:textfield>、<s:password>、<s:form>以及<s:url>的使用。

表单数据的验证本文描述了一个简单的表单的数据非空验证。

3. 本地化输出错误提示信息在验证失败时,用资源文件来输出错误提示信息。

4.Strut2配置文件中通配符的使用对于某些地址,我们可以使用在struts2的配置通配符来使其映射到某个Action中去。

相关文档
最新文档