struts2中遇到的一些小问题

struts2的一些小问题

这是我的sturts2的命名方式图片
在这里插入图片描述

部分jsp的代码(adminLogin.jsp)

<%--
  Created by IntelliJ IDEA.
  User: AAA
  Date: 2021/2/25
  Time: 21:13
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ taglib prefix="s" uri="/struts-tags"%>
<!DOCTYPE  HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<head>
    <title>Title</title>
</head>
<body>
<s:form action="login">
    <s:textfield name="user" label="name"/>
    <s:textfield name="user" label="password"/>
    <s:submit value="Submit"/>
</s:form>
</body>
</html>

部分action的代码(AdminLogin)

package com.admin;

import com.User;

public class AdminLogin {

    public User getUser() {
        return user;
    }

    public void setUser(User user) {
        this.user = user;
    }

    private User user;

    public String getDefaultUsername() {
        return defaultUsername;
    }

    public void setDefaultUsername(String defaultUsername) {
        this.defaultUsername = defaultUsername;
    }

    public String getDefaultPassword() {
        return defaultPassword;
    }

    public void setDefaultPassword(String defaultPassword) {
        this.defaultPassword = defaultPassword;
    }

    private String defaultUsername;
    private String defaultPassword;
    public String execute()
    { try{
        if(user.getUsername().equals(defaultUsername) && user.getPassword().equals(defaultPassword))
        {
            return "success";
        }
        else
        {
            return "login";
        }
    }
    catch (Exception e)
    {
        e.printStackTrace();
        return "login";}
    }
}

struts2的配置

<?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.action.extension" value="jspx"></constant>
    <constant name="struts.i18n.encoding" value="GBK"></constant>
    <constant name="struts.serve.static.browserCache" value="false"/>
    <constant name="struts.configuration.xml.reload" value="true"/>
    <package name="/admin" extends="struts-default" namespace="/admin">
            <action name="login" class="com.admin.AdminLogin" method="execute">
                <param name="defaultUsername">testadmin</param>
                <param name="defaultPassword">123</param>
                <result name="success">hello.jsp</result>
                <result name="login">adminLogin.jsp</result>
            </action>
        </package>
        <!-- Add packages here -->
    <package name="/user" extends="struts-default" namespace="/user">
        <action name="login" class="com.users.UsersLogin" method="execute">
            <param name="defaultUsername">testuser</param>
            <param name="defaultPassword">123</param>
            <result name="success">hello.jsp</result>
            <result name="login">userLogin.jsp</result>
        </action>
    </package>

    <package name="/default" extends="struts-default">
        <action name="login" class="com.DefaultLogin" method="execute">
            <result name="redirect" type="redirectAction">
                <param name="user.username">${user.username}</param>
                <param name="user.password">${user.password}</param>
                <param name="actionName">login</param>
                <param name="namespace">/user</param>
            </result>
        </action>
    </package>

    <!-- Add packages here -->

</struts>

xwork的配置(User类对应使用UserConverter这个转换器)

com.User=com.UserConverter

转换器代码

package com;

import ognl.DefaultTypeConverter;

import java.util.Map;

public class UserConverter extends DefaultTypeConverter {



    @Override
    public Object convertValue(Map context, Object value, Class toType) {
        if(toType == User.class)
        {
            String[]params = (String[])value;
            User w = new User();
            w.setUsername(params[0]);
            w.setPassword(params[1]);
            return w;
        }
        return null;
    }
}

下面是我关于struts2的一些心得:
1.关于action的重定向解决办法

1.<package name="/default" extends="struts-default">  
2.        <action name="login" class="com.DefaultLogin" method="execute">  
3.            <result name="redirect" type="redirectAction">  
4.                <param name="user.username">${user.username}</param>  
5.                <param name="user.password">${user.password}</param>  
6.                <param name="actionName">login</param>  
7.                <param name="namespace">/user</param>  
8.            </result>  
9.        </action>  
10.    </package>  

通过actionName和namespace来访问 /user/login 而且要将之前的值传过去,不然在/user/login.action中会因为execute中的字符串相等equal()的方法报错——因为没有值的话就会为空,值为空的时候就会报错

<constant name="struts.configuration.xml.reload" value="true"/>  

这个语句并不能让我自动加载struts.xml

3.关于访问网页的时候

输入http://localhost:8088/SSH_Project_2_war_exploded/admin/aaa/login.jspx的时候会报错,因为struts2会让你进入到以/admin为namespace下去找,但是却找不到/aaa/login.jspx这个文件所以会报404.但是当你输入http://localhost:8088/SSH_Project_2_war_exploded/admi/aaa/login.jspx的时候,因为namespace中没有/admi,也没有/aaa这些命名空间,所以会直接选择默认的命名空间default,就会跳转到login.jspx,测试中的/error/login.jspx,就是因为没有找到/error这个namespace,所以自动跳转到命名空间为default的namespace.下面图片是输入/error/login.jspx时候自动跳转默认命名空间的action中
在这里插入图片描述

4.关于为什么Jsp中的user可以直接知道他就是一个User类
因为struts2是已经加载的了(而不是边运行边加载,类似于玩游戏的时候一些东西加载了,但是其他东西要用的时候才加载),user已经在action中定义为了User类,所以在jsp中的name=”user”
会被认为是User类。

5.为什么action中可以直接获取到网页中输入的值
Struts2中的action如果配置了get和set方法后能够从自动外部注入值,不需要通过request获取。

6.判断是不是User类的时候要用到xwork来配置

7.在action执行方法的时后最好用try和catch不然出现未知异常的时候会报错。

  public String execute()
    {
           try{
        if(user.getUsername().equals(defaultUsername) && user.getPassword().equals(defaultPassword))
        {
            return "success";
        }
        else
        {
            return "login";
        }
    }
    catch (Exception e)
    {
        e.printStackTrace();
        return "login";}



    }
1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 、4下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。、可私 6信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 、4下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。、可 6私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 、4下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。、可私 6信博主看论文后选择购买源代码。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值