采用命名空间可以区分不同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. PowerShell读写文件,行的去重

    Power Shell类似bash终端能够直接操作文件,使用其内置的Get-Content函数,配合一定的参数,能方便地读取文件和重定向. 1. Power Shell>>Get-Cont ...

  2. java方式实现希尔排序

    一.希尔排序简述和基本思想 希尔排序也称递减增量排序算法,是插入排序的一种更高效的改进版本.但是希尔排序是非稳定排序的算法.希尔排序比一般插入排序有以下几点改进: 一般插入排序每次只能将数据移动一位, ...

  3. websocket ddos检测脚本

    from websocket import create_connection while(1): ws = create_connection('wss://ha-cmim.cmcc-cs.cn:1 ...

  4. Docker: GUI 应用,Ubuntu 上如何运行呢?

    操作系统: Ubuntu 18.04 运行镜像: continuumio/anaconda3, based on debian Step 1) 安装 Docker # update the apt p ...

  5. ES6-解析赋值

    1.注意事项 A.左右两边结构必须一样 B.右边必须是个东西 C.声明和赋值不能分开(必须在一句话里完成) 2.代码如下 <!DOCTYPE html> <html lang=&qu ...

  6. 1. vue文件结构

    1)这是文件规则 <template> <div > </div> </template> <script> Name:"当前的名 ...

  7. Nginx 笔记(三)nginx 配置实例 - 反向代理、负载均衡、动静分离

    个人博客网:https://wushaopei.github.io/    (你想要这里多有) 一.反向代理 反向代理准备工作: (1)在 liunx 系统安装 tomcat,使用默认端口 8080 ...

  8. Java实现 蓝桥杯 算法提高 因式分解

    算法提高 8-1因式分解 时间限制:10.0s 内存限制:256.0MB 提交此题 问题描述 设计算法,用户输入合数,程序输出若个素数的乘积.例如,输入6,输出23.输入20,输出22*5. 样例 与 ...

  9. Java实现 LeetCode 378 有序矩阵中第K小的元素

    378. 有序矩阵中第K小的元素 给定一个 n x n 矩阵,其中每行和每列元素均按升序排序,找到矩阵中第k小的元素. 请注意,它是排序后的第k小元素,而不是第k个元素. 示例: matrix = [ ...

  10. 第四届蓝桥杯JavaB组国(决)赛真题

    解题代码部分来自网友,如果有不对的地方,欢迎各位大佬评论 题目1.猜灯谜 题目描述 A 村的元宵节灯会上有一迷题: 请猜谜 * 请猜谜 = 请边赏灯边猜 小明想,一定是每个汉字代表一个数字,不同的汉字 ...