idea2020.1.1+Struts2:配置Struts.xml

一、命名空间及result的转发类型

 1.新建项目test2

2.定义2个action类,分别处理普通用户访问和管理员用户访问,并在execute方法中分别对普通用户和管理员用户进行校验:普通用户:用户名(testuser),密码(123);管理员:用户名(testadmin),密码(123)

loginAdminAction.java:处理管理员
package action;

import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.ActionSupport;

public class loginAdminAction extends ActionSupport {

    private String username;
    private String password;

    public String getUsername() {
        return username;
    }

    public void setUsername(String username) {
        this.username = username;
    }

    public void setPassword(String password) {
        this.password = password;
    }

    public String getPassword() {
        return password;
    }

    public String execute() throws Exception{
        if(getUsername().equals("testadmin") && getPassword().equals("123")){
            ActionContext.getContext().getSession().put("username", getUsername());
            return "success";
        }
        return "error";
    }
}

 loginUserAction.java:处理普通用户

package action;

import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.ActionSupport;

public class loginUserAction extends ActionSupport {

    private String username;
    private String password;

    public String getUsername() {
        return username;
    }

    public void setUsername(String username) {
        this.username = username;
    }

    public void setPassword(String password) {
        this.password = password;
    }

    public String getPassword() {
        return password;
    }

    public String execute() throws Exception{
        if(getUsername().equals("testuser") && getPassword().equals("123")){
            ActionContext.getContext().getSession().put("username", getUsername());
            return "success";
        }
        return "error";
    }
}

3.分别在“/users”、“/admin”两个不同的命名空间中配置以上两个action,action的name都为“login”,返回“success”显示hello.jsp,否则显示login.jsp。

4.配置一个默认的命名空间,action的name也是login,重定向到“/users”命名空间下的login:<result type=“redirect”>/users/login.action</result>

struts.xml

虽然要求是<result type="redirect">/users/login.action</result>,但以我理解的写法如下
<?xml version="1.0" encoding="UTF-8"?>

<!DOCTYPE struts PUBLIC
        "-//Apache Software Foundation//DTD Struts Configuration 2.1.7//EN"
        "http://struts.apache.org/dtds/struts-2.1.7.dtd">

<struts>
    <constant name="struts.devMode" value="true"></constant>
    <package name="default" extends="struts-default">
        <action name="login">
            <result type="redirectAction">
                <param name="actionName">login</param>
                <param name="namespace">/user</param>
            </result>
        </action>
    </package>
    <package name="admin" namespace="/admins" extends="struts-default">
        <action name="login" class="action.loginAdminAction">
            <result name="success">/admin/hello.jsp</result>
            <result name="error">/admin/login.jsp</result>
        </action>
    </package>
    <package name="user" namespace="/users" extends="struts-default">
        <action name="login" class="action.loginUserAction">
            <result name="success">/user/hello.jsp</result>
            <result name="error">/user/login.jsp</result>
        </action>
    </package>

</struts>

 5.在user目录建立login.jsp和hello.jsp:login.jsp是普通用户登录窗口,<s:form action=“/user/login”>;Hello.jsp是登录成功后显示的页面,打印用户名。

6.在admin目录建立login.jsp和hello.jsp:login.jsp是管理员用户登录窗口,<s:form action=“/admin/login”>;Hello.jsp是登录成功后显示的页面,打印用户名

admin文件夹下的login.jsp

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ taglib prefix="s" uri="/struts-tags"%>
<html>
<head>
    <title>登录页面</title>
</head>
<body>
<s:form action="login" namespace="/admins">
    <s:textfield name="username"/>
    <s:password name="password"/>
    <s:submit/>
</s:form>
</body>
</html>

user文件夹下的login,jsp

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ taglib prefix="s" uri="/struts-tags"%>
<html>
<head>
    <title>登录页面</title>
</head>
<body>
<s:form action="login" namespace="/users">
    <s:textfield name="username"/>
    <s:password name="password"/>
    <s:submit/>
</s:form>
</body>
</html>

 两个文件夹下的hello.jsp的内容都是一样的

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ taglib prefix="s" uri="/struts-tags"%>
<html>
<head>
    <title>登录成功</title>
</head>
<body>
显示用户名<s:property value="username"/>
</body>
</html>

7.测试

普通用户登录 http://localhost:8080/test2/user/login.jsp

 

管理员用户登录http://localhost:8080/test2/admin/login.jsp

默认登录http://localhost:8080/test2/login

 

访问http://localhost:8080/test2/error/login

二、为Action的属性注入值

1.在action类中增加属性defaultuser,和defaultpassword;并生成get和set方法

2.在struts.xml中的action元素下面增加

<param name=“defaultuser”> testuser </param>

<param name="defaultpassword">123</param>

