采用命名空间可以区分不同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配置对应的字符集编码的问题

7、struct2的命名空间的更多相关文章

  1. struct2 命名空间

    转自http://blog.csdn.net/carefree31441/article/details/4857546 使用Struts2,配置一切正常,使用常用tag也正常,但是在使用<s: ...

  2. Struct2 基础介绍

    前面花一周时间学习了servlet+jsp+mysql, 并且简单实现了登录注册等操作.对Servlet应用有了基础了解! 关于Struct2这个经常听说,但是自己没有用过.今天在这学习总结下,目的是 ...

  3. struct2中package的参数解析

    struct2框架的核心组件是action和拦截器,它使用包来管理action和拦截器,每个包就是多个action.多个拦截器引用的集合.在struct.xml中,package元素用于定义包的配置, ...

  4. 【.net 深呼吸】细说CodeDom(3):命名空间

    在上一篇文章中,老周介绍了表达式和语句,尽管老周没有把所有的内容都讲一遍,但相信大伙至少已经掌握基本用法.在本文中,咱们继续探讨 CodeDom 方面的奥秘,这一次咱们聊聊命名空间. 在开始之前,老周 ...

  5. C++中的命名空间

    一,命名空间(namespace)的基本概念以及由来 1.什么是标识符: 在C++中,标识符可以是基本的变量,类,对象,结构体,函数,枚举,宏等. 2.什么是命名空间: 所谓的命名空间是指标识符的可见 ...

  6. PHP 面向对象编程和设计模式 (5/5) - PHP 命名空间的使用及名称解析规则

    PHP高级程序设计 学习笔记 2014.06.12 命名空间概述 PHP 在 5.3.0 以后的版本开始支持命名空间.什么是命名空间?从广义上来说,命名空间是一种封装事物的方法.在很多地方都可以见到这 ...

  7. JavaScript权威设计--命名空间,函数,闭包(简要学习笔记十二)

    1.作为命名空间的函数 有时候我们需要声明很多变量.这样的变量会污染全局变量并且可能与别人声明的变量产生冲突. 这时.解决办法是将代码放入一个函数中,然后调用这个函数.这样全局变量就变成了 局部变量. ...

  8. .Net 序列化(去除默认命名空间,添加编码)

    1.序列化注意事项 (1).Net 序列化是基于对象的.所以只有实例字段呗序列化.静态字段不在序列化之中. (2)枚举永远是可序列化的. 2.XML序列化时去除默认命名空间xmlns:xsd和xmln ...

  9. [Yii2.0] 以Yii 2.0风格加载自定义类或命名空间 [配置使用Yii2 autoloader]

    Yii 2.0最显著的特征之一就是引入了命名空间,因此对于自定义类的引入方式也同之前有所不同.这篇文章讨论一下如何利用Yii 2.0的自动加载机制,向系统中引入自定义类和命名空间.本文旨在抛砖引玉,如 ...

随机推荐

  1. 抽象类(abstract class)与抽象方法

    package cm.aff.abst; /* abstract:抽象的,,可以修饰类,方法 1.修饰类: 抽象类: ①不能被实例化 ②有构造器的 ③凡是类都有构造器 ④抽象方法所修饰的类一定是抽象类 ...

  2. 【Checkpoint】HA模式下结合zookeeper说一下checkpoint流程

    checkpoint过程 配置了HA的HDFS中,有active和standby namenode两个namenode节点.他们的内存中保存了一样的集群元数据信息,这个后续我会详细用一篇文章介绍HA, ...

  3. (Java实现) 洛谷 P1071 潜伏者

    题目描述 R国和 S国正陷入战火之中,双方都互派间谍,潜入对方内部,伺机行动.历尽艰险后,潜伏于 S国的 R 国间谍小 C终于摸清了 S 国军用密码的编码规则: 1. S 国军方内部欲发送的原信息经过 ...

  4. 如何获取CSDN的积分?

    个人感觉就是写博客就给积分 具体给多少? CSDN应该有自己的积分规则 总之一句话:写博客涨积分

  5. Java实现 LeetCode 403 青蛙过河

    403. 青蛙过河 一只青蛙想要过河. 假定河流被等分为 x 个单元格,并且在每一个单元格内都有可能放有一石子(也有可能没有). 青蛙可以跳上石头,但是不可以跳入水中. 给定石子的位置列表(用单元格序 ...

  6. Java实现蓝桥杯VIP算法训练 数组逆序排列

    试题 算法训练 数组逆序排列 资源限制 时间限制:1.0s 内存限制:256.0MB 问题描述 编写一个程序,读入一组整数(不超过20个),并把它们保存在一个整型数组中.当用户输入0时,表示输入结束. ...

  7. java类加载器是什么?

    类加载器是有了解吗? 解析:底层原理的考察,其中涉及到类加载器的概念,功能以及一些底层的实现. 答:顾名思义,类加载器(class loader)用来加载 Java 类到 Java 虚拟机中.一般来说 ...

  8. Python学习之turtle绘图篇

    画一个红色的五角星 from turtle import * color('red','red') begin_fill() for i in range(5): fd(200) rt(144) en ...

  9. Git Gui工具从远程克隆代码总是提示路径已经存在。问题完美解决!

    最近使用Git Gui工具从远程克隆代码总是提示路径已经存在,提示如下图, 原因是使用Git Guii克隆代码时的路径不能是选择一个已经建好的目录(D盘的project下的test文件夹是我提前建好的 ...

  10. 如何优雅地停止 Spring Boot 应用?

    首先来介绍下什么是优雅地停止,简而言之,就是对应用进程发送停止指令之后,能保证正在执行的业务操作不受影响,可以继续完成已有请求的处理,但是停止接受新请求. 在 Spring Boot 2.3 中增加了 ...