Java开发框架SSH学习(二)- 用户登录改进

目标

在(一)的实验基础上,探索:

  1. 命名空间及result的转发类型
  2. 为Action的属性注入值
  3. 配置共享视图及异常处理机制

具体步骤(有些代码与(一)相同的代码这里就不以贴出)

  1. 定义两个action类用于区分普通用户和管理用户登录
    LoginAction.java

    public 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;
        }
    }
    
  2. 在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>
    
  3. 分别创建属于普通用户和管理员用户的页面
    管理员:
    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>
    
    
  4. 创建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>
    

结果展示

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
如有错误,欢迎评论区指出。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值