Struts2的核心类库
名称 说明
Struts2-core-2.3.4.jar 核心类库
Xwork-core-2.3.4.jar Xwork的核心类库
Ognl-3.0.5.jar Ognl表达式语言类库
Freemarker-2.3.19.jar Freemarker模板语言支持类库
Commons-io-2.0.1.jar 处理IO操作的工作类库
Commons-fileupload-1.2.2.jar 文件上传类库
Javassist-3.11.0.GA.jar 分析、编辑和创建java字节码的类库
Asm-commons-3.3.jar Asm是一个java字节码处理框架,使用它可以动态生成stub类和proxy类,在java虚拟机装载类之前动态修改类的内容
Asm-3.3.jar
Commons-lang-3.3.1.jar 包含了一些数据类型工具类,是java.lang.*的扩展
注意:因为Struts的版本号不一样所以jar包最好的数字是版本号信息。
搭建Struts2
1、将需要的jar包都添加到项目类库中。
2、在项目的web.xml中配置struts2的拦截器信息。
<!-- 配置struts2的拦截器 -->
<filter>
<filter-name>struts2</filter-name>
<filter-class>org.apache.struts2.dispatcher.ng.filter. StrutsPrepareAndExecuteFilter</filter-class>
</filter> <filter-mapping>
<filter-name>struts2</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping> 3、配置struts2的struts.xml文件。Struts.xml文件是必须要放在src目录下的,也就是必须跟类放在一起。
struts.xml文件错误。这种错误又分为以下几种:1,struts.xml文件名错误。一定要注意拼写问题;2,struts.xml文件放置路径错误。一定要将此文件放置在src目录下。编译成功后,要确认是否编译到classes目录中;3,struts.xml文件内容错误。下面给出一个正确的struts.xml文件以供参考。
<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.5//EN"
"http://struts.apache.org/dtds/struts-2.5.dtd"> <struts>
<package name="mypackage" extends="struts-default" >
<action name="first">
<result>/first.jsp</result>
</action>
</package>
</struts> Action对象
Action对象是Struts2框架中的重要对象,主要用于处理Http请求。
Action接口中包含5个静态常量:
SUCCESS代表Action执行成功返回的值,返回页面。
NONE代表Action执行成功,但不返回页面。
ERROR代表Action执行失败,返回的值。
INPUT代表action需要某个输入信息页面的返回值。
LOGIN代表需要用户登录的返回值。
Action的基本流程
Struts2框架主要通过Struts2的过滤对象拦截HTTP请求,然后将请求分配给指定的Action处理。 动态Action
创建UserAction类继承ActionSupport。
import com.opensymphony.xwork2.ActionSupport; public class UserAction extends ActionSupport {
public String add() throws Exception{ return "add";
}
public String update() throws Exception{ return "update";
}
} 配置struts.xml文件。
<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.5//EN"
"http://struts.apache.org/dtds/struts-2.5.dtd"> <struts>
<!-- 配置Struts支持动态Action, 必须存在 -->
<constant name="struts.enable.DynamicMethodInvocation" value="true" />
<!-- strict-method-invocation在2.5版本,为了限制DMI,默认启用了严格的方法访问,不想启用要改为false,如果启用严格访问模式,无法实现动态Action -->
<package name="mypackage" extends="struts-default" strict-method-invocation="false">
<action name="user" class="com.wgh.UserAction">
<result name="add">first.jsp</result>
<result name="update">update.jsp</result>
</action> </package> </struts>
添加页面访问链接
<a href="user!add">添加用户</a>
<a href="user!update">修改用户</a> Struts2的配置文件
名称 说明
Struts-default.xml 位于Struts2-core-2.3.4.jar文件的org.apache.Struts2包中
Struts-plugin.xml 位于Struts2提供的各个插件包
Struts.xml Web应用默认的Struts2配置文件
Struts.properties Struts2框架中属性配置文件
Web.xml 此文件是Web应用中的web.xml文件,在其中也可以设置Struts2框架的一些信息。 <package>标签
配置好的Package可以被其他package继承。提高了配置文件的重用性。
包的属性如下:
属性 说明
Name 声明包的名称,以方便在其他地方引用,属性必须
Extends 用于声明继承的包,即其父包
namespace 指定命名空间,即访问此包下的action需要访问的路径
Abstract 将包声明为抽象类型(包中不饱和action) <package name="mypackage" namespace="/abc" extends="struts-default" strict-method-invocation="false">
<action name="user" class="com.wgh.UserAction">
<result name="add">first.jsp</result>
<result name="update">update.jsp</result>
</action> </package> 访问路径
<a href="abc/user!add">添加用户</a>
<a href="abc/user!update">修改用户</a>
注意包设置了命名空间后,必须创建命名空间的文件夹(位于WebContent下),将访问的页面放在与命名空间对应的文件夹中。 <action>相关配置
相关属性
属性 说明
Name 用于配置Action对象被请求的url映射
Class 指定Action对应的类名
Method 设置请求Action对象时调用该对象的哪个方法
Converter 指定Action对象类型转换器类 使用通配符简化配置
*:匹配0个或多个字符。
\:转义字符,如需要a者输入“\a”。
Class属性获取通配符,使用{1},{2},{3}…等方式获取
<action name="*" class="com.wgh.{1}">
<result name="add">first.jsp</result>
<result name="update">update.jsp</result>
</action> Action配置访问结果的响应<result>
属性就一个name,默认“success”。根据访问action配置类的方法返回的字符匹配name,跳转到对应的页面。 Struts2的开发模式
Struts2提供了Map类型的request、session、application,可以通过ActionContext对象中获得。该对象位于com.opensymphony.xwork2包中。 1、 实例化ActionContext
public static ActionContext getContext();
2、 获取Map类型的request
ActionContext对象提供的get方法
Public Object get(Object obj)
实际应用
Map request=ActionContext.getContext.get(“request”);
3、 获取Map类型的request
直接访问getSession()方法。
Public Map getSession();
4、 获取Map类型的application
直接使用getApplication()方法获取。
Public Map getApplication(); 域模型DomainModel
通过访问Action类直接方法Action类中的对象信息。
private User user; public String add() throws Exception{ return "add";
} public User getUser() {
return user;
}
public void setUser(User user) {
this.user = user;
} public String update() throws Exception{ return "update";
} 使用struts标签必须添加引用代码,放置文件的最上方。
<%@taglib prefix="s" uri="/struts-tags" %> <s:form action="abc/UserAction!add" method="post">
<s:textfield name="user.name" label="用户名"></s:textfield>
<s:radio name="user.sex" list="#{1:'男',0:'女'}" label="性别"></s:radio>
<s:submit value="提交"></s:submit>
</s:form> 驱动模型更加简洁但需要继承接口ModelDriven。 package com.wgh; import com.opensymphony.xwork2.ActionSupport;
import com.opensymphony.xwork2.ModelDriven; public class UserAction extends ActionSupport implements ModelDriven<User> { private User user=new User(); public String add() throws Exception{ return "add";
} public String update() throws Exception{ return "update";
} @Override
public User getModel() {
// TODO Auto-generated method stub
return this.user;
}
}
这样jsp页面就可以写成一下形势 <s:form action="abc/UserAction!add" method="post">
<s:textfield name="name" label="用户名"></s:textfield>
<s:radio name="sex" list="#{1:'男',0:'女'}" label="性别"></s:radio>
<s:submit value="提交"></s:submit>
</s:form>

