Struts 2 实现Action的几种方式

时间:2021-05-20

Action用于处理用户的请求,因此也被称为业务控制器。每个Action类就是一个工作单元,Struts 2框架负责将用户的请求与相应的Action匹配,如果匹配成功,则调用该Action类对用户请求进行处理,而匹配规则需要在Struts 2的配置文件中声明。

Struts 2框架下实现Action类有以下三种方式:

  • 普通的POJO类,该类通常包含一个无参数的execute()方法,返回值为字符串类型。
  • 实现Action接口
  • 继承ActionSupport类
  • POJO实现方式

    以用户登录为例,创建LoginAction类。

    package com.qst.chapter03.action;public class LoginAction { 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 execute() { System.out.println("----登录的用户信息-----"); System.out.println("用户名:" + userName); System.out.println("密码:" + password); if (userName.startsWith("qst") && password.length() >= 6) { // 返回成功页面 return "ok"; } else { // 返回失败页面 return "error"; } }}

    登录页面:

    <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%><html><head><title>用户登录</title></head><body> <form action="login.action" method="post" name="logForm"> <table> <tr> <td>用户名</td> <td><input type="text" name="userName" size="15" /></td> </tr> <tr> <td>密码</td> <td><input type="password" name="password" size="15" /></td> </tr> <tr> <td colspan="2"><input type="submit" value="登录"></td> </tr> </table> </form></body></html>

    错误页面:

    <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%><!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://.opensymphony.xwork2.ActionSupport;public class LoginAction4 extends ActionSupport implements ServletRequestAware { 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; } //声明request对象 private HttpServletRequest request; //重写ServletRequestAware中的方法 public void setServletRequest(HttpServletRequest request) { this.request = request; } /** * 调用业务逻辑方法,控制业务流程 */ public String execute() { System.out.println("----登录的用户信息-----"); System.out.println("用户名:" + userName); System.out.println("密码:" + password); if (userName.startsWith("qst") && password.length() >= 6) { // 获得session对象 HttpSession session = request.getSession(); //将用户名存放到session中 session.setAttribute("CurUser", userName); // 返回成功页面 return SUCCESS; } else { // 返回失败页面 return ERROR; } } // 重写validate()方法 public void validate() { // 简单验证用户输入 if (this.userName == null || this.userName.equals("")) { // 将错误信息写入到Action类的FieldErrors中 // 此时Struts 2框架自动返回INPUT视图 this.addFieldError("userName", "用户名不能为空!"); System.out.println("用户名为空!"); } if (this.password == null || this.password.length() < 6) { this.addFieldError("password", "密码不能为空且密码长度不能小于6"); System.out.println("密码不能为空且密码长度不能小于6!"); } }}

    上述代码定义的LoginAction4 实现了SevletRequestAware接口,并且重写该接口中setServletRequest()方法,setServletRequest()方法的参数是HttpServletRequest对象,运行Web应用时,Struts 2框架会自动将当前请求对象传入setServletRequest()方法,再将该请求对象赋给LoginAction4的request属性,这样在LoginAction4类的其他方法中就可以访问到request对象了。通过request对象可以获取HttpSession对象,并将当前用户信息保存到Session中。

    将login.jsp页面中表单的action属性改成login4.action:

    ...<form action="login.action" method="post" name="logForm">...

    创建first.jsp显示用户信息:

    <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%><!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"><html><head><title>显示用户信息</title></head><body>登录成功!欢迎用户${param.userName} <br/>当前用户${session.CurUser } <br/><a href="second.jsp" rel="external nofollow" >下一页</a></body></html>

    再创建一个second.jsp:

    <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%><!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"><html><head><title>显示用户信息</title></head><body>请求中的用户信息:${param.userName} <br/>Session中的用户信息:${session.CurUser }</body></html>

    以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。

    声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。

    相关文章