struts.xml在Action配置具体解释
在博客上我已经基本上解释struts.xml基本配置。配置过程最为基本的是action的动态配置。
一、Action的创建方法
1)实现Action接口
2)继承ActionSupport类,覆写当中的方法
3)不继承不论什么类都能够实现,关键是在struts.xml中进行配置
二、Action动态方法的调用
在实际的项目中。一个action类的中,可能存在多个方法,而不同的方法运行的效果是不一样的,假设依照了一般性的配置。将无形的添加了程序猿的负担
第一种方法: 在struts.xml中的action属性标签中用method属性指定方法名(不怎么推荐使用)
另外一种方法: jsp页面中指定你要调用的那个方法
<form action=”login!myfun.action”,method=”post”>
在client请求中进行动态的配置:映射名!方法名.action
这样能够动态的调用action中的myfun方法,就不要在action标签中进行method的配置
第三种方法:使用通配符进行配置(推荐使用:适用情况当一个类中存在较多的响应方法)
在配置<action> 时。能够在 name,class,method 中使用通配符。这是 第二种形式的动态方法调用
<action name="*user" class="com.zzjmay.action.UserAction" method="{1}">
//这样的通配是针对的是同一个action中。响应不同的方法 在jsp页面中调用的时候
<form action="loginuser.action" method="post">
<!-- 须要注意的是要保证表单中的name的命名要和Action中属性的命名保持一致 -->
用户名:<input type="text" name="username" id="username"><br>
密 码:<input type="password" name="password" id="password">
<br>
<input type="submit" value="提交"> </form>
注意:通过使用通配符的时候相当于占位操作。当中的{1}表示第一个通配符。就上面的样例来讲,当jsp页面中是loginuser.action进行调用的时候,实际上出发的Action类中的login()方法
通过通配符实现,不同的类响应不同的类中的方法:
<action name=“*_*" class="action.{1}Action" method="{2}"> <result >/{2}.jsp</result> </action> |
三、 Action的动态结果的配置
含义:在实际执行其中,Action类的处理业务的过程中,可能因为业务条件的复杂。会跳转到不同页面,那么为了节省result的配置。我们通常会採用动态结果的配置。事实上非常像我们在servlet中进行全局的forward的配置。
UserAction.java public class UserAction extends ActionSupport { private String nextResult; ... } |
Struts2.xml <action name="user" class="action.UserAction"> <result>/{nextResult}</result> </action> |
四、接收用户数据(推荐使用的实现ModelDriven的接口)
在这篇博客中我仅仅是介绍经常使用的,而且在实际项目中效率较高的方法。
我之所以推荐ModelDriven接口的方法,原因就是能够非常好的分离显示界面和业务逻辑的分离(解耦性)。
实现ModelDriven接口
步骤:
u 实现用户登录功能
u 创建User.java类
Ø 声明用户登录信息
Ø 创建无參构造
u 创建Action类
Ø 实现com.opensymphony.xwork2.ModelDriven接口
Ø 声明User类对象并实例化
Ø 实现getModel ()方法。返回User类对象
u 创建JSP页面
Ø 表单元素使用”属性”设置name属性
注意:
1) 首先,action要实现ModelDriven的接口。默认实现getModel()方法
2) 要在action中自己来实例化user的对象,而不像前面一种方法是有struts2的框架实现的
3) 比較突出的就是在jsp页面中。表单元素的name属性,直接用名字就能够来
UserAction.java
public class UserAction implements ModelDriven<User> {
//要实例化
private User user=new User(); public User getUser() {
return user;
} public void setUser(User user) {
this.user = user;
}
public String myfun() throws Exception {
System.out.println("username="+user.getUsername());
System.out.println("password="+user.getPassword());
System.out.println("myfun.....");
//用来进行处理
if(user.getUsername().equals(user.getPassword())){
return "success";
}else{
return "error";
} } public User getModel() {
// TODO Auto-generated method stub
return user;
} }
login.jsp
<form action="loginuser.action" method="post">
<!-- 须要注意的是要保证表单中的name的命名要和Action中属性的命名保持一致 -->
用户名:<input type="text" name="username" id="username"><br>
密 码:<input type="password" name="password" id="password">
<br>
<input type="submit" value="提交"> </form>
五、在Action中訪问Servlet API
訪问Servlet API的实际项目中有两种的方法訪问Servlet API
1)解耦的方法(实现三大接口程序RequestAware,ApplicationAware,SessionAware)
public class UserAction2 implements ModelDriven<User> ,RequestAware,SessionAware,ApplicationAware{ private User user = new User(); private Map<String, Object> requestMap;
private Map<String, Object> sessionMap;
private Map<String, Object> applicationMap; public void setApplication(Map<String, Object> applicationMap) {
this.applicationMap=applicationMap; } public void setSession(Map<String, Object> sessionMap) {
this.sessionMap=sessionMap;
} public void setRequest(Map<String, Object> requestMap) {
this.requestMap=requestMap; } public User getUser() {
return user;
} public void setUser(User user) {
this.user = user;
} public String myfun() throws Exception {
System.out.println("username=" + user.getUsername());
System.out.println("password=" + user.getPassword());
System.out.println("myfun2.....");
// 用来进行处理
if (user.getUsername().equals(user.getPassword())) { sessionMap.put("Succ", "成功的哇2! !。");
Bookbiz bookbiz=new Bookbiz(); applicationMap.put("books",bookbiz.getBooks()); return "success";
} else { requestMap.put("errorMsg", "登陆失败了2");
return "error";
} } public User getModel() {
// TODO Auto-generated method stub
return user;
}
注意:在非解耦的方式中,struts2框架已经将相应的四大应用作用域给封装到了Map集合中,所以这里一開始定义的三个Map集合中能够相当于操作四大作用域对象
2)非解耦的方法(实现两大接口程序ServletReuqestAware,ServletContextAware):非解耦的意思就是说直接操作的Servlet API对象
public class UserAction4 implements ModelDriven<User>,ServletRequestAware,ServletContextAware{ private User user = new User(); private HttpServletRequest request;
private HttpSession session;
private ServletContext application; public void setServletContext(ServletContext application) {
this.application = application; } public void setServletRequest(HttpServletRequest request) {
this.request = request; } public User getUser() {
return user;
} public void setUser(User user) {
this.user = user;
}
………………
注意:在实现接口中仅仅实现了request和application的获取
在实际项目开发其中。须要的获取session的方法是通过Httpsession session= request.getsession();
版权声明:本文博客原创文章,博客,未经同意,不得转载。
struts.xml在Action配置具体解释的更多相关文章
- struts2 从一个action跳转到另一个action的struts.xml文件的配置
解释: 想要用<result>跳转到另一个action,原来的配置代码是: <action name="insertDept" class="strut ...
- Spring+mybatis+struts框架整合的配置具体解释
学了非常久的spring+mybatis+struts.一直都是单个的用他们,或者是两两组合用过,今天总算整合到一起了,配置起来有点麻烦.可是配置完一次之后.就轻松多了,那么框架整合配置具体解释例如以 ...
- Struts2配置文件复用代码【web.xml、struts.xml、常量配置】
web.xml的分发器代码: <!-- 引入struts核心过滤器 --> <filter> <filter-name>struts2</filter-nam ...
- struts.xml文件中配置tiles.xml
Apache Tiles是一个JavaEE应用的页面布局框架.Tiles框架提供了一种模板机制,可以为某一类页面定义一个通用的模板,该模板定义了页面的整体布局.布局由可以复用的多个块组成,每个页面可以 ...
- Struts的default.properties五个配置 一般利用按着配置文件的加载的顺序,后面文件和前面文件相同的配置,后面的会把前面的文件的值覆盖的原则 在struts.xml里面进行配置
1 struts.i18n.encoding=UTF-8 配置编码 2 struts.action.extension=action,, 配置浏览器访问地址的后缀 3 struts.devMode = ...
- struts.xml中的配置常量的含义
struts.serve.static.browserCache 该属性设置浏览器是否缓存静态内容.当应用处于开发阶段时,我们希望每次请求都获得服务器的最新响应,则可设置该属性为false. stru ...
- 一 SSH整合:Spring整合Struts2的两种方式,struts.xml管理Action&Bean管理Action
SSH回顾 1 引入jar包 Struts2的jar包 D:\Struts2\struts-2.3.35\apps\struts2-blank\WEB-INF\lib 开发基本包 Struts2有一 ...
- Struts2-3.struts.xml的action可以简写
如果只是跳转到某个页面的话,可以这样写 <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE s ...
- Struts2-2.了解struts.xml>package>action>result的name属性
result决定跳转到哪个视图(jsp),可以预设值有多个. <?xml version="1.0" encoding="UTF-8" ?> < ...
随机推荐
- OpenCV中的SVM參数优化
SVM(支持向量机)是机器学习算法里用得最多的一种算法.SVM最经常使用的是用于分类,只是SVM也能够用于回归,我的实验中就是用SVM来实现SVR(支持向量回归). 对于功能这么强的算法,opencv ...
- Jquery显示和隐藏元素或设为只读(含Ligerui的控件禁用,实例说明)
一.隐藏和显示元素 $('#button_save_12').css('display', 'none'); // 隐藏按钮 $('#button_save_12').css('display', ' ...
- 【从翻译mos文章】在OGG (Oracle GoldenGate) 正在使用SCHEMATRANDATA如果,需要额外的db patch
在OGG (Oracle GoldenGate) 正在使用SCHEMATRANDATA如果.需要额外的db patch 参考原始: Patches needed to support SCHEMATR ...
- Apache介绍
怎样使用Apache许可证 若用户须要应用Apache许可证,请将下面演示样例使用适当的注视方法包括在作品源文件里,将括号"[]"中的字段以用户自身的区分信息来替换 ...
- 佛祖保佑 永无BUG 永不改动
//////////////////////////////////////////////////////////////////// // _ooOoo_ // // o8888888o // / ...
- Quick StateMachine状态机
状态机quick中是一个亮点,假设我们做一款RPG游戏,一个角色通常会拥有idle,attack,walk.run,death这些状态,假设游戏角色的状态採用分支条件推断的话.会造成很庞大而难以维护. ...
- C++程序代写实现HashSet class
C++程序代写实现HashSet class 专业程序代写(QQ:928900200) Implement a HashSet class for elements of type string.It ...
- J2SE基础:7.系统经常使用类一
1.Object对象 Object对象是全部对象的根类. 每一个对象都默认继承自Object类. equals():对象与对象之间是否相等. 逻辑上面的相等.equals 物理上面的相等(地址相等) ...
- 联想A798T刷机包 基于百度云V6 集成RE3.1.7美化版 精简冗余文件
ROM介绍 1.apk进行odex合并及zipaliang优化-省电及降低内存暂用. 2.測试相机.通话.数据.wifi.蓝牙.等传感器均正常,. 3.提供时间居中防iphone状态栏补丁 4.增加I ...
- WPF异步载入图片,附带载入中动画
原文:WPF异步载入图片,附带载入中动画 WPF异步载入图片,附带载入中动画 最近,在做一个WPF项目.项目中有一个需求,就是以列表的方式显示出项目图片.这些图片有的存在于互联网上,有的存在于本地磁盘 ...