Struts2的使用的更多相关文章

  1. 为什么做java的web开发我们会使用struts2,springMVC和spring这样的框架?

    今年我一直在思考web开发里的前后端分离的问题,到了现在也颇有点心得了,随着这个问题的深入,再加以现在公司很多web项目的控制层的技术框架由struts2迁移到springMVC,我突然有了一个新的疑 ...

  2. 菜鸟学Struts2——Interceptors

    昨天学习Struts2的Convention plugin,今天利用Convention plugin进行Interceptor学习,虽然是使用Convention plugin进行零配置开发,这只是 ...

  3. 菜鸟学Struts2——零配置(Convention )

    又是周末,继续Struts2的学习,之前学习了,Struts的原理,Actions以及Results,今天对对Struts的Convention Plugin进行学习,如下图: Struts Conv ...

  4. 菜鸟学Struts2——Results

    在对Struts2的Action学习之后,对Struts2的Result进行学习.主要对Struts2文档Guides中的Results分支进行学习,如下图: 1.Result Types(Resul ...

  5. 菜鸟学Struts2——Actions

    在对Struts2的工作原理学习之后,对Struts2的Action进行学习.主要对Struts2文档Guides中的Action分支进行学习,如下图: 1.Model Driven(模型驱动) St ...

  6. 菜鸟学Struts2——Struts工作原理

    在完成Struts2的HelloWorld后,对Struts2的工作原理进行学习.Struts2框架可以按照模块来划分为Servlet Filters,Struts核心模块,拦截器和用户实现部分,其中 ...

  7. 13、零配置Struts2开发

    Convention 插件 从 Struts 2.1 开始, Struts 可以使用 Convention 插件来支持零配置: Convention 插件完全抛弃配置信息, 不仅不需要使用 strut ...

  8. 12、Struts2表单重复提交

    什么是表单重复提交 表单的重复提交: 若刷新表单页面, 再提交表单不算重复提交. 在不刷新表单页面的前提下: 多次点击提交按钮 已经提交成功, 按 "回退" 之后, 再点击 &qu ...

  9. 11、Struts2 的文件上传和下载

    文件上传 表单准备 要想使用 HTML 表单上传一个或多个文件 须把 HTML 表单的 enctype 属性设置为 multipart/form-data 须把 HTML 表单的method 属性设置 ...

  10. 9、 Struts2验证(声明式验证、自定义验证器)

    1. 什么是Struts2 验证器 一个健壮的 web 应用程序必须确保用户输入是合法.有效的. Struts2 的输入验证 基于 XWork Validation Framework 的声明式验证: ...

随机推荐

  1. jquery的push()

    JavaScript push() 方法 JavaScript Array 对象 定义和用法 push() 方法可向数组的末尾添加一个或多个元素,并返回新的长度. 语法 arrayObject.pus ...

  2. executable null\bin\winutils.exe in the Hadoop binaries.

    在windows 使用eclipse远程调用hadoop集群时抛出下面异常 executable null\bin\winutils.exe in the Hadoop binaries. 这个问题 ...

  3. PathInfo模式的支持

    pathinfo,一种伪静态的用法, 1.让 Apache 支持 PathInfo 配置的 Apache 版本 : 2.2.13 在配置文件中加入 <Files *.php> Accept ...

  4. PHP性能之语言性能优化:魔术方法好不好?

    魔术方法是什么鬼? 魔术方法,也叫魔鬼函数.只要学过PHP的都知道什么是魔术方法,魔术方法就是在某些条件下自动执行的函数. PHP的魔术方法主要有下面几个,其他的参考PHP官方手册 __constru ...

  5. 详细的linux目录结构详细介绍

    详细的linux目录结构详细介绍 --树状目录结构图 下面红色字体为比较重要的目录 1./目录 目录 描述 / 第一层次结构的根,整个文件系统层次结构的根目录 /bin/ 需要在单用户模式可用的必要命 ...

  6. Shiro 认证失败返回JSON

    Shiro框架默认认证失败后会返回到登录页面,在前后端分离项目中,需要返回JSON数据,以便前端或者app端解析处理. 实现方式: 1. 扩展shiro框架的UserFilter类,重写redirec ...

  7. iOS 7 修改默认布局从status bar 底部开始

    最近在对公司的一个老项目进行版本升级,添加了导航栏和tabBar,并且在个人中心界面隐藏navigationBar,于是在控制器里添加了如下对象方法: - (void)viewWillAppear:( ...

  8. Lumen开发:结合Redis实现消息队列(2)

    上一篇讲了Lumen配置Redis,现在来讲一下,如何实现消息队列 2.编写任务类 2.1  任务类结构 默认情况下,应用的所有队列任务都存放在app/Jobs目录.任务类非常简单,正常情况下只包含一 ...

  9. centos7.0 安装nginx

    在centos7.0下安装nginx需要安装 prce和zlib包去官网下载相应的包 然后解压相应的包进行编译 解压nginx源码包进入到解压文件 ./configure --sbin-path=/u ...

  10. 为什么Git 比 SVN 好

    原文链接:http://www.worldhello.net/2012/04/12/why-git-is-better-than-svn.html Why Git is better than SVN ...