• Struts2路径问题


    今天编写了一个Struts2的登陆小例子,没有连接数据库。但是一直有问题。

    在struts.xml中的配置是这样的

    <?xml version="1.0" encoding="UTF-8" ?>
    <!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.1//EN" "http://struts.apache.org/dtds/struts-2.1.dtd">
    <struts>
    
        <constant name="struts.devMode" value="true"></constant>
        <constant name="struts.locale" value="zh_CN"></constant>
        <constant name="struts.i18n.encoding" value="utf-8"></constant>
    
        <package name="helloworld"  extends="struts-default">
            <action name="helloworldAction" class="com.action.HelloWorldAction">
                <result name="toWelcome">/jsp/welcome.jsp</result>
            </action>
            
            <action name="login" class="com.action.LoginAction">
                <result name="LOGIN">/jsp/login.jsp</result>
            </action>
        </package>
    </struts>    

    我的LoginAction

    package com.action;
    
    import com.opensymphony.xwork2.Action;
    
    public class LoginAction implements Action {
    
        @Override
        public String execute() throws Exception {
            // TODO Auto-generated method stub
            System.out.println("this is in login acion");
            return "LOGIN";
        }
    
    }

    HelloWorldAction代码

    package com.action;
    
    import com.opensymphony.xwork2.Action;
    
    public class HelloWorldAction implements Action {
        
        private String account;
        private String password;
        private String submitFlag;
    
        @Override
        public String execute() throws Exception {
            // TODO Auto-generated method stub
            System.out.println("the username and password is :"+account+"   "+password);
            return "toWelcome";
        }
    
        public String getAccount() {
            return account;
        }
    
        public void setAccount(String account) {
            this.account = account;
        }
    
        public String getPassword() {
            return password;
        }
    
        public void setPassword(String password) {
            this.password = password;
        }
    
        public String getSubmitFlag() {
            return submitFlag;
        }
    
        public void setSubmitFlag(String submitFlag) {
            this.submitFlag = submitFlag;
        }
    }

    发现我使用:localhost:8080/StrutsHello/helloworld/login来访问login.jsp但是总是返回404

    解决方法

    主要的问题还是在struts.xml配置文件里面

    1.因为我在WEB-INF下面建立了一个jsp文件夹。struts2中的/WEB-INF目录中的文件对客户端来说不是可以直接访问的,必须通过服务器端的action来实现。如果想直接通过url访问的话,只要把jsp放在WebContent或者WebRoot下就行了。

    2.网上一搜发现<package>元素还有一个namespace属性,我们需要设置namespace属性才能访问这个<package>配置里面的action元素。也可以不设置namespace属性,这样就不需要通过namespace来访问。

    所以需要设置设置package的namespace属性

    <package name="helloworld" namespace="/" extends="struts-default">

    使用/作为它的namespace任何请求都可以访问到helloworld这个package里面的action

    3.当我发现前面的配置好了,各个action也执行完毕了,但是jsp页面访问不到。

    这又是另外一个问题了:原来我在WEB-INF下建立了一个jsp文件夹来装所有的jsp文件,我的result写的目录是这样的

    <action name="helloworldAction" class="com.action.HelloWorldAction">
                <result name="toWelcome">/jsp/welcome.jsp</result>
            </action>

    在这里需要写上全路径名称并且WEB-INF前面必须加"/"如下所示才可以

    <action name="helloworldAction" class="com.action.HelloWorldAction">
                <result name="toWelcome">/WEB-INF/jsp/welcome.jsp</result>
            </action>
  • 相关阅读:
    python 安装xlrd指定版本操作,由于高级版本不直接支持打开xlsx
    python 无法升级问题解决
    将excel文件信息转为json信息,支持合并单元格
    关于数据库copy到excel时出现换行、换列行为处理方式
    关于spring security中设置header无效问题解决方式.
    mysql 提示ONLY_FULL_GROUP_BY的问题
    java 监听配置文件,无需重启服务即可热修改配置信息
    mysql 根据多表联查后的结果集更新一个表
    springboot阿里云视频点播服务实现上传视频和删除功能
    阿里云服务端SDK下载通过maven命令安装
  • 原文地址:https://www.cnblogs.com/ironmantony/p/3515136.html
Copyright © 2020-2023  润新知