Struts2的使用
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的使用的更多相关文章
- 为什么做java的web开发我们会使用struts2,springMVC和spring这样的框架?
今年我一直在思考web开发里的前后端分离的问题,到了现在也颇有点心得了,随着这个问题的深入,再加以现在公司很多web项目的控制层的技术框架由struts2迁移到springMVC,我突然有了一个新的疑 ...
- 菜鸟学Struts2——Interceptors
昨天学习Struts2的Convention plugin,今天利用Convention plugin进行Interceptor学习,虽然是使用Convention plugin进行零配置开发,这只是 ...
- 菜鸟学Struts2——零配置(Convention )
又是周末,继续Struts2的学习,之前学习了,Struts的原理,Actions以及Results,今天对对Struts的Convention Plugin进行学习,如下图: Struts Conv ...
- 菜鸟学Struts2——Results
在对Struts2的Action学习之后,对Struts2的Result进行学习.主要对Struts2文档Guides中的Results分支进行学习,如下图: 1.Result Types(Resul ...
- 菜鸟学Struts2——Actions
在对Struts2的工作原理学习之后,对Struts2的Action进行学习.主要对Struts2文档Guides中的Action分支进行学习,如下图: 1.Model Driven(模型驱动) St ...
- 菜鸟学Struts2——Struts工作原理
在完成Struts2的HelloWorld后,对Struts2的工作原理进行学习.Struts2框架可以按照模块来划分为Servlet Filters,Struts核心模块,拦截器和用户实现部分,其中 ...
- 13、零配置Struts2开发
Convention 插件 从 Struts 2.1 开始, Struts 可以使用 Convention 插件来支持零配置: Convention 插件完全抛弃配置信息, 不仅不需要使用 strut ...
- 12、Struts2表单重复提交
什么是表单重复提交 表单的重复提交: 若刷新表单页面, 再提交表单不算重复提交. 在不刷新表单页面的前提下: 多次点击提交按钮 已经提交成功, 按 "回退" 之后, 再点击 &qu ...
- 11、Struts2 的文件上传和下载
文件上传 表单准备 要想使用 HTML 表单上传一个或多个文件 须把 HTML 表单的 enctype 属性设置为 multipart/form-data 须把 HTML 表单的method 属性设置 ...
- 9、 Struts2验证(声明式验证、自定义验证器)
1. 什么是Struts2 验证器 一个健壮的 web 应用程序必须确保用户输入是合法.有效的. Struts2 的输入验证 基于 XWork Validation Framework 的声明式验证: ...
随机推荐
- 查看cup是32位还是64位
1#echo $HOSTTYPE 2#uname -a 3#getconf LONG_BIT
- 【Mac系统】之破解Navicat Premium for Mac(中文版)
前期准备工作: 下载Mac中文版本: 下载地址:链接:https://pan.baidu.com/s/1wShOFK9odsSWBSphgqTdEQ 密码:ipsa 下载完成后进行安装,安装步骤省略 ...
- Prometheus+Grafana搭建监控系统
之前在业务中遇到服务器负载过高问题,由于没有监控,一直没发现,直到业务方反馈网站打开速度慢,才发现问题.这样显得开发很被动.所以是时候搭建一套监控系统了. 由于是业余时间自己捯饬,所以神马业务层面的监 ...
- CentOS升级Python2.6到Python2.7
个人博客:https://blog.sharedata.info/ 貌似CentOS 6.X系统默认安装的Python都是2.6版本的?平时使用以及很多的库都是要求用到2.7版本或以上,所以新系统要做 ...
- Centos 初始化服务器防火墙没有启动找不到/etc/sysconfig/iptables
个人博客:https://blog.sharedata.info/ 具体步骤:添加规则然后重启防火墙自动生成防火墙文件1.iptables -P OUTPUT ACCEPT #添加出规则2.servi ...
- 基于SqlDependency的Asp.net数据缓存
首先,确保目标数据库的is_broker_enabled已经enabled. SELECT name, is_broker_enabled FROM sys.databases 如果不是enabled ...
- 重载(overload)、覆盖(override)和隐藏(hide)
写正题之前,先给出几个关键字的中英文对照,重载(overload),覆盖(override),隐藏(hide).在早期的C++书籍中,可能翻译的人不熟悉专业用语(也不能怪他们,他们不是搞计算机编程的, ...
- csv .xlsx
def gen_file_data(fodir, fname, sheet_index=0, ): if fname.find('.xlsx') > -1: fname_open = '%s\\ ...
- NOI-linux下VIM的个人常用配置
路径:/etc/vim/vimrc 打开终端:Ctrl+Alt+T 输入:sudo vim或gedit /etc/vim/vimrc (推荐用gedit,更好操作) 以下是我的配置: "我的 ...
- Jeecms 防xss处理原理
Web.xml配置过滤器,并指的要过滤和替换的字符: 过滤器的filter方法,对传入的HttpServletRequest对象进行了修改 具体过滤在XssHttpServletRequestWrap ...