3.在execute方法中用defaultuser  和defaultpassword进行校验用户输入信息.

loginUserAction.java

package action;

import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.ActionSupport;

public class loginUserAction extends ActionSupport {

    private String username;
    private String password;

    private String defaultuser;
    private String defaultpassword;

    public void setDefaultuser(String defaultuser) {
        this.defaultuser = defaultuser;
    }

    public void setDefaultpassword(String defaultpassword) {
        this.defaultpassword = defaultpassword;
    }

    public String getDefaultuser() {
        return defaultuser;
    }

    public String getDefaultpassword() {
        return defaultpassword;
    }

    public String getUsername() {
        return username;
    }

    public void setUsername(String username) {
        this.username = username;
    }

    public void setPassword(String password) {
        this.password = password;
    }

    public String getPassword() {
        return password;
    }

    public String execute() throws Exception{
        if(getUsername().equals("testuser") && getPassword().equals("123")){
            ActionContext.getContext().getSession().put("username", getUsername());
            return "success";
        }
        if(getDefaultuser().equals("testuser") && getDefaultpassword().equals("123")){
            ActionContext.getContext().getSession().put("username", getUsername());
            return "success";
        }
        return "error";
    }
}

struts.xml

<?xml version="1.0" encoding="UTF-8"?>

<!DOCTYPE struts PUBLIC
        "-//Apache Software Foundation//DTD Struts Configuration 2.1.7//EN"
        "http://struts.apache.org/dtds/struts-2.1.7.dtd">

<struts>
    <constant name="struts.devMode" value="true"></constant>
    <constant name="struts.i18n.encoding" value="UTF-8"/>
    <constant name="struts.action.extension" value="jspx"/>
    <package name="default" extends="struts-default">
        <action name="login">
            <result type="redirectAction">
                <param name="actionName">login</param>
                <param name="namespace">/user</param>
            </result>
        </action>
    </package>
    <package name="admin" namespace="/admins" extends="struts-default">
        <action name="login" class="action.loginAdminAction">
            <result name="success">/admin/hello.jsp</result>
            <result name="error">/admin/login.jsp</result>
        </action>
    </package>
    <package name="user" namespace="/users" extends="struts-default">
        <action name="login" class="action.loginUserAction">
            <param name="defaultuser">testuser</param>
            <param name="defaultpassword">123</param>
            <result name="success">/user/hello.jsp</result>
            <result name="error">/user/login.jsp</result>
        </action>
    </package>

</struts>

三、使用常量

1.为了使得支持中文输入,使用<constant name="struts.i18n.encoding" value=“GBK"/>

2.为了将action的扩展名改成.do,使用<constant name="struts.action.extension" value="do"/>,改成".jspx"试试?

3.设置浏览器不缓存静态内容<constant name="struts.serve.static.browserCache" value="false"/>

4.设置自动重新加载struts.xml:<constant name="struts.configuration.xml.reload" value="true"/>

struts.xml

<?xml version="1.0" encoding="UTF-8"?>

<!DOCTYPE struts PUBLIC
        "-//Apache Software Foundation//DTD Struts Configuration 2.1.7//EN"
        "http://struts.apache.org/dtds/struts-2.1.7.dtd">

<struts>
    <constant name="struts.devMode" value="true"></constant>
    <constant name="struts.i18n.encoding" value="UTF-8"/>
    <constant name="struts.action.extension" value="jspx"/>
    <constant name="struts.serve.static.browserCache" value="false"/>
    <constant name="struts.configuration.xml.reload" value="true"/>
    <package name="default" extends="struts-default">
        <action name="login">
            <result type="redirectAction">
                <param name="actionName">login</param>
                <param name="namespace">/user</param>
            </result>
        </action>
    </package>
    <package name="admin" namespace="/admins" extends="struts-default">
        <action name="login" class="action.loginAdminAction">
            <result name="success">/admin/hello.jsp</result>
            <result name="error">/admin/login.jsp</result>
        </action>
    </package>
    <package name="user" namespace="/users" extends="struts-default">
        <action name="login" class="action.loginUserAction">
            <param name="defaultuser">testuser</param>
            <param name="defaultpassword">123</param>
            <result name="success">/user/hello.jsp</result>
            <result name="error">/user/login.jsp</result>
        </action>
    </package>

</struts>

四、配置共享视图及异常处理机制

1.在package元素下,增加

<global-results><result name="exception">exceptions.jsp</result></global-results>

2.配置异常处理机制,增加

<exception-mapping result="exception" exception="java.lang.Exception"></exception-mapping>

3.如果希望配制成全局异常映射,则配制成<global-exception-mappings>,包含<exception-mapping>元素。

4.在exception.jsp中输出异常信息

<s:property value=“exception.message”/><s:property value=“exceptionStack”/>

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值