• 7、struct2的命名空间


    采用命名空间可以区分不同action下面相同的函数名称

    我们来看下面的一个程序的代码

    我们来看下面的代码:

    添加物料的action处理类:

    package com.weiyuan.test;
    
    public class ItemAction {
    
        private String itemName;
        private String itemMessage;
        public String getItemName() {
            return itemName;
        }
        public void setItemName(String itemName) {
            this.itemName = itemName;
        }
        public String getItemMessage() {
            return itemMessage;
        }
        public void setItemMessage(String itemMessage) {
            this.itemMessage = itemMessage;
        }
        
        public String execute() throws Exception{
            
            return "success";
            
        }
    }

    添加用户的action处理类:

    package com.weiyuan.test;
    
    /**
     * struct2的action可以不继承任何框架的接口
     * 1、默认调用的是execute()方法
     * */
    public class LoginAction {
        private String username;
        private String password;
        
        public String getUsername() {
            return username;
        }
    
        public void setUsername(String username) {
            this.username = username;
        }
    
        public String getPassword() {
            return password;
        }
    
        public void setPassword(String password) {
            this.password = password;
        }
    
        public String execute() throws Exception{
            if("admin".equals(username)&&"admin".equals(password)){
                return "success";
            }else{
                return "error";
            }
        }
    
    }

    对应的添加成功的jsp文件

    add_item_sucess.jsp

    <%@ page language="java" contentType="text/html; charset=utf-8"
        pageEncoding="utf-8"%>
    <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
    <html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
    <title>Insert title here</title>
    </head>
    <body>
    登陆物料成功
    </body>
    </html>

    对应的添加用户成功的jsp文件

    <%@ page language="java" contentType="text/html; charset=utf-8"
        pageEncoding="utf-8"%>
    <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
    <html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
    <title>Insert title here</title>
    </head>
    <body>
    添加用户成功
    </body>
    </html>

    程序入口对应的jsp文件入口:index.jsp

    
    
    <%@ page language="java" contentType="text/html; charset=GB18030"
        pageEncoding="GB18030"%>
    <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
    <html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=GB18030">
    <title>Insert title here</title>
    </head>
    <body>
        <h1>添加用户</h1>
        <form action="user/add.action" method="post">
            用户代码:<input type="text" name="username"><br>
            用户名称:<input type="text" name="password"><br>
            <input type="submit" value="添加">
        </form>
        <hr>
        <h1>添加物料</h1>
        <form action="item/add.action" method>
            物料代码:<input type="text" name="itemName"><br>
            物料名称:<input type="text" name="itemMessage"><br>
            <input type="submit" value="添加">
        </form>
    </body>
    </html>
    
    
    
     

    我们来看看配置文件的struct,xml文件

    
    

    <?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>
    <!-- 需要继承extends="struts-default",否则struct2的拦截器就无法使用 -->
    <package name="user_struct" extends="struts-default" namespace="/user">
    <action name="add" class="com.weiyuan.test.LoginAction">
    <result name="success">add_user_sucess.jsp</result>
    </action>
    </package>

    
    


    <package name="item_struct" extends="struts-default"namespace="/item">
    <action name="add" class="com.weiyuan.test.ItemAction">
    <result name="success">add_item_sucess.jsp</result>
    </action>
    </package>
    </struts>

    这里很关键:有两个地址需要注意

    我们不同的模块配置使用了不同的包名:用户模块对应的包名是package name="user_struct"

    物理模块对应的包名是:package name="item_struct"

    第二我们使用了命名空间,在user模块中我们提供了 namespace="/user"  在物理模块提供的命令空间是namespace="/item"

    注意命名空间必须以/开头

    这样在不同的命名空间下我们可以使用相同函数名的action

    我们的action都以add开头

    在jsp中访问action的时候,因为引入了命名空间,我们访问方式就是命名空间加上action的形式

     <form action="user/add.action" method="post">

       <form action="item/add.action" method>

    上面就是访问命名空间为user下的add这个action

    Struts2命名空间和字符集设置

    采用命名空间,可以区分不同的包下相同的Action名称

    如果package的namespace属性没有指定,使用的默认命名空间为“”

    Struts2中Action的完整路径应该为:namespace+Action的名称

    首先在指定的命名空间下查找Action,如果找到了就使用此Action,如果没有找到在上层目录中查找,一直到
    根(缺省命名空间),在此过程中如果找到了Action就会使用此Action,如果都没有找到就会抛出Action没有找到异常

    2、struct配置对应的字符集编码的问题

  • 相关阅读:
    编译asp.net core源代码,并搭建基于源代码的测试环境
    sql server 按照in里面的顺序进行查询
    j-roadflow-java工作流修改抄送任务已阅知表单为只读
    roadflow工作流用nginx做负载均衡的配置文件
    vue ie 报错SCRIPT5022: SecurityError sockjs.js (1683,3)
    RoadFlow Asp.net Core Vue工作流引擎增加对PostgreSQL数据库的支持
    点,线,面
    .NET 5应用程序中的跨域请求
    物料齐套计算
    高级计划AP(Advance Planning)是如何运作的 (转载)
  • 原文地址:https://www.cnblogs.com/kebibuluan/p/8056828.html
Copyright © 2020-2023  润新知