Struts 2下的helloword(3)

2019-04-08 18:57

e.jsp页面;如果execute方法返回error字符串,则请求被转发到/error.jsp页面。 2.4.3 增加视图资源完成应用 经过上面步骤,这个最简单的Struts 2应用几乎可以运行了,但还需要为该Web应用增加两个JSP文件,两个JSP文件分别是error.jsp页面和welcome.jsp页面,将这两个JSP页面文件放在Web应用的根路径下(与WEB-INF在同一个文件夹下)。 这两个JSP页面文件是更简单的页面,它们只是包含了简单的提示信息。其中welcome.jsp页面的代码如下: <%@ page language=\contentType=\charset=GBK\ 成功页面 您已经登录! 上面的页面就是一个普通的HTML页面,登录失败后进入的error.jsp页面也与此完全类似。 在如图2.1所示页面的“用户名”输入框中输入scott,在“密码”输入框中输入tiger,页面将进入welcome.jsp页面,将看到如图2.2所示的页面。 对于上面的处理流程,可以简化为如下的流程:用户输入两个参数,即username和password,然后向login.action发送请求,该请求被FilterDispatcher转发给LoginAction处理,如果LoginAction处理用户请求返回success字符串,则返回给用户welcome.jsp页面;如果返回error字符串,则返回给用户error.jsp页面。 图2.3显示了上面应用的处理流程。 图2.3 HelloWorld应用的处理流程 2.5 改进控制器 通过前面介绍,读者已经可以完成简单的Struts 2的基本应用了,但还可以进一步改进应用的Action类,例如该Action类可以通过实现Action接口,利用该接口的优势。前面应用的Action类没有与JavaBean交互,没有将业务逻辑操作的结果显示给客户端。 2.5.1 实现Action接口 表面上看起来,实现Struts 2的Action接口没有太大的好处,仅会污染该Action的实现类。事实上,实现Action接口可以帮助开发者更好地实现Action类。下面首先看Action接口的定义: public interface Action { //下面定义了5个字符串常量 public static final String SUCCESS = \public static final String NONE = \public static final String ERROR = \public static final String INPUT = \public static final String LOGIN = \//定义处理用户请求的execute抽象方法 public String execute() throws Exception; } 在上面的Action代码中,我们发现该Action接口里已经定义了5个标准字符串常量:SUCCESS、NONE、ERROR、INPUT和LOGIN,它们可以简化execute方法的返回值,并可以使用execute方法的返回值标准化。例如对于处理成功,则返回SUCCESS常量,避免直接返回一个success字符串(程序中应该尽量避免直接返回数字常量、字符串常量等)。

因此,借助于上面的Action接口,我们可以将原来的Action类代码修改为如下:

//实现Action接口来实现Struts 2的Action类 public class LoginAction implements Action {

//下面是Action内用于封装用户请求参数的两个属性 private String username; private String password;

//username属性对应的getter方法 public String getUsername() {

return username; }

//username属性对应的setter方法 public void setUsername(String username) {

this.username = username; }

//password属性对应的getter方法 public String getPassword() {

return password; }

//password属性对应的setter方法 public void setPassword(String password) {

this.password = password; }

//处理用户请求的execute方法

public String execute() throws Exception

{

//当用户请求参数的username等于scott,密码请求参数为tiger时,返回success 字符串

//否则返回error的字符串 if (getUsername().equals(\&& getPassword().equals(\) {

return SUCCESS; } else {

return ERROR; } } }

对比前面Action和此处的Action实现类,我们发现两个Action类的代码基本相似,除了后面的Action类实现了Action接口。因为实现了Action接口,故Action类的execute方法可以返回Action接口里的字符串常量。

2.5.2 跟踪用户状态

前面的Action处理完用户登录后,仅仅执行了简单的页面转发,并未跟踪用户状态信息——通常,当一个用户登录成功后,需要将用户的用户名添加为Session状态信息。

为了访问HttpSession实例,Struts 2提供了一个ActionContext类,该类提供了一个getSession的方法,但该方法的返回值类型并不是HttpSession,而是Map。这又是怎么回事呢?实际上,这与Struts 2的设计哲学有关,Struts 2为了简化Action类的测试,将Action类与Servlet API完全分离,因此getSession方法的返回值类型是Map,而不是HttpSession。

虽然ActionContext的getSession返回的不是HttpSession对象,但Struts 2的系列拦截器会负责该Session和HttpSession之间的转换。

为了可以跟踪用户信息,我们修改Action类的execute方法,在execute方法中通过ActionContext访问Web应用的Session。修改后的execute方法代码如下:

//处理用户请求的execute方法

public String execute() throws Exception {

//当用户请求参数的username等于scott,密码请求参数为tiger时,返回success字符串 //否则返回error的字符串 if (getUsername().equals(\&& getPassword().equals(\) {

//通过ActionContext对象访问Web应用的Session

ActionContext.getContext().getSession().put(\, getUsername()); return SUCCESS; } else {

return ERROR; } }

上面的代码仅提供了Action类的execute方法,该Action类的其他部分与前面的Action类代码完全一样。在上面的Action类通过ActionContext设置了一个Session属性:user。为了检验我们设置的Session属性是否成功,我们修改welcome.jsp页面,在welcome.jsp页面中使用JSP 2.0表达式语法输出Session中的user属性。下面是修改后的welcome.jsp页面代码:

<%@ page language=\contentType=\charset=GBK\

成功页面

欢迎,${sessionScope.user},您已经登录!


Struts 2下的helloword(3).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:班级操行量化评分细则1

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: