目标
在(一)的实验基础上,探索:
- 命名空间及result的转发类型
- 为Action的属性注入值
- 配置共享视图及异常处理机制
具体步骤(有些代码与(一)相同的代码这里就不以贴出)
-
定义两个action类用于区分普通用户和管理用户登录
LoginAction.javapublic class LoginAction extends ActionSupport implements SessionAware { private User user; private String defaultUser; private String defaultPassword; private Map<String, Object> session; @Override public String execute() throws Exception { if (user.getUsername().trim().equals(defaultUser)&&user.getPassword().trim().equals(defaultPassword)){ session.put("user", user); return "success"; } else { return "index"; } } public void setUser(User user) { this.user = user; } public User getUser() { return user; } public Map<String, Object> getSession() { return session; } @Override public void setSession(Map<String, Object> session) { this.session = session; } public String getDefaultUser() { return defaultUser; } public void setDefaultUser(String defaultUser) { this.defaultUser = defaultUser; } public String getDefaultPassword() { return defaultPassword; } public void setDefaultPassword(String defaultPassword) { this.defaultPassword = defaultPassword; } }
AdminLoginAction.java
public class AdminLoginAction extends ActionSupport implements SessionAware { private User user; private String defaultUser; private String defaultPassword; private Map<String, Object> session; @Override public String execute() throws Exception { if (user.getUsername().trim().equals(defaultUser)&&user.getPassword().trim().equals(defaultPassword)){ session.put("user", user); return "success"; } else { return "index"; } } public void setUser(User user) { this.user = user; } public User getUser() { return user; } public Map<String, Object> getSession() { return session; } @Override public void setSession(Map<String, Object> session) { this.session = session; } public String getDefaultUser() { return defaultUser; } public void setDefaultUser(String defaultUser) { this.defaultUser = defaultUser; } public String getDefaultPassword() { return defaultPassword; } public void setDefaultPassword(String defaultPassword) { this.defaultPassword = defaultPassword; } }
-
在Struts.xml中定义两个命名空间(其中的action中已经注入param值,所以action的Java文件中直接调用)
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN" "http://struts.apache.org/dtds/struts-2.0.dtd"> <struts> <constant name="struts.i18n.encoding" value="UTF-8"></constant> <package name="default" namespace="/" extends="struts-default"> <global-results> <result name="exception">exceptions.jsp</result> </global-results> <global-exception-mappings> <exception-mapping result="exception" exception="java.lang.Exception"></exception-mapping> </global-exception-mappings> <action name="login" class="com.test2.action.LoginAction" > <result name="redirect">/user/login.action</result> </action> </package> <package name="user" namespace="/user" extends="struts-default" > <action name="login" class="com.test2.action.LoginAction" > <param name="defaultUser">普通用户</param> <param name="defaultPassword">123</param> <result name="success">/user/hello.jsp</result> <result name="index">/user/login.jsp</result> </action> </package> <package name="admin" namespace="/admin" extends="struts-default"> <action name="login" class="com.test2.action.AdminLoginAction" > <param name="defaultUser">testadmin</param> <param name="defaultPassword">123</param> <result name="success">/admin/hello.jsp</result> <result name="index">/admin/login.jsp</result> </action> </package> </struts>
-
分别创建属于普通用户和管理员用户的页面
管理员:
login.jsp<%@ page contentType="text/html;charset=UTF-8" language="java" %> <%@ taglib prefix="s" uri="/struts-tags" %> <html> <head> <title>Title</title> </head> <body> <s:form action="/admin/login" method="POST"> <s:textfield name="user.username" label="用户名"/> <s:password name="user.password" label="密码"/> <s:submit value="登录" /> </s:form> </body> </html>
hello.jsp
<%@ taglib prefix="s" uri="/struts-tags" %> <%@ page contentType="text/html;charset=UTF-8" language="java" %> <html> <head> <title>Title</title> </head> <body> <s:property value="user.username" />!!!,管理员你好 </body> </html>
普通用户:
login.jsp<%@ page contentType="text/html;charset=UTF-8" language="java" %> <%@ taglib prefix="s" uri="/struts-tags" %> <html> <head> <title>Title</title> </head> <body> <s:form action="/user/login" method="POST"> <s:textfield name="user.username" label="用户名"/> <s:password name="user.password" label="密码"/> <s:submit value="登录" /> </s:form> </body> </html>
hello.jsp
<%@ taglib prefix="s" uri="/struts-tags" %> <%@ page contentType="text/html;charset=UTF-8" language="java" %> <html> <head> <title>Title</title> </head> <body> <s:property value="user.username" />!!!,普通用户 </body> </html>
-
创建exception.jsp并在Struts.xml中加入相应内容实现异常信息的输出
exception.jsp<%@ taglib prefix="s" uri="/struts-tags" %> <%@ page contentType="text/html;charset=UTF-8" language="java" %> <html> <head> <title>Title</title> </head> <body> <p>用户名与密码不匹配</p> <s:property value="exception.message"/> <s:property value="exceptionStack"/> </body> </html>
在struts.xml中加入以下内容(虽然上面的struts.xml已经加入了)
<global-results> <result name="exception">exceptions.jsp</result> </global-results> <global-exception-mappings> <exception-mapping result="exception" exception="java.lang.Exception"></exception-mapping> </global-exception-mappings>
结果展示
如有错误,欢迎评论区指出。