文档库 最新最全的文档下载
当前位置:文档库 › Struts2框架搭建教程

Struts2框架搭建教程

Struts2框架搭建教程
Struts2框架搭建教程

Struts2教程1:第一个Struts2程序

在本系列教程中我们将学习到Struts2的各种技术。在本教程中使用的工具和程序库的版本如下:

开发工具:MyEclipse6

Web服务器:Tomcat6

Struts版本:Struts2.0.11.1

JDK版本:JDK1.5.0_12

J2EE版本:Java EE5.0

在本系列教程中Web工程的上下文路径都是struts2,如果在Web根目录有一个index.jsp文件,则访问路径如下:

http://localhost:8080/struts2/index.jsp

由于MyEclipse6目前并不支持Struts2,所以我们需要到https://www.wendangku.net/doc/aa380041.html,去下载Struts2安装包。要想正常使用Struts2,至少需要如下五个包(可能会因为Struts2的版本不同,包名略有差异,但包名的前半部是一样的)。

struts2-core-2.0.11.1.jar

xwork-2.0.4.jar

commons-logging-1.0.4.jar

freemarker-2.3.8.jar

ognl-2.6.11.jar

Struts2虽然在大版本号上是第二个版本,但基本上在配置和使用上已经完全颠覆了Struts1.x的方式(当然,Struts2仍然是基于MVC模式的,也是动作驱动的,可能这是唯一没变的东西)。Struts2实际上是在Webwork基础上构建起来的MVC框架。我们从Struts2的源代码中可以看到,有很多都是直接使用的xwork(Webwork的核心技术)的包。既然从技术上来说Struts2是全新的框架,那么就让我们来学习一下这个新的框架的使用方法。

如果大家使用过Struts1.x,应该对建立基于Struts1.x的Web程序的基本步骤非常清楚。让我们先来回顾一下建立基于Struts1.x的Web程序的基本步骤。

1.安装Struts。由于Struts的入口点是ActionServlet,所以得在web.xml中配置一下这

个Servlet。

2.编写Action类(一般从org.apache.struts.action.Action类继承)。

3.编写ActionForm类(一般从org.apache.struts.action.ActionForm类继承),这一步

不是必须的,如果要接收客户端提交的数据,需要执行这一步。

4.在struts-config.xml文件中配置Action和ActionForm。

5.如果要采集用户录入的数据,一般需要编写若干JSP页面,并通过这些JSP页面中的

form将数据提交给Action。

下面我们就按着编写struts1.x程序的这五步和struts2.x程序的编写过程一一对应,看看它们谁更“酷”。下面我们来编写一个基于Struts2的Web程序。这个程序的功能是让用户录入两个整数,并提交给一个Struts Action,并计算这两个数的代数和,如果代码和为非负数,则跳转到positive.jsp页面,否则跳转到negative.jsp页面。

【第1步】安装Struts2

这一步对于Struts1.x和Struts2都是必须的,只是安装的方法不同。Struts1的入口点是一个Servlet,而Struts2的入口点是一个过滤器(Filter)。因此,Struts2要按过滤器的方式配置。下面是在web.xml中配置Struts2的代码:

struts2

org.apache.struts2.dispatcher.FilterDispatcher

struts2

