`
lcy0202
  • 浏览: 176587 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

struct 2(一) 之基本原理

 
阅读更多

 

一、基本原理

1. 问题 

如果是前端的静态HTML,处理网页设计的美术人员可以独立设计

如果是后端的类,程序设计人员可以独立设计而结合HTML与Java代码的JSP,处理网页设计的美术人员与程序设计人员,必须被彼此加入至视图组件中的逻辑互相干扰,开发一个JSP页面,需要双方不断交流才能够完成,开发人员的学习负担重,他们必须一人了解多个角色的工作以及相关技术。

2. 解决

Struts它试图在不同的角度上提供网页设计人员、应用程序设计人员、架构设计人员解决方案,让不同技术的人员可以彼此合作又不互相干扰。从架构设计人员的角度来看,他只需要做出一些配置与定义,定义后端bean与前端页面的关系。从网页设计人员的角度来看,Struts提供了一套像是新版本的HTML标签,但它不是静态的,而是动态的,可以与后端的动态程序结合,但网页设计人员不需要理会后端的动态部份。从应用程序设计人员的角度来看,他只需要按架构师设计人员的定义,完成后端bean的实现即可。

3. 总的来说,struct就是为了解决前台设计人员与应用程序设计人员的各自工作的解耦,尽量让另一方的工作不影响到另一方工作。

二、使用

1. 添加jar包


注:struct-spring-plugin.jar这个包是负责struct与spring进行交互,这个包是spring提供的,spring提供的这个jar包是有严谨的版本要求,spring决定是哪一个版本的struct

2,配置web.xml: 配置struts引擎

 

<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5" 
	xmlns="http://java.sun.com/xml/ns/javaee" 
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
	xsi:schemaLocation="http://java.sun.com/xml/ns/javaee 
	http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
  <filter>
		<filter-name>struts2</filter-name>
		<filter-class>
			org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter
		</filter-class>
	</filter>
	<filter-mapping>
		<filter-name>struts2</filter-name>
		<url-pattern>/*</url-pattern>
	</filter-mapping>
</web-app>

3,添加struts.xml到src根目录

 

<?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>
<package  name="demo_struts2" extends="struts-default">
 	<action name="UserLogin" class="demo.mystruct.UserAction">
			<!-- 定义处理结果和资源之间映射关系。 -->
			<result name="error">/error.jsp</result>
			<result name="success">/welcome.jsp</result>
			<result name="input">/index.jsp</result>
	</action>
 	</package>
 </struts>

所定义的action都是在package标签里面,例如:

在struts.xml中定义一个action

 

<action name="UserLogin" class="demo.mystruct.UserAction">
<!-- 定义处理结果和资源之间映射关系。 -->
<result name="error">/error.jsp</result>
<result name="success">/welcome.jsp</result>
<result name="input">/index.jsp</result>
</action>
 

4.按struts.xml中的action定义撰写一个简单的Action类,demo.mystruct.UserAction定义两个用户输入的属性(也就是页面会传过来的参数,注意页面的name要和该类对应的属性要一致),提供getter/setter定义处理用户请求的execute方法。运行的流程是:页面使用到action--->通过web.xml的struct引擎进行过滤---->找到struct.xml,查询对应的action所对应的定义处理----->找到对应的类,执行execute方法,根据execute方法返回的内容进行跳转那个页面(跳转页面是由action定义的)。

处理类execute方法的写法

 

public String execute() throws Exception {
// 当用户请求参数的username等于admin,密码请求参数为12345时,返回success字符串
// 否则返回error字符串
f ("11".equals(getName()) && "22".equals(getPass())) {
           ActionContext.getContext().getSession().put("userinfo", getName());
          System.out.println(this.SUCCESS);
          return this.SUCCESS;
} else if(getName() == null || getName().trim().equals("")||getPass() ==             null || getPass().trim().equals("")){
          return this.INPUT;
} else
          return this.ERROR;	 
}
 5. 总结:

Struts2的工作机制:

一个请求在Struts2框架中的处理大概分为以下几个步骤:

1、客户端初始化一个指向Servlet容器(例如Tomcat)的请求;

2、这个请求经过一系列的过滤器(Filter)(这些过滤器中有一个叫做ActionContextCleanUp的可选过滤器,这个过滤器对于Struts2和其他框架的集成很有帮助,例如:SiteMesh Plugin);

3、接着FilterDispatcher被调用,FilterDispatcher询问ActionMapper来决定这个请求是否需要调用某个Action

4、如果ActionMapper决定需要调用某个ActionFilterDispatcher把请求的处理交给ActionProxy

5ActionProxy通过Configuration Manager询问框架的配置文件,找到需要调用的Action类;

6ActionProxy创建一个ActionInvocation的实例。

7ActionInvocation实例使用命名模式来调用,在调用Action的过程前后,涉及到相关拦截器(Intercepter)的调用。

8、一旦Action执行完毕,ActionInvocation负责根据struts.xml中的配置找到对应的返回结果。返回结果通常是(但不总是,也可能是另外的一个Action链)一个需要被表示的JSP或者FreeMarker的模版。在表示的过程中可以使用Struts2框架中继承的标签。在这个过程中需要涉及到ActionMapper

 

 

  • 大小: 26.6 KB
  • 大小: 38.1 KB
  • 大小: 23.4 KB
  • myStruct.zip (3.2 MB)
  • 描述: struct练习源码
  • 下载次数: 5
分享到:
评论

相关推荐

    linux课程基本原理

    linux课程资源in_size=sizeof(struct sockaddr_in); if((new_fd=accept(sockfd,(struct sockaddr *)(&client;_addr),&sin;_size))==-1) { fprintf(stderr,"Accept error:%s\n\a",strerror(errno)); exit(1); } ...

    数据结构实验一线性表的顺序存储结构.doc

    实验一:线性表的顺序存储结构 实验学时:2 实验类型:验证 一、实验目的: 1. 熟练掌握线性表的基本操作在顺序存储和链式存储上的实现; 2. 以线性表的各种操作(建立、插入、删除等)的实现为重点; 3. 掌握线性表...

    typed_struct:一个Elixir库,用于在不编写样板代码的情况下使用类型定义结构

    基本原理要在Elixir中定义一个结构,您可能要定义三件事: 结构本身,具有默认值, 强制密钥列表, 其关联的类型。 最终结果是这样的: defmodule Person do @moduledoc """ A struct representing a person. """ @...

    数据结构实验-单链表的相关运算

    2.掌握单链表的建立,查找、插入、删除等基本运算。 二、实验原理 单链表的存储结构定义为: typedef struct LNode{ ElemType data; //数据域 struct LNode *next; //指针域 }LNode; 三、实验内容 编写主函数...

    数据结构实验报告-图的遍历.doc

    实验:图的遍历 一、实验目的: 1、理解并掌握图的逻辑结构和物理结构——邻接矩阵、邻接表 2、掌握图的构造方法 3、掌握图的邻接矩阵、邻接表存储方式下基本操作的实现算法 4、掌握图的深度优先遍历和广度优先原理 ...

    Mapreduce实验报告.doc

    基本原理 Map和Reduce是两个核心操作,用户定义的map函数接收被切割过的原始的key/ value对集并且计算出一个中间key/value对集。Mapreduce库函数将所有的具有 相同key值的value聚合在一起交给用户定义的reduce函数...

    数据结构实验-队列的相关计算

    2.掌握链队列的建立,入队、出队等基本运算。 二、实验原理 采用链式存储结构的队列实质上是限定了仅在头结点之后执行删除操作、在表尾结点后执行插入操作的线性链表,如下图所示。 队列的存储结构定义为: ...

    ECC数字签名的实现(C语言)

    1.2内容及设计要求 (1)理解数字签名的基本思想 (2)理解 ECC签名算法的原理和流程 (3)掌握上述 签名算法的使用过程和实现方法 (4)分别采用不同工具实现上述各种签名算法

    操作系统课程设计-文件系统的模拟设计.doc

    课程设计的目的,一方面使学生 更透彻地理解操作系统的基本概念和原理,使之由抽象到具体;另一方面,通过课程设 计加强学生的实验手段与实践技能,培养学生独立分析问题、解决问题、应用知识的能 力和创新精神。与...

    实验链表实验报告.doc

    实验原理 基本原理:使用单链表储存一元多项式的指数和系数信息。每个结点含有两个数据域 ,分别用于存放每一项的指数和系数;一个指针域用于存放下一个结点的指针。一个 完整的链表表示一个一元多项式。文档来自于...

    数据结构实验-栈的相关运算

    2.掌握链栈的初始化,进栈、出栈、取栈顶元素、判断栈是否为空等基本运算。 二、实验原理 采用链式存储结构的栈实质上是限定了仅在头结点之后执行插入或删除操作的线性链表,限定位置如下图所示。 栈的存储结构...

    structmapper:映射器将字段从一种结构类型映射到另一种结构类型

    结构映射器映射器将字段从一种结构类型映射到另一种结构类型

    基于TCP的服务器客户端编程讲解.doc

    " "名称 " " "实验目的:1、掌握Linux下的TCP客户端基本原理和基本编程方法 " " " "实验内容: " "1、写Linux下TCP服务器套接字程序,程序运行时服务器等待客户的连接,一旦连接 " "成功,则显示客户的IP地址、端口号...

    生产者与消费者 进程的同步与互斥模拟

    通过实验模拟生产者与消费者之间的关系,了解并掌握他们之间的关系及其原理。由此增加对进程同步的问题的了解。 实验要求: 每个进程有一个进程控制块(PCB)表示。进程控制块可以包含如下信息:进程类型标号、进程...

    结构化二叉树.cpp

    【实验名称】 二叉树的基本操作实验 【实验学时】 2学时 【实验目的】 1.掌握二叉链表的存储结构形式及其描述。 2.掌握二叉树的先序、中序、后序遍历算法,将遍历方法熟练应用到建立二叉链表、统计叶子节点,...

    人工智能实验报告(2).doc

    2 8 3 1 2 3 1 4 8 4 7 6 5 7 6 5 (a) 初始状态 (b) 目标状态 图 1 八数码问题示意图 (二、)基本数据结构分析和实现 1.结点状态 我采用了struct Node数据类型 typedef struct _Node{ int digit[ROW][COL]; int ...

    驱动程序设计基础专题-filedisk源码分析

    虚拟光驱用实现文件来模拟磁盘的原理,是文件系统驱动程序。 把filedisk驱动安装,查看install.txt文件。 1.Copy the driver (filedisk.sys) to %systemroot%\system32\drivers\. 2.Import filedisk.reg to the ...

    网络编程实验-ping实验报告.doc

    ICMP TCP/IP组件包括一个ICMP(Internet Control Message Protocol)协议, 该协议定义了的报文类型: Echo,Echo Reply,用于ping程序的基本实现 下图是ICMP报文的传送: 2、RAW模式的SOCKET编程 PING程序是面向用户的...

    大学数据结构实验报告模板.doc

    " "三、实验原理 " " " "数据结构程序设计基本方法 " "实现步骤:编写、编译、链接、执行 " "四、实验内容或步骤 " "内容: " "(1)初始化栈 " "(2)入栈和出栈 " "(3)判断栈是否为空 " "(4)编写主函数实现 ...

Global site tag (gtag.js) - Google Analytics