采用命名空间可以区分不同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. 【转】最长公共子序列(LCS),求LCS长度和打印输出LCS

    求LCS的长度,Java版本: public static int LCS(int[]a,int[] b) { int [][]c=new int[a.length+1][b.length+1]; f ...

  2. 【补充说明】Gauge框架在JS中的简单应用

    这里做一个总结 由于公司架构要用node来替代Java的部分服务,所以就研究了这个自动化测试框架:它可以很方便的测试我们的接口,而且还能使用断言[assert]来判断是否是我们预期的结果. 但是呢,由 ...

  3. JVM系列.JDK演进历史

    Java程序员为什么要了解虚拟机相关的知识 Java程序在设计之初就号称"一次编译,到处运行".Java之所以能做到"一次编译,处处运行"是因为Java虚拟机隐 ...

  4. 移动端适配-rem(新)

    概念 对于移动端开发来说,无可避免的就是直面各种设备不同分辨率和不同DPR(设备像素比)的问题,在此忽略其他兼容性问题的探讨. 移动端像素 设备像素(dp),也叫物理像素.指设备能控制显示的最小物理单 ...

  5. 腾讯云EMR大数据实时OLAP分析案例解析

    OLAP(On-Line Analytical Processing),是数据仓库系统的主要应用形式,帮助分析人员多角度分析数据,挖掘数据价值.本文基于QQ音乐海量大数据实时分析场景,通过QQ音乐与腾 ...

  6. eclipse 界面复原

    Windows-----Perspective-----Reset perspective

  7. Python——day2

    学完今天我保证你自己可以至少写50行代码 明天,还在等你 回顾day1 小练习1: 小练习2: 小练习3: 好了激情的的一天已经过去了正式开始,day2的讲解         Day2 目录: 格式化 ...

  8. 【Redis面试题】如何使用Redis实现微信步数排行榜?

    1. 前言 之前写过一篇博客,讲解的是Redis的5种数据结构及其常用命令,当时有读者评论,说希望了解下这5种数据结构各自的使用场景,不过一直也没来得及写. 碰巧,在3月份找工作面试时,有个面试官先问 ...

  9. 第二届蓝桥杯C++B组国(决)赛真题

    以下代码仅供参考,解答部分来自网友,对于正确性不能保证,如有错误欢迎评论 四方定理. 数论中有著名的四方定理:所有自然数至多只要用四个数的平方和就可以表示. 我们可以通过计算机验证其在有限范围的正确性 ...

  10. java中Runtime类详细介绍

    Runtime类描述了虚拟机一些信息.该类采用了单例设计模式,可以通过静态方法 getRuntime()获取Runtime类实例.下面演示了获取虚拟机的内存信息: package Main; publ ...