看代码及注释
LoginAction.java
- package edu.hust.action;
- import com.opensymphony.xwork2.ActionSupport;
- //strust2.0的Action可以不继承任何类(这个和struts1.3有很大区别). 此时struts2.0的Action类似一个JavaBean,只有getter、setter和execute()方法。
- //但一般会继承webwork包下的ActionSupport。实现一些逻辑处理功能。
- public class LoginAction extends ActionSupport {
- private static final long serialVersionUID = 1L;
- private String uname;
- private String pword;
- /*
- * struts2从页面取值是通过set()方法完成的。例如:
- * setUsername(String username) --> setUsername()方法中的方法名和参数名必须和页面表单中的name属性一致。然后通过this.uname=username;将值传递给LoginAction的uname变量.
- * 即提交时是找setUsername()方法并利用反射技术技术进行赋值,而不是直接找属性变量进行赋值。
- *
- * 页面从Action中取值并打印是通过get()方法完成的。
- * getUsername()中的方法名的<get后面的Username>必须和页面表单中的name属性一致。通过return uname将值返回。在页面用el取值时,必须用username(与getUsername()一致),而不能用uname。
- * 即取值时是找getUsername()方法并利用反射技术技术进行取值,而不是直接找属性变量进行取值。
- *
- * Struts1.3中的ActionForm也是这个原理
- */
- public String getUsername() {
- return uname;
- }
- public void setUsername(String username) {
- this.uname = username;
- }
- public String getPassword() {
- return pword;
- }
- public void setPassword(String password) {
- this.pword = password;
- }
- @Override
- public void validate() {
- //如果validate()未通过,系统会自动返回一个INPUT给struts.xml,让其跳转至错误显示页面。
- if (this.getUsername() == null || "".equals(this.getUsername().trim())) {
- //addFieldError()方法的第一个参数必须与页面表单中的name属性一致。这样才可以使错误信息找到正确的显示位置。
- this.addFieldError("username", "username required");
- }
- if (this.getPassword() == null || "".equals(this.getPassword().trim())) {
- this.addFieldError("password", "password required");
- }
- }
- public String execute() {
- // struts2自定义了一些流程返回标志:ActionSupport类继承了Action接口,这些标志来自Action接口。请看帮助文档。
- /*
- * return INPUT --> The action execution require more input in order to succeed;
- * return LOGIN --> The action couldn't execute, since the user most was not logged in;
- * return NONE --> The action execution was successful but do not show a view;
- * return SUCCESS --> The action execution was successful;
- * return ERROR --> The action execution was a failure;
- */
- if ("forrest".equals(this.getUsername().trim()) && "vivian".equals(this.getPassword().trim())) {
- return SUCCESS;
- } else {
- this.addFieldError("username", "username or password error");
- return LOGIN; //对应struts.xml中的<result name="login">/login.jsp</result>
- }
- }
- }
struts.xml
- <struts>
- <!-- 表示struts2包继承自struts-default包 -->
- <package name="struts2" extends="struts-default">
- <action name="login" class="edu.hust.action.LoginAction">
- <!-- 如果验证不成功,validate()方法自动返回input,让其跳转到显示错误页面,struts1中也是通过input跳转到错误页面的哦 -->
- <!-- 无论哪个Action, 都必须配置好input的转发页面, 即使自己没有做验证, struts2也会自动做简单验证, 如果验证不成功, 会根据这里配置的input找到错误输出页面 -->
- <!-- 与struts1不同,错误页面不用写任何错误标签也可以接收到错误信息(s:form表单集成了错误显示)(eg:struts1中有html:errors错误标签) -->
- <!-- struts2除了表单自动显示,也可以通过s:fielderror和s:actionerror这两个标签来显示 -->
- <result name="input">/login.jsp</result>
- <result>/result.jsp</result>
- <result name="login">/login.jsp</result>
- </action>
- </package>
- </struts>
登陆页面就不写了。主要看注释,有些注释很有用