/*

【第2步】编写Action类

这一步和Struts1.x也必须进行。只是Struts1.x中的动作类必须从Action类中继承,而Struts2.x的动作类需要从com.opensymphony.xwork2.ActionSupport类继承。下面是计算两个整数代码和的Action类,代码如下:

package action;

import com.opensymphony.xwork2.ActionSupport;

public class FirstAction extends ActionSupport

{

private int operand1;

private int operand2;

public String execute() throws Exception

{

if (getSum() >= 0) // 如果代码数和是非负整数,跳到positive.jsp页面

{

return "positive";

}

else// 如果代码数和是负整数,跳到negative.jsp页面

{

return "negative";

}

}

public int getOperand1()

{

return operand1;

}

public void setOperand1(int operand1)

{

System.out.println(operand1);

this.operand1 = operand1;

}

public int getOperand2()

{

return operand2;

}

public void setOperand2(int operand2)

{

System.out.println(operand2);

this.operand2 = operand2;

}

public int getSum()

{

return operand1 + operand2; // 计算两个整数的代码数和

}

}

从上面的代码可以看出,动作类的一个特征就是要覆盖execute方法,只是Struts2的execute 方法没有参数了,而Struts1.x的execute方法有四个参数。而且execute方法的返回值也不同的。Struts2只返回一个String,用于表述执行结果(就是一个标志)。上面代码的其他部分将在下面讲解。

【第3步】编写ActionForm类

在本例中当然需要使用ActionForm了。在Struts1.x中,必须要单独建立一个ActionForm 类(或是定义一个动作Form),而在Struts2中ActionForm和Action已经二合一了。从第二步的代码可以看出,后面的部分就是应该写在ActionForm类中的内容。所以在第2步,本例的ActionForm类已经编写完成(就是Action类的后半部分)。

【第4步】配置Action类

这一步struts1.x和struts2.x都是必须的,只是在struts1.x中的配置文件一般叫

struts-config.xml(当然也可以是其他的文件名),而且一般放到WEB-INF目录中。而在struts2.x中的配置文件一般为struts.xml,放到WEB-INF"classes目录中。下面是在struts.xml 中配置动作类的代码:

"-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"

"https://www.wendangku.net/doc/aa380041.html,/dtds/struts-2.0.dtd">

extends="struts-default">

/positive.jsp

/negative.jsp

标签中可以有多个,第一个可以指定一个Servlet访问路径(不包括动作名),如“/mystruts”。extends属性继承一个默认的配置文件“struts-default”,一般都继承于它,大家可以先不去管它。标签中的name属性表示动作名,class表示动作类名。

标签的name实际上就是execute方法返回的字符串,如果返回的是“positive”,就跳转到positive.jsp页面,如果是“negative”,就跳转到negative.jsp页面。在中可以有多个,在中可以有多个。我们可以用如下的URL来访问这个动作:

http://localhost:8080/struts2/mystruts/sum.action

注:Struts1.x的动作一般都以.do结尾,而Struts2是以.action结尾。

【第5步】编写用户录入接口(JSP页面)

1.主界面(sum.jsp)

在Web根目录建立一个sum.jsp,代码如下:

<%@ page language="java" import="java.util.*" pageEncoding="GBK" %>

<%@ taglib prefix="s" uri="/struts-tags"%>

输入操作数

求代数和


在sum.jsp中使用了Struts2带的tag。在Struts2中已经将Struts1.x的好几个标签库都统一了,在Struts2中只有一个标签库/struts-tags。这里面包含了所有的Struts2标签。但使用Struts2的标签大家要注意一下。在中最好都使用Struts2标签,尽量不要用HTML或普通文本,大家可以将sum.jsp的代码改为如下的形式,看看会出现什么效果:

... ...

求代数和


操作数1:

操作数2:

... ...

提示一下,在中Struts2使用

定位。

2.positive.jsp

<%@ page language="java" import="java.util.*" pageEncoding="GBK"%> <%@ taglib prefix="s" uri="/struts-tags" %>

显示代数和

代数和为非负整数

3.negative.jsp

<%@ page language="java" import="java.util.*" pageEncoding="GBK"%> <%@ taglib prefix="s" uri="/struts-tags" %>

显示代数和

代数和为负整数

这两个jsp页面的实现代码基本一样,只使用了一个标签来显示Action类中的sum属性值。标签是从request对象中获得了一个对象中得到的sum属性,如我们可以使用如下的代码来代替

<%

com.opensymphony.xwork2.util.OgnlValueStack ovs =

(com.opensymphony.xwork2.util.OgnlValueStack)request.getAttribute("struts.valueStack");

out.println(ovs.findString("sum"));

%>

启动Tomcat后,在IE中输入如下的URL来测试这个例子:

http://localhost:8080/struts2/sum.jsp

Struts2教程2:处理一个form多个submit

在很多Web应用中,为了完成不同的工作,一个HTML form标签中可能有两个或多个submit 按钮,如下面的代码所示:

由于在
中的多个提交按钮都向一个action提交,使用Struts2 Action的execute

方法就无法判断用户点击了哪一个提交按钮。如果大家使用过Struts1.x就会知道在

Struts1.2.9之前的版本需要使用一个LookupDispatchAction动作来处理含有多个submit的form。但使用LookupDispatchAction动作需要访问属性文件,还需要映射,比较麻烦。从Struts1.2.9开始,加入了一个EventDispatchAction动作。这个类可以通过java反射来调用通过request参数指定的动作(实际上只是判断某个请求参数是不存在,如果存在,就调用在action类中和这个参数同名的方法)。使用EventDispatchAction必须将submit的name属性指定不同的值以区分每个submit。而在Struts2中将更容易实现这个功能。

当然,我们也可以模拟EventDispatchAction的方法通过request获得和处理参数信息。但这样比较麻烦。在Struts2中提供了另外一种方法,使得无需要配置可以在同一个action 类中执行不同的方法(默认执行的是execute方法)。使用这种方式也需要通过请求参来来指定要执行的动作。请求参数名的格式为

action!method.action

注:由于Struts2只需要参数名,因此,参数值是什么都可以。

下面我就给出一个实例程序来演示如何处理有多个submit的form:

【第1步】实现主页面(more_submit.jsp)

<%@ page language="java" import="java.util.*" pageEncoding="GBK"%>

<%@ taglib prefix="s" uri="/struts-tags" %>

My JSP 'hello.jsp' starting page

在more_submit.jsp中有两个submit:保存和打印。其中分别通过method属性指定了要调用的方法:save和print。因此,在Action类中必须要有save和print方法。

【第2步】实现Action类(MoreSubmitAction)

package action;

import javax.servlet.http.*;

import com.opensymphony.xwork2.ActionSupport;

import org.apache.struts2.interceptor.*;

public class MoreSubmitAction extends ActionSupport implements ServletRequestAware

{

private String msg;

private javax.servlet.http.HttpServletRequest request;

// 获得HttpServletRequest对象

public void setServletRequest(HttpServletRequest request)

{

this.request = request;

}

// 处理save submit按钮的动作

public String save() throws Exception

{

request.setAttribute("result", "成功保存[" + msg + "]");

return "save";

}

// 处理print submit按钮的动作

public String print() throws Exception

{

request.setAttribute("result", "成功打印[" + msg + "]");

return "print";

}

public String getMsg()

{

return msg;

}

public void setMsg(String msg)

{

this.msg = msg;

}

}

上面的代码需要注意如下两点:

save和print方法必须存在,否则会抛出https://www.wendangku.net/doc/aa380041.html,ng.NoSuchMethodException异常。

Struts2 Action动作中的方法和Struts1.x Action的execute不同,只使用Struts2 Action 动作的execute方法无法访问request对象,因此,Struts2 Action类需要实现一个Struts2自带的拦截器来获得request对象,拦截器如下:

org.apache.struts2.interceptor. ServletRequestAware

【第3步】配置Struts2 Action

struts.xml的代码如下:

"-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"

"https://www.wendangku.net/doc/aa380041.html,/dtds/struts-2.0.dtd">

/result.jsp

/result.jsp

【第4步】编写结果页(result.jsp)

<%@ page pageEncoding="GBK"%>

提交结果

${result}

在result.jsp中将在save和print方法中写到request属性中的执行结果信息取出来,并输出到客户端。

启动Tomcat后,在IE中执行如下的URL来测试程序:

http://localhost:8080/moresubmit/more_submit.jsp

大家也可以直接使用如下的URL来调用save和print方法:

调用save方法:http://localhost:8080/moresubmit/submit!save.action

调用print方法:http://localhost:8080/moresubmit/submit!print.action

源代码:https://www.wendangku.net/doc/aa380041.html,/attachment.php?aid=520773

Struts2教程3:struts.xml常用配置解析

在本文中将详细讲述struts.xml文件的常用配置及注意事项。

1.使用标签重用配置文件

在Struts2中提供了一个默认的struts.xml文件,但如果package、action、interceptors等配置比较多时,都放到一个struts.xml文件不太容易维护。因此,就需要将struts.xml文件分成多个配置文件,然后在struts.xml文件中使用标签引用这些配置文件。这样做的优点如下:

结构更清晰,更容易维护配置信息。

配置文件可以复用。如果在多个Web程序中都使用类似或相同的配置文件,那么可以使用标签来引用这些配置文件,这样可以减少工作量。

假设有一个配置文件,文件名为newstruts.xml,代码如下:

"-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"

"https://www.wendangku.net/doc/aa380041.html,/dtds/struts-2.0.dtd">

/result.jsp

/result.jsp

则struts.xml引用newstruts.xml文件的代码如下:

"-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"

"https://www.wendangku.net/doc/aa380041.html,/dtds/struts-2.0.dtd">

大家要注意一下,用引用的xml文件也必须是完成的struts2的配置。实际上在引用时是单独解析的xml文件,而不是将被引用的文件插入到struts.xml文件中。

2.action的别名

在默认情况下,Struts2会调用动作类的execute方法。但有些时候,我们需要在一个动作类中处理不同的动作。也就是用户请求不同的动作时,执行动作类中的不同的方法。为了达到这个目的,可以在标签中通过method方法指定要指行的动作类的方法名,并且需要为不同的动作起不同的名子(也称为别名)。如下面代码所示:

"-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"

"https://www.wendangku.net/doc/aa380041.html,/dtds/struts-2.0.dtd">

上面代码的两个动作的class属性都指向同一个类,name为这个类起了两个动作别名:test和my。在动作my中,使用了method属性指定要要运行的方法名为my。

在MyAction类中必须要有my方法,代码如下:

package action;

import com.opensymphony.xwork2.ActionSupport;

public class MyAction extends ActionSupport

{

public String execute() throws Exception

{

// 处理test动作的代码

}

public String my() throws Exception

{

// 处理my动作的代码

}

}

除了在struts.xml中配置别名,还可以通过请求参数来描述指定动作(并不需要在struts.xml中配置)。请求参数的格式如下:

http://localhost:8080/contextPath/actionName!method.action

关于通过请求指定动作的详细内容,请参阅笔者写的《Struts2教程2:处理一个form 多个submit》。

3.为action指定参数

在struts2中还可以为action指定一个或多个参数。大家还记着struts1.x是如何设置的action参数不?在struts1.x中可以使用标签的parameter属性为其指定一个action 参数,如果要指定多个,就只能通过逗号(,)或其他的分隔符将不同的参数隔开。而在struts2中可以通过标签指定任意多个参数。代码如下:

value1

value2

/result.jsp

当然,在action中读这些参数也非常简单,只需要象获取请求参数一样在action类中定义相应的setter方法即可(一般不用定义getter方法)。如下面的代码将读取param1和param2参数的值:

package action;

import com.opensymphony.xwork2.ActionSupport;

public class MyAction extends ActionSupport

{

private String param1;

private String param2;

public String execute() throws Exception

{

System.out.println(param1 + param2);

}

public void setParam1(String param1)

{

this.param1 = param1;

public void setParam2(String param2)

{

this.param2 = param2;

}

}

当struts2在调用execute之前,param1和param2的值就已经是相应参数的值了,因此,在execute方法中可以直接使用param1和param2。

4.选择result类型

在默认时,标签的type属性值是“dispatcher”(实际上就是转发,forward)。开发人员可以根据自己的需要指定不同的类型,如redirect、stream等。如下面代码所示:

/result.jsp

这此result-type可以在struts2-core-2.0.11.1.jar包或struts2源代码中的struts-default.xml 文件中找到,在这个文件中找到标签,所有的result-type都在里面定义了。代码如下:

5.全局result

有很多时候一个初很多使用,这时可以使用标签来定义全局的,代码如下:

/result.jsp

如果中没有相应的,Struts2就会使用全局的

在本文中将详细讲述struts.xml文件的常用配置及注意事项。

1.使用标签重用配置文件

在Struts2中提供了一个默认的struts.xml文件,但如果package、action、interceptors等配置比较多时,都放到一个struts.xml文件不太容易维护。因此,就需要将struts.xml文件分成多个配置文件,然后在struts.xml文件中使用标签引用这些配置文件。这样做的优点如下:

结构更清晰,更容易维护配置信息。

配置文件可以复用。如果在多个Web程序中都使用类似或相同的配置文件,那么可以使用标签来引用这些配置文件,这样可以减少工作量。

假设有一个配置文件,文件名为newstruts.xml,代码如下:

"-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"

"https://www.wendangku.net/doc/aa380041.html,/dtds/struts-2.0.dtd">

/result.jsp

/result.jsp

则struts.xml引用newstruts.xml文件的代码如下:

"-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"

"https://www.wendangku.net/doc/aa380041.html,/dtds/struts-2.0.dtd">

大家要注意一下,用引用的xml文件也必须是完成的struts2的配置。实际上在引用时是单独解析的xml文件,而不是将被引用的文件插入到struts.xml文件中。

2.action的别名

在默认情况下,Struts2会调用动作类的execute方法。但有些时候,我们需要在一个动作类中处理不同的动作。也就是用户请求不同的动作时,执行动作类中的不同的方法。为了达到这个目的,可以在标签中通过method方法指定要指行的动作类的方法名,并且需要为不同的动作起不同的名子(也称为别名)。如下面代码所示:

"-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"

"https://www.wendangku.net/doc/aa380041.html,/dtds/struts-2.0.dtd">

Struts2框架工作原理及应用体会

2012年第11卷第6期 产业与科技论坛2012.(11).6 Industrial &Science Tribune Struts2框架工作原理及应用体会 □宋 君 张家爱 【摘要】通过针对特定用户的分析,搭建以Struts2为技术核心的旅行社管理系统。本文简单的介绍了MVC 、 Struts2的工作原理,同时总结了在项目制作过程中所得到的心得。 【关键词】 Struts2;MVC ;FilterDispatcher ;Action 【基金项目】本文为大学生科技创新院级基金项目(编号:2011070)成果 【作者单位】宋君,吉林农业科技学院信息工程学院;张家爱,吉林农业科技学院信息工程学院教师 本着锻炼自我与积极参与到实用性技术的目标,以发掘自身创新意识为前提。利用空闲时间,在老师的指导下,进行了一次大学生创新项目的实践性活动。本着实用原则,以某中小旅行社为客户(根据用户需求,匿名),以Struts2框架为基点,进行了一次旅行社管理系统的开发。在项目结束之余, 特将在项目过程中经历的种种认识进行了简单的总结,希望让阅读本文的朋友们,更多的参与到此类活动中。 一、基础思想— ——MVC 简述作为时下经典框架之一, MVC 具有其独特的价值。MVC 框架简单的说,就是将数据模型与用户视图进行分离。通过控制器进行协调处理的一种结构是框架。同时,也是本文中要讨论的Sturts2框架的基础思想。 M 是指模型层(Model ),V 是指用户视图(View ),C 则是指控制器 (Controller )。这种划分方式是以将模型层与视图层进行代码分离,从而降低两者之间的耦合性,使同一程序可以使用不同形式进行表现。不同层之间的修改不会或尽量少的印象到其他层功能的史前为前提。有效的提高的代码的维护性和设计难度。 图1 二、 Struts2工作原理(一)Struts2框架组成。Struts2框架由三个主要部分组成:核心控制器、业务控制器,以及由用户实现的业务逻辑组件。这里我们将侧重于核心控制器与业务控制器的理解与说明。 (二)核心控制器:FilterDispatcher 。FilterDispatcher 是Struts2框架的核心控制器,在此,我们可以将FilterDispatcher 看作一个类似于过滤网的过滤器。当用户发出请求,并到达Web 硬哟那种时,该过滤器会过滤用户请求。如果用户请求的结尾为action ,则将该请求转入Struts2框架进行处理。当Struts2框架获得了*.actio 请求后,会根据请求前面“*”的那部分内容,决定调用哪个业务逻辑组件作为响应单位。这里需要说明的是Struts2用来处理用户请求的Action 实例并不是业务控制器,而是作为Action 的代理———正因为Struts2的一大特点,与Servlet API 的非耦合性,使得用户实现的业务控制器无法直接处理用户请求。有效的提高了后期调试维护的效率。而Struts2框架再次提供了了一系列的拦截器。这些拦截器负责将HttpServletRequest 请求的参数解析出来,传入Action 中,并毁掉Action 的Execute 方法来处理用户请求。用户实现的Action 类仅作为Struts2的Action 代理的代理目标。用户实现的业务控制器则包含了对用户请求的处理。用户的请求数据包含在HttpServletRequest 对象中,而用户的Action 类无需访问HttpServletRequest 对象。拦截器负责将HttpServletRequest 里的请求数据解析出来,并传给业务逻辑组件Action 实例。 (三)业务控制器。业务控制器就是前文提到的用来实现用户Action 的实力,这里的每个Action 类通常包含有一个execute 方法,当业务控制器处理完用户的请求后,该方法将会针对此次处理返回一个字符串— ——该字符串就是一个逻辑树图名。当程序开发人员开发出系统所需要的业务控制器后,还需要针对性的配置Struts2的Action ,即需要配置Ac- tion 的以下三个部分:(1)Action 所处理的URl 。(2)Action 组件所对应的实现类。(3)Action 里包含的逻辑试图和物理资源之间的对应关系。每个Action 都要处理一个用户请求,而用户请求则总是包含有指定的URL 。当核心控制器过滤用户请求,并调用后,根据请求的URL 和Action 处理URL 之间的对应关系来处理转发。 · 342·

SSH框架搭建

1、创建web应用 2、添加spring支持,选择需要的类库,并选择“JAR Libraries Installation”中第二个选项:Copy checked Library contents to project folder (TLDs always copied),将类库保存到项目的lib目录下。 3、添加Hibernate支持:

4、下一步:选择“Spring Configuration file(applicationContext.xml)“ 5、下一步:选择“Existing Spring configuration file”在SessionFactory Id 中填入sessionFactory. 6、下一步:如图填写

7、添加Hibernate实体及其映射文件 8、对Dao类中的方法抽取接口并将接口和实现分包放置, 9、建立biz接口和bizImpl实现类,实现类中添加Dao接口的引用,并添加get/set方法, 10、在具体业务方法中调用Dao的方法实现业务逻辑。 11、在applicationContext.xml中配置bizImpl实现类

struts2验证框架

Struts2Validator Struts2验证框架 Updated Jun 18, 2010 by cm2...@https://www.wendangku.net/doc/aa380041.html, Action配置中一定要设置input返回页面 添加验证只要创建验证的xml文件 1.创建xml文件名 验证Action中全部方法 在Action同包下,创建:Action类名-validation.xml 如:ValidateAction创建ValidateAction-validation.xml 验证Action中单个方法 注意事项 注意: 1.要验证的方法不能叫input. 2.这样配置在form表单中要在中action写好名称, 不能写action="validate_",然后 这样会找不到对应的配置文件,跳过验证. 3.如果验证出错,返回input页面时,那些存在ValueStack中的值会丢失,可以将Action实现Preparable接口, 然后prepare()方法里初始化添加页面需要的值. 4.如果使用Preparable接口,必须在action配置中添加

Struts2教程2:处理一个form多个submit

在很多Web应用中,为了完成不同的工作,一个HTML form标签中可能有两个或多个submit 按钮,如下面的代码所示: 由于在中的多个提交按钮都向一个action提交,使用Struts2 Action的execute 方法就无法判断用户点击了哪一个提交按钮。如果大家使用过Struts1.x就会知道在 Struts1.2.9之前的版本需要使用一个LookupDispatchAction动作来处理含有多个submit 的form。但使用LookupDispatchAction动作需要访问属性文件,还需要映射,比较麻烦。从Struts1.2.9开始,加入了一个Event DispatchAction动作。这个类可以通过java反射来调用通过request参数指定的动作(实际上只是判断某个请求参数是不存在,如果存在,就调用在action类中和这个参数同名的方法)。使用EventDispatchAction必须将submit的name 属性指定不同的值以区分每个submit。而在Struts2中将更容易实现这个功能。 当然,我们也可以模拟Event DispatchAction的方法通过request获得和处理参数信息。但这样比较麻烦。在Struts2中提供了另外一种方法,使得无需要配置可以在同一个action类中执行不同的方法(默认执行的是execute方法)。使用这种方式也需要通过请求参来来指定要执行的动作。请求参数名的格式为 action!method.action 注:由于Struts2只需要参数名,因此,参数值是什么都可以。 下面我就给出一个实例程序来演示如何处理有多个submit的form: 【第1步】实现主页面(more_submit.jsp)

java-struts2复习题

Struts2复习题 1.以下属于struts2的控制器组件是: A.Action B.ActionForm C.ActionServlet D.dispatchAction 2.以下属于struts2的体系结构的是:(多选) A.struts2控制器组件 B.struts2配置文件 C.FilterDispathcer D.Action 3.以下属于struts2配置文件中的配置元素是:(多选) A. B. C. D. 4.关于struts1和struts2对比的说法正确的是: A.struts1要求Action类继承struts1框架中的Action父类,struts2中则不一定需要继承,可以是POJO类 B.struts1中的Action不是线程安全的,而struts2中的Action是线程安全的 C.struts1和struts2中都使用ActionForm对象封装用户的请求数据 D.struts1使用OGNL表达式语言来支持页面效果,struts2通过ValueStack技术使标签库访问值 5.以下关于ValueStack说法正确的是:(多选) A.每个Action对象实例拥有一个ValueStack对象 B.每个Action对象实例拥有多个ValueStack对象 C.Action中封装了需要传入下一个页面的值,这些值封装在ValueStack对象中 D.ValueStack会在请求开始时被创建,请求结束时消亡 6.关于struts2配置文件说法正确的是: A.必须在WEB-INF/classes目录下 B.名字必须为struts.xml C.配置Action时,必须配置包信息 D.使用元素配置转发 7.在struts2配置中用()元素来配置常量: A. B. C. D. 8.关于struts2包的说法正确的是: A.struts2框架使用包来管理常量 B.struts2框架定义包时必须指定name属性 C.struts2框架中配置包时,必须继承自struts-default包,否则会报错 D.struts2框架中使用包来管理Action 9.struts2中获取Servlet API的方法正确的是:(多选) A.使用ActionContext对象以解耦合的方法访问Servlet API B.使用ServletActionContext对象以解耦合的方式访问Servlet API C.使用ActionContext对象以耦合的方式访问Servlet API D.使用ServletActionContext对象以耦合的方式访问Servlet API 10.struts2动态调用的格式为: A.ActionName?methodName.action B.ActionName! methodName.action C.ActionName*methodName.action D.ActionName@mathodName.action 11.如果要实现struts2的数据校验功能 A.普通Action类可以实现

尚学堂_马士兵 Java学习路线图_教学大纲_视频资源列表

尚学堂教学安排 第一部分学习总周期26天: 1. --j2se(chat + tank + snake)-----------------------13 days 2. --oracle--------------------------------- 4 days 3. --jsp+jdbc+mysql------------------------------- 1 days 4. --html+css+js--------------------------- 3 days 5. --html+css+js--------------------------- 3 days 6. --bbs----------------------------------- 2 days 第二部分学习总周期27天 7. --drp-----------------------------------12 days 8. --struts--------------------------------- 6 days 9. --hibernate-------------------------------- 6 days 10.--spring--------------------------------- 3 days 第三部分学习总周期26天 11.--uml----------------------------------- 2 days 12.--oa-----------------------------------15 days 13.--crm----------------------------------- 5 days 14.--ejb 3.0---------------------------------3 days 15.--bankproject(简介)---------------------------1 days 16.--面试技巧+3g+j2me(简介)-------------------------1 days 第四部分linux学习总周期4天 教学视频资源列表 q、jshtmlcss 这是基础 l、尚学堂科技_马士兵_轻松愉快linux视频教程 n、oracle.马士兵 r、mysql_avi.马士兵 这些单独的数据库和系统模块可以在任何时候都可以,建议在学j2ee之前学 j、尚学堂马士兵视频教程_scm_cvs_svn cvs是存档工具,建议在学j2ee当中学习 p、junit4 这个是测试工具,建议在学j2ee中学习 s、设计模式.马士兵

SSH框架搭建实例教程,课程设计

. SSH的理解及其应用实践

1.SSH是什么 (3) 2 Spring 介绍理解: (3) 2.1简单介绍 (3) 2.2各种特性 (3) 2.2.1轻量 (3) 2.2.2控制反转 (4) 2.2.3面向切面 (4) 2 .2.4容器 (4) 2.2.5框架 (4) 2.3总结 (4) 3.Hibernate介绍理解: (4) 3.1简单介绍 (4) 3.2核心接口 (5) .3.2.1 Session接口 (5) 3.2.2 .SessionFactory接口 (5) 3.2.3.Configuration接口 (5) 3.2.4.Transaction接口 (5) 3.2.5 Query和Criteria接口 (5) 4. Struts (6) 4.1什么是Struts框架 (6) 4.2 Struts 概览 (6) 4.2.1Client browser(客户浏览器) (6) 4.4 Struts中的Controller(控制器)命令设计模式的实现 (7) 4.5 在Struts框架中控制器组件的三个构成部分 (7) 4.7 Struts中的Model(模型) (8) 5.SSH整合步骤 (8) 5.1安装所需软件环境: (8) 5.1.1、首先安装JDK,配置Java环境变量 (8) 5.1.2安装MyEelipse (8) 5.1.3 数据库 (9) 5.1.4、 (9) 5.2环境配置好了就可以做SSH整合的项目 (9) 6.搭建框架并简单应用 (11) 6.1准备工作 (11) 6.2(建立项目,包结构,导入所需jar文件) (12) 6.3撰写资源文件 (15) 6.4在https://www.wendangku.net/doc/aa380041.html,m 包下添加下列文件 (19) 6.5添加hibernate DAO 模板 (20) 6.6以上的工作还不够,我们还需要进行WEB方面的配置 (20) 7.测试: (23)

struts2 实验报告

1.系统分析与设计 1.1 系统功能描述 本系统是个非常简单的注册、登录系统。本系统的实现是基于Struts2、Spring、Hibernate 三个框架,系统功能单一,业务逻辑简单。 当用户注册信用户时,就是向系统中增加一个新用户,对应的数据库增加一条记录。 当用户输入注册信息时,系统提供了基本的输入验证判断用户输入是否合法,只有当用户输入满足基本输入要求时,才会被提交到实际的登录系统,进行实际的登录处理。 系统还使用了随机产生的图形验证码来防止刷新,防止用户通过单击浏览器的书安心按钮来重复注册多个用户。 系统还提供了一种Ajax方式来验证用户输入的注册名是否有效,系统要求所有的用户名不能重复。故当用户输完用户名后,系统立即在页面上方提示用户该用户名是否可用,如果系统中没有该用户名,则系统提示该用户名可用;否则提示用户该用户名重复,用户必须重新选择用户名注册。 当用户注册一个新用户名之后,就可以使用系统的登录功能来登录系统了,用户输入登录用的用户名、密码后,系统一样提供了基本的输入校验。 除此之外,系统还采用了随机产生图形验证码来防止恶意用户的暴力破解,系统随机生成一个图形验证码,而用户登录必须输入图形验证码中显示的字符串,只有用户输入的字符串和系统随机生成的验证码字符相同时,系统才允许用户登录。 1.2 系统功能流程

1.3 数据库设计 相关的映射文件: 一旦提供了上面的映射文件,Hibernate 就可以理解User 和user_table 之间的对应关系。 2.系统实现与测试 2.1 系统采用的关键技术 MVC 框架采用了Struts2框架,Struts2框架的易用性,极好的简化了系统的MVC 层的实现;本系统使用了Struts2的JSON 插件来完成Ajax 功能,除此之外本系统为了避免进行底层的Ajax 交互,还是用了一个简单Prototype.js 函数库,用以简化Ajax 编程。Struts2框架的稳定性,为系统的稳定运行提供了保证。

structs2知识点

Struts2原理 上图来源于Struts2官方站点,是Struts 2 的整体结构。 Struts2框架由3个部分组成:核心控制器FilterDispatcher、业务控制器和用户实现的业务逻辑组件。在这3个部分里,Struts 2框架提供了核心控制器FilterDispatcher,而用户需要实现业务控制器和业务逻辑组件。 (1)核心控制器:FilterDispatcher

FilterDispatcher是Struts2框架的核心控制器,该控制器作为一个Filter运行在Web应用中,它负责拦截所有的用户请求,当用户请求到达时,该Filter 会过滤用户请求。如果用户请求以action结尾,该请求将被转入Struts2框架处理。 Struts2框架获得了*.action请求后,将根据*.action请求的前面部分决定调用哪个业务逻辑组件,例如,对于login.action请求,Struts2调用名为login的Action来处理该请求。 Struts2应用中的Action都被定义在struts.xml文件中,在该文件中定义Action 时,定义了该Action的name属性和class属性,其中name属性决定了该Action 处理哪个用户请求,而class属性决定了该Action的实现类。 Struts2用于处理用户请求的Action实例,并不是用户实现的业务控制器,而是Action代理——因为用户实现的业务控制器并没有与Servlet API耦合,显然无法处理用户请求。而Struts2框架提供了系列拦截器,该系列拦截器负责将HttpServletRequest请求中的请求参数解析出来,传入到Action中,并回调Action 的execute方法来处理用户请求。 (2)一个请求在Struts2框架中的处理大概分为以下几个步骤 1 .客户端初始化一个指向Servlet容器(例如Tomcat)的请求,即HttpServletRequest请求。 2 .这个请求经过一系列的过滤器(Filter)(这些过滤器中有一个叫做ActionContextCleanUp的可选过滤器,这个过滤器对于Struts2和其他框架的集成很有帮助,例如:SiteMesh Plugin) 3. 接着FilterDispatcher被调用,FilterDispatcher询问ActionMapper来决定这个请是否需要调用某个Action 4 .如果ActionMapper决定需要调用某个Action,FilterDispatcher把请求的处理交给ActionProxy 5 .ActionProxy通过Configuration Manager询问框架的配置文件,找到需要调用的Action类 6 .ActionProxy创建一个ActionInvocation的实例。 7 .ActionInvocation实例使用命名模式来调用,在调用Action的过程前后,涉及到相关拦截器(Intercepter)的调用。 8 .一旦Action执行完毕,ActionInvocation负责根据struts.xml中的配置找到对应的返回结果。返回结果通常是(但不总是,也可能是另外的一个Action链)一个需要被表示的JSP或者FreeMarker的模版。在表示的过程中可以使用Struts2 框架中继承的标签。在这个过程中需要涉及到ActionMapper

struts2+spring3+hibernate整合教程

Struts2+Spring3+hibernate3整合 (2011年7月末,最新) 上次下载了一个教程,上面写着:“献给我亲爱的老婆!”(羡慕不已)。想了想,我没老婆,难道没什么好写了!不难… 献给我暗恋过的每一个女人!(嘿嘿…) 如果在你遇到的女生中有一个幽默豁达的女生,不要犹豫,追上去,就娶她了!

一,需要的框架包 二,建立project,添加相应的.jar文件(重点) 1,eclipse中建立dynamic web project,这里是ssh_integrate_0100。 2,src中创建需要的类,这里以一个域模型为user的例子说明。(现在建立这些类,可以方便我们在搭建时候随时测试!) User.java IUserDao.java

UserDaoImpl.java IUserService.java UserServiceImpl.java

3,拷贝spring-framework-3.1.0\dist目录下的所有jar包,注意有一个不是jar的文件,当然拷过去也没事。 4,拷贝spring运行中需要的其他jar文件,主要是 https://www.wendangku.net/doc/aa380041.html,mons-logging,可以从spring-framework-3.0.2.RELEASE-dependencies 中找到。 ii.Aspectjrt.jar和aspect-waver.jar,可以从spring-framework-2.5.6-with-dependencies/lib/aspectj下面找到(不知道为什 么,spring-framework-3.0.2.RELEASE-dependencies中没有aspectjrt的jar 包) iii.aopalliance.Jar,apache-dbcp.jar,apache-pool.jar,可以从spring-framework-3.0.2.RELEASE-dependencies中找到。 5,建立beans.xml,这里使用的是annotation和component-scan,这样配置可以大大简化配置,所以是best-practice,其他配置请参考spring文档。

Struts2的工作机制原理分析及实例

Struts2的工作机制分析及实例 一、概述 本章讲述Struts2的工作原理。 读者如果曾经学习过Struts1.x或者有过Struts1.x的开发经验,那么千万不要想当然地以为这一章可以跳过。实际上Struts1.x 与Struts2并无我们想象的血缘关系。虽然Struts2的开发小组极力保留Struts1.x的习惯,但因为Struts2的核心设计完全改变,从思想到设计到工作流程,都有了很大的不同。 Struts2是Struts社区和WebWork社区的共同成果,我们甚至可以说,Struts2是WebWork的升级版,他采用的正是WebWork 的核心,所以,Struts2并不是一个不成熟的产品,相反,构建在WebWork基础之上的Struts2是一个运行稳定、性能优异、设计成熟的WEB框架。 本章主要对Struts的源代码进行分析,因为Struts2与WebWork的关系如此密不可分,因此,读者需要下载xwork的源代码,访问https://www.wendangku.net/doc/aa380041.html,/xwork/download.action即可自行下载。 下载的Struts2源代码文件是一个名叫struts-2.1.0-src.zip的压缩包,里面的目录和文件非常多,读者可以定位到 struts-2.1.0-src\struts-2.0.10\src\core\src\main\java目录下查看Struts2的源文件,如图14所示。 (图14) 二、主要的包和类 Struts2框架的正常运行,除了占核心地位的xwork的支持以外,Struts2本身也提供了许多类,这些类被分门别类组织到不同的包中。从源代码中发现,基本上每一个Struts2类都访问了WebWork提供的功能,从而也可以看出Struts2与WebWork千丝万缕的联系。但无论如何,Struts2的核心功能比如将请求委托给哪个Action处理都是由xwork完成的,Struts2只是在WebWork 的基础上做了适当的简化、加强和封装,并少量保留Struts1.x中的习惯。

struts1教程

本系列教程将详细介绍Struts 1.x的基本原理和使用方法,读者可以参阅《Struts 2系列教程》来比较Struts 1.x和Struts 2.x的相同点和不同点。 在这篇文章中将以一个简单的例子(mystruts)来演示如何使用MyEclipse来开发、运行Struts程序,并给出了解决ActionForm出现乱码问题的方法。读者可以从本文中了解开发Struts 1.x程序的基本过程。 一、本文给出的程序要实现什么功能 mystruts是一个录入和查询产品信息的程序。为了方便起见,本例中的产品信息表只包括了产品ID、产品名称和产品价格三个字段。mystruts的主要功能如下: 1. 接受用户输入的产品ID、产品名称和产品价格。 2. 验证这些字段的合法性。如果某些字段的输入不合法(如未输入产品ID),程序会forward到一个信息显示页,并显示出错原因。 3. 如果用户输入了正确的字段值,程序会将这些字段值保存到数据库中,并显示“保存成功”信息。 4. 用户输入产品名称,并根据产品名称进行模糊查询。如果存在符合要求的产品信息。程序会以表格形式显示这些产品的信息,同时显示记录数。如果未查到任何记录,会显示“没有符合要求的记录!”信息。 二、编写程序前的准备工作 1. 建立数据库 在编写程序之前,需要建立一个数据库(struts)和一个表(t_products),建立数据库和表的SQL脚本如下所示:

# 建立数据库struts CREATE DATABASE IF NOT EXISTS struts DEFAULT CHARACTER SET GBK; # 建立表t_products CREATE TABLE IF NOT EXISTS struts.t_products ( product_id varchar(4) NOT NULL, product_name varchar(50) NOT NULL, price float NOT NULL, PRIMARY KEY (product_id) ) ENGINE=InnoDB DEFAULT CHARSET=gbk; 2 建立一个支持struts1.x的samples工程 用MyEclipse建立一个samples工程(Web工程),现在这个samples工程还不支持Struts1.x (没有引入相应的Struts jar包、struts-config.xml文件以及其他和Struts相关的配置)。然而,在MyEclipse中这一切并不需要我们手工去加入。而只需要使用MyEclipse的「New Struts Capabilities」对话框就可以自动完成这些工作。 首先选中samples工程,然后在右键菜单中选择「MyEclipse」> 「New Struts Capabilities」,启动「New Struts Capabilities」对话框。对默认的设置需要进行如下的改动:(1)将Struts specification改为Struts 1.2. (2)将Base package for new classes改为struts. (3)将Default application resources改为struts.ApplicationResources. 改完后的「New Struts Capabilities」对话框如图1所示。

图解SSH框架配置步骤

图解SSH框架配置步骤 核心提示:现在开发的一个项目使用S2SH框架,配置环境用了一两天,现在把当时配置环境时写的文档整理下发出来,也算加强点记忆。 1 开发环境 MyEclipse5.5 JDK 1.6 Java EE 5.0 Tomcat6.0 Struts2.1.6 Spring2.5.6 Hibernate3.3.1 2 为 ssh 做好准备 2.1 下载包 Struts2 现在开发的一个项目使用S2SH框架,配置环境用了一两天,现在把当时配置环境时写的文档整理下发出来,也算加强点记忆。 1 开发环境 MyEclipse5.5 JDK 1.6 Java EE 5.0 Tomcat6.0 Struts2.1.6 Spring2.5.6 Hibernate3.3.1 2 为ssh做好准备 2.1下载包 Struts2.1.6包下载: https://www.wendangku.net/doc/aa380041.html,/download.cgi#struts216 Full Distribution: o struts-2.1.6-all.zip (110mb) [PGP] [MD5] Hibernate3.3包下载: https://https://www.wendangku.net/doc/aa380041.html,/6.html Spring2.5下载: https://www.wendangku.net/doc/aa380041.html,/download

2.2搭建开发环境 打开MyEclipse,新建一个web project,如图: 注意:J2ee版本设为java ee 5.0

点击Finish完成,建好的工程如图: 如果你的myeclipse还没有配置一个web服务器,那就进行下面的步骤,这里以tomcat6为例:

Struts2知识点总结

Struts2基础知识 Struts2概述 1.Struts2框架应用javaee三层结构中的web层框架。 2.Struts2框架在struts1和webwork基础之上发展的全新框架。 3.Struts2所解决的问题: 在以往实现一个功能时,都需要写很多的servlet,从而造成后期维护上的不方便。 图解: 4.现在比较稳定的Struts2版本 struts-2.3.24-all.zip 5.web层常见框架 1.struts 2.springMVC Struts2框架入门 1.导入jar包 1.在lib里面有jar包,但不能全部导入,因为里面含有一些spring 包,是不能使用的,导入会导致程序不能运行。 2.到app目录里面复制案例的jar包是最好的方法。 2.创建action 3.配置action类的访问路径

1.创建struts2核心配置文件,该核心配置文件位置和名称是固定的, 位置必须在src下面,名称为struts.xml 。 2.引入dtd约束,可以在案例文件中找到,复制在struts.xml文件中即 可。 3.action的配置 *注意访问路径: http://域名/端口号/项目名/action名.action 注意:.action可以省略,但建议不要省略,为了兼容一些老版本的浏览器。 4.配置Struts2的过滤器,可以在案例中的web.xml文件中找到,复制粘贴 即可。 Struts2执行过程 图解:

Struts2配置

1.是一种常量标签 2.修改Struts2的默认常量值 1.常用方式 在struts.xml中进行配置。 2.其它两种方式 1.在src下面创建struts.properties文件并修改。 2.在web.xml文件中进行修改。 3.Struts2最常用的常量 struts.il8n.encoding=UTF-8,解决表单在通过post方式提交中文时,中文乱码的问题。

基于Struts2框架的信息发布系统的设计与初步实现

第一章Struts2的起源和发展 说到网络应用很难让人不联想到网络信息的浏览,自从Internet进入民用领域之后,上网成为了越来越多的人闲暇时光的消磨手法。于是网络系统的开发也变得越来越总要。 1.1 Web技术的发展 随着Internet技术的大面积应用和发展,传统的静态HTML页面由于缺乏足够的用户交互能力已经无法满足日益膨胀的网络需求。人们希望Web应用中能够包含更多的动态交互功能,于是为了应对拥有更广泛用户群的动态Web开发,软件开发商分别推出的ASP和JSP两款动态网站开发解决方案。但是当时的JSP 开发并没有很科学的层次设计,最初的JSP开发中逻辑代码和前端代码杂合在一起。虽然在最初开发时这样的做法使得开发非常的容易,然而随着Web系统的使用越来越广泛,应用规模的日益增长,如果继续使用传统的简单的JSP + Servlet 结构进行Web系统的开发,则会由于系统层次混乱而导致系统的开发难度和维护成本越来越大,最终使开发过程陷入困境。 1.2 MVC思想进入Web系统开发 面对开发过程中所出现的困难,开发者们试图寻找一种能够使得开发结构更加具有条理性的开发模式。根据以往面向对象系统设计的经验,开发者开始将MVC开发模式引入Web系统的开发。MVC模式将一个应用分为三个基本部分:Model(模型)、View(视图)、Controller(控制器)。在此模式中触发事件由控制器捕获,并根据事件的类型来改变模型和视图。这样既可将系统模型与视图分离,从而使各部分能够工作在最小的耦合状态下协同工作,从来提高系统的扩展性和可维护性。将其引入Web系统开发后,系统模式由传统的JSP完成用户请求和响应改变为由控制器捕获用户请求,JavaBean完成模型操作,而JSP专门负责响应用户需求。老一代的开发框架Struts1便是这时的产物。

struts2教程(完全版)

Yaio 4 一、准备工作及实例 4 1.解压struts- 2.1.6-all.zip 4 2.六个基本包 4 3.初识struts2配置文件 4 (1).web.xml文件 4 (2).struts.xml文件 4 (3).struts.properties(参default.properties) 4 (4)struts-default.xml 5 (5)其它配置文件 5 4.让MyEclipse提示xml信息 5 5.如何使用alt+/提示 5 6.实例 5 7.开启struts2自带的开发模式常量 7 8.vo传参模式 8 9.ModerDriven传参模式(不建议采用) 8 10.为什么要使用struts2代替struts1.x 9

二、struts.xml配置及例程 9 1.配置文件的优先级 9 2.配置形式 9 3.package配置相关 10 4.分工合作include:指定多个配置文件 12 5.tomcat认证访问 12 6.初识拦截器 13 7.Action中的method属性 15 8.使用ForwardAction实现页面屏蔽。 17 8.使用default-Action配置统一访问 17 小结Action 18 9.使用通配符 18 10.使用0配置:ZERO Annotation 19 11.Result配置详解 19 12.异常处理 24 三、在Action获取Scope对象 25 方式一、与Servlet解耦合的非IOC方式 25

方式二、与Servlet解耦合的IOC方式 27 方式三、与Servlet耦合的非IOC方式 27 方式四、与Servlet耦合的IOC方式 28 四、OGNL与ValueStack(VS) 29 1.值栈入门 29 2.OGNL入门 31 3.普通方法访问 31 4.静态方法访问 31 5.默认类Math的访问 32 6.调用普通类的构造方法 32 7.集合对象初步 32 8.集合对象进阶 33 9.N语法top语法 34 10.获取Stack Context中的信息 35 11.总结$ # %的区别 35 12.总结OGNL[重点] 35 五、拦截器 36

SSH三大框架整合(详细版)

1:构建WEB项目 2:构建数据库 3:加入依赖包 尽量不要依赖IDE,通过自己手动加包完成 访问数据库需要的包:mysql的驱动包 Hibernate的包:hibernate3.jar 核心包 依赖的必须包:antlr-2.7.6.jar 用于解析成HQL语句的包 commons-collections-3.1.jar apache提供的包,提供对集合框架的增强 dom4j-1.6.1.jar 解析XML文件的包 javassist-3.9.0.GA.jar 动态修改字节码需要用到的包 jta-1.1.jar 用于JTA事务的包 slf4j-api-1.5.8.jar 日志接口包---》依赖一定的实现包 slf4j-log4j12-1.5.0.jar log4j.jar 另外一种实现包:slf4j-simple-1.5.10.jar 可选的包:c3p0-0.9.1.jar 用于创建C3P0连接池的包 ehcache-1.2.3.jar :用于缓存实现的包 cglib-2.2.jar 动态修改字节码的包 Spring的包:spring.jar 核心包 aopalliance.jar 使用Aop功能可以用到的包 aspectjrt.jar aspectjweaver.jar 使用ASPECTJ表达式需要用到的包 如果是使用DBCP连接池的话,需要两个jar包 commons-dbcp.jar commons-pool.jar 如果需要用到commons增加包的话,可以加入以下包 commons-beanutils.jar commons-lang.jar commons-logging.jar Struts2的包:commons-fileupload-1.2.1.jar commons-io-1.3.2.jar freemarker-2.3.13.jar :在Struts2 中默认使用的是FreeMarker模板引擎 ognl-2.6.11.jar :Struts2中使用OGNL表达式 struts2-core-2.1.6.jar 核心包 xwork-2.1.2.jar 核心包 struts2-spring-plugin-2.1.6.jar Struts2跟Spring整合需要的插件包 4:构建项目分包结构 5:放置配置文件 6:创建POJO和相对应的hbm.xml 7:修改空白的Hibernate.cfg..xml并创建表结构 8:创建DAO,SERVICE,ACTION 9:修改配置文件

Struts2+Hibernate架构教程课后参考答案

第1章 Struts2框架技术入门 1.5 习题 1.5.1 选择题 1.D 2.A 3.C 4.B 5.B 1.5.2 填空题 1.MVC 2.Struts1和WebWork 3.IBM 4.FilterDispatcher 5.JSP、Struts2标签 1.5.3 简答题 1.简述MVC设计模式的工作流程。 答:MVC设计模式工作流程是: (1)用户的请求