博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Struts2学习笔记②
阅读量:5282 次
发布时间:2019-06-14

本文共 3841 字,大约阅读时间需要 12 分钟。

之前在跟着老师们做项目的时候经常会烦恼Struts.xml怎么配置,老师也没讲太清楚,都是说很简单,但是不懂的人就是太难了!哈哈,万事还是要靠自己的!

struts.xml今天又看了几个小时的书,也跟着做了一个登陆的实例,这个实例有两个版本,一个是使用JavaBean当Model,一个是使用Action属性当Model,其实简单的使用Action的属性就行了,但是考虑到以后项目的发展和耦合消除,还是推荐中大型项目一开始就使用JavaBean,或者成为Domain来做Model。

这个实例涉及到了多页面了,比之前的HW实例要复杂一点点,也就是说不会仅仅返回一个String值了,配置文件会根据返回的值来选择处理的动作,或跳转或转为其他页面处理。来看一下struts.xml的代码:

/WEB-INF/jsp/login.jsp
/WEB-INF/jsp/success.jsp
/WEB-INF/jsp/error.jsp
这句代码要着重的Mark一下,这里使用了‘*’这个通配符,这个*的值是根据URL来确定的, 如果URL是localhost:8080/struts/loginAction_login,那么*的值就是login,后面的method的{1}代表引用*的值,花括号里面的数字代表引用第几个星号的值,这样做起来非常方便,避免 了在struts中重复定义许多action,减少了代码冗余。 还要在说一下这个method属性,之前看书里面的代码都是method=“execute”,实际上,这定义了这个action需要执行的类内的哪一个方法,你可以随便指定对应类内的方法,如果不指定则默认为 execute。那么也就是说如果URL是localhost:8080/struts/loginAction_login,那么他实际上调用了LoginAction里面的login方法。 在来看一下LoginAction.java文件代码:
package tech.youngs.Action;import com.opensymphony.xwork2.ActionSupport;public class LoginAction extends ActionSupport{    private static final long serialVersionUID = 1L;    private String username;    private String password;        public String getUsername() {        return username;    }    public void setUsername(String username) {        this.username = username;    }    public String getPassword() {        return password;    }    public void setPassword(String password) {        this.password = password;    }    public String login()    {        return INPUT;    }    public String process()    {        if("youngs".equals(username) && "996225".equals(password))        {            return SUCCESS;        }else{            return ERROR;        }    }}

这个Action类继承了ActionSupport,这个里面定义了几个常量:SUCCESS/ERROR/INPUT还有几个用到了在继续补充,这统一定义了返回的String值,规范化了很多。

最主要的是process方法,里面直接判断了传入的值是否和预定值相同,我们直接使用属性就行了,struts已经帮我们赋好了值。

还有一种实现的思路,是我比较认同的,我在手机上看的书上却不这么认同。。。搞不太清楚他的思路——就是使用JavaBean来当做Model,而不是使用Action内的属性。这样做的好处有很多,主要是为了分清楚层次关系以及解耦合。

将上面的属性分离出去,新建一个JavaBean类:

package tech.youngs.Domain;public class LoginModel{    private String username;    private String password;        public String getUsername() {        return username;    }    public void setUsername(String username) {        this.username = username;    }    public String getPassword() {        return password;    }    public void setPassword(String password) {        this.password = password;    }}

此时还需要对Action做一点点变动,Action除了需要继承ActionSupport意外,还需要实现ModelDriven<T>接口。在ModelDriven里面包含一个方法,getModel()用于返回

Model实例,这里的实例在Action的属性里面进行实例化,声明为private类型。代码如下:

package tech.youngs.Action;import com.opensymphony.xwork2.ActionSupport;import com.opensymphony.xwork2.ModelDriven;import tech.youngs.Domain.LoginModel;public class LoginAction extends ActionSupport implements ModelDriven
{ private static final long serialVersionUID = 1L; private LoginModel model = new LoginModel();// private String username;// private String password;// // public String getUsername() {// return username;// }//// public void setUsername(String username) {// this.username = username;// }//// public String getPassword() {// return password;// }//// public void setPassword(String password) {// this.password = password;// } public String login() { return INPUT; } public String process() { if("youngs".equals(model.getUsername()) && "996225".equals(model.getPassword())) { return SUCCESS; }else{ return ERROR; } } @Override public LoginModel getModel() { // TODO Auto-generated method stub return model; }}

我倒是觉得这种代码的编写方式很好,起码很清楚,以后维护起来也很方便。

转载于:https://www.cnblogs.com/youngs/p/6440801.html

你可能感兴趣的文章
shell脚本
查看>>
Upload Image to .NET Core 2.1 API
查看>>
【雷电】源代码分析(二)-- 进入游戏攻击
查看>>
Linux中防火墙centos
查看>>
[JS]递归对象或数组
查看>>
linux sed命令
查看>>
程序存储问题
查看>>
优雅地书写回调——Promise
查看>>
PHP的配置
查看>>
Struts框架----进度1
查看>>
Round B APAC Test 2017
查看>>
MySQL 字符编码问题详细解释
查看>>
css & input type & search icon
查看>>
C# 强制关闭当前程序进程(完全Kill掉不留痕迹)
查看>>
语音识别中的MFCC的提取原理和MATLAB实现
查看>>
MetaWeblog API Test
查看>>
c# 文件笔记
查看>>
类和结构
查看>>
心得25--JDK新特性9-泛型1-加深介绍
查看>>
安装NVIDIA驱动时禁用自带nouveau驱动
查看>>