当前位置:文档之家› 第六章 Struts2深入学习(一) (理论)

第六章 Struts2深入学习(一) (理论)

第六章   Struts2深入学习(一) (理论)
第六章   Struts2深入学习(一) (理论)

第6章

Struts2深入学习(一)

本章学习内容:

1. Struts2配置文件

2. Struts2的Action

3. Struts2的处理结果

4.属性驱动和模型驱动

5.国际化

本章学习目标:

1. 掌握Struts2 Action中的动态方法调用和使用通配符

2.掌握Struts2自定义处理结果

3.掌握在Struts2中使用模型驱动

4.能够在Struts2中实现国际化

本章简介:

通过上一章的学习,我们学习了Struts2体系结构、Struts2运行流程、valueStack的概念等知识。

本章将继续深入学习Struts2配置文件、在Struts2的Action中访问Servlet API、Struts2的动态方法调用、Struts2自定义处理结果、Struts2属性驱动和模型驱动、Struts2国际化等知识。在Struts2配置文件中可配置常量、包、命名空间等,通过配置常量可解决Struts2中文乱码、页面布局混乱等问题;通过Struts2提供的ActionContext类能以解耦的方式访问Servlet API中的request、session、application等一系列对象;Struts2的动态方法调用功能,可实现在一个Action中定义多个相关的业务逻辑方法,实现像Struts1中Dispatchaction控制器的功能;尽管Struts2内建了很多结果类型,但仍然不能满足实际开发应用中的需求,必须要自定义处理结果;Struts2模型驱动以POJO类作为Action的属性,以此来封装用户请求参数,使Struts2 Action的功能更加单一。

6.1Struts2配置文件

上一章已经介绍了Struts2配置文件的基本结构,但没有详细介绍各个配置元素的具体含义,下面将具体讲解struts.xml文件中各个元素的含义其配置语法。

6.1.1常量配置

在struts.xml文件中配置常量是一种指定Struts2属性的方式,开发者可以通过改变这些属性来满足应用程序的需求,如果不进行配置,Struts2将使用默认的配置。Struts2的常量既可以在struts.xml

文件中配置,也可在struts.properties文件中配置,实际上,这两种方式的作用基本相似。通常推荐在

struts.xml文件中定义Struts2属性,而不是在struts.properties文件中定义Struts2属性。之所以保留使

用struts.properties文件定义Struts2的属性方式,主要是为了保持与WebWork的向后兼容性。

在struts.xml中是通过constant元素来配置常量,配置常量需要指定两个必填的属性:

1.name:该属性指定了常量的name。

2.value:该属性指定了常量的value。

例如,要修改Struts2业务控制器Action默认访问扩展名*.action为*.do,则可在struts.xml文件中使用以下的代码片段:

. . .

对于struts.properties文件而言,该文件的内容就是系列的key-value对,其中每个key对应一个Struts2

常量name,而每个value对应一个Struts2常量value。以下代码片段用于在struts.properties文件配置上

述常量:

#修改Struts2业务控制器Action默认访问扩展名*.action为*.do

struts.action.extension =do

以下通过两个示例,来说明配置常量在实际开发中的应用

1.解决中文乱码

在Struts2中,如果用户在提交表单时,含有中文请求参数,那么这些参数在填充Action属性时,将会产生乱码,例如用户注册时,需要填写真实姓名。如图1.6.1所示:

图1.6.1 用户注册产生乱码

此时,可以配置一个用于指定Web应用程序的默认编码集常量。代码如下:

当设置该参数为GBK时,相当于调用HttpServletRequest的setCharacterEncoding方法

2.设置Struts2默认主题

struts2中theme属性包括xhtml,html,simple,ajax 。默认是xhtml 主题,这种主题会额外生成tr,td等HTML表格元素,致使页面布局混乱。以下代码通过Struts2标签生成一个login.jsp登录页面,代码如下:

用户名
密码

运行该页面,结果如图1.6.2所示:

图1.6.2 运行登录页面

可通过配置Struts2默认主题为simple从而解决页面布局混乱问题。配置Struts2默认主题代码如下:

设置后重新运行login.jsp页面,而面布局恢复正常,如图1.6.3所示:

图1.6.3 login.jsp页面布局恢复正常

6.1.2包配置

在Java编程语言中,Java中的类是以包的形式来组织管理,如果一个类不指定它所在的包,则Java会将该类放入默认包中。Struts2在配置Action时,也引入了包的概念,Struts2框架中核心组件就是Action、拦截器等,Struts2框架使用包来管理Action和拦截器等。每个包就是多个Action、多个拦截器引用的集合。

在Struts.xml文件中,package元素用于定义包的配置,定义package元素时可以指定如下几个属性:1.name:这是一个必填属性,该属性指定该包的名字,该名字是该包被其它包引用的key

2.extends:该属性是一个可选属性,该属性指定该包继承其他包。继承其他包,可以继承其他包中的Action定义、拦截器定义等。

3.namespace:该属性是一个可选属性,该属性定义该包的命名空间。

4.abstract:该属性是一个可选属性,它指定该包是否是一个抽象包。抽象包中不能包含Action。

以下示例代码用于演示使用package 元素来定义包。

/index.jsp

/index.jsp

以上代码定义了两个包,“default ”包继承自默认包“struts-default ”,“MyPackage ”包继承自”default ”包。

6.1.3

命名空间的配置

考虑到在同一个Web 应用程序中可能存在同名的Action ,Struts2以命名空间的方式来管理Action ,同一个命名空间里不能有同名的Action ,不同的命名空间里可以有同名的Action 。Struts2不支持为单独的Action 设置命名空间,而且通过为包指定namespace 属性来为包下面的所有Action 指定共同的命名空间。以下示例代码用于演示通过namespace 属性为包指定命名空间。

/index.jsp

/index.jsp

在上面的struts.xml 配置文件中,配置了两个包:default 和MyPackage ,配置MyPackage 时,指定了该包的命

名空间为/manager。对于名为default的包而言,没有指定namespace属性。如果某个包没有指定namespace属性,则该包将使用默认的命名空间,而默认的命名空间总是“”。当某个包指定了命名空间后,该包下所有Action 处理的URL将变成:命名空间+Action。以上面配置的两个名为test的Action为例。

如果在浏览器的地址栏中输入:http://localhost:8080/struts6l/manager/test.action,则访问的是类名为com.soft.struts6l.web.action.LoginAction的Action实例;

如果如果在浏览器的地址栏中输入:http://localhost:8080/struts6l/test.action,则访问的是类名为

com.soft.struts6l.web.action.RegAction的Action实例。

6.1.4包含配置

在一个开发团队中,我们希望各自struts2 的Action配置独立,而不互相干扰,这样可提高团队开发效率,有助于软件的维护。Struts2允许通过include配置元素将一个配置文件分解成多个配置文件,从而满足上述需求。

配置include元素需要指定一个必需的file属性,该属性指定了被包含配置文件的文件名。以下用于演示include 元素的配置使用方法,步骤如下:

1.创建名为struts-module1.xml的配置文件,代码如下:

/index.jsp

2.创建名为struts-module2.xml的配置文件,代码如下:

/index.jsp

3.创建名为struts.xml的配置文件,代码如下:

4.在WEB-INF目录下创建一个子目录为”configfiles”,然后将struts-module1.xml、

struts-module2.xml和struts.xml文件放入configfiles目录中。目录结构如图1.6.4所示:

图1.6.4 struts2多个配置文件目录结构

5.在web.xml中配置Struts2核心控制器

struts2

org.apache.struts2.dispatcher.FilterDispatcher

config

struts-default.xml,struts-plugin.xml,../configfiles/struts.xml

struts2

/*

6.2Struts2的Action

6.2.1Action访问Servlet API

在传统的Web开发中,经常会用到Servlet API中的HttpServletRequest、HttpSession和ServletContext。Struts 2框架让我们可以直接访问和设置action及模型对象的数据,这降低了对

HttpServletRequest对象的使用需求,但在某些应用中,我们可能会需要在action中去访问

HttpServletRequest对象以及其他两种对象,例如,用户登录成功后,我们应该将用户信息保存到

Session中。Struts 2提供了多种方式来访问上述的三种对象,归结起来,可以划分为两大类:与Servlet API解耦的访问方式和与Servlet API耦合的访问方式。

1.与Servlet API解耦的访问方式

为了避免与Servlet API耦合在一起,方便Action类做单元测试,Struts 2对

HttpServletRequest、HttpSession和ServletContext进行了封装,构造了三个Map对象来替

代这三种对象,在Action中,直接使用HttpServletRequest、HttpSession和ServletContext

对应的Map对象来保存和读取数据。对ActionContext返回的Map对象的操作,等价于对Servlet

API中的HttpServletRequest、HttpSession和ServletContext对象的操作。

(1) 访问HttpServletRequest

获取request对象:

ActionContext ctx=ActionContext.getContext();

Map request=(Map)ctx.get("request");

存储数据到request对象中:

request.put(“uid”,”admin”);

从request对象中获取数据:

String uid=request.get(“uid”).toString();

(2) 访问HttpSession

获取session对象:

ActionContext ctx=ActionContext.getContext();

Map session=(Map)ctx.getSession();

存储数据到session对象中:

session.put(“uid”,”admin”);

从session对象中获取数据:

String uid=session.get(“uid”).toString();

(2) 访问ServletContext

获取ServletContext对象:

ActionContext ctx=ActionContext.getContext();

Map application=(Map)ctx.getApplication();

存储数据到ServletContext对象中:

application.put(“uid”,”admin”);

从session对象中获取数据:

String uid= application.get(“uid”).toString();

利用请求对象来传递数据还有一种方式,就是直接使用ActionContex类的put()方法将数据

保存到ActionContext中,例如

ActionContext.getContext().put("uid", "admin")

上面的代码相等价于

request.setAttribute("uid","admin");

原因在于Struts 2中的org.apache.struts2.dispatcher.StrutsRequestWrapper类,这个类

是HttpServletRequest的包装类,它重写了getAttribute()方法,在这个方法中,它首先在

请求对象中查找属性,如果没有找到,则到ActionContext中去查找。

2.与Servlet API耦合的访问方式

直接访问Servlet API将使你的Action与Servlet环境耦合在一起,不便于Action的单元测

试。但有时候,确实需要直接访问这些对象。要直接获取HttpServletRequest和ServletContext 对象,可以使用org.apache.struts2.ServletActionContext类,该类是ActionContext的子类。

(1) 获取HttpServletRequest对象

HttpServletRequest request=ServletActionContext.getRequest();

(2) 获取HttpSession对象

HttpSession session=ServletActionContext.getRequest().getSession();

(3) 获取HttpServletResponse对象

HttpServletResponse response=ServletActionContext.getResponse();

(4) 获取ServletContext对象

ServletContext context =ServletActionContext.getServletContext();

除了上述的方法调用得到HttpServletRequest和ServletContext对象外,还可以调用

ActionContext对象的get()方法,传递ServletActionContext.HTTP_REQUEST和

ServletActionContext.SERVLET_CONTEXT等键值来得到HttpServletRequest和

ServletContext对象,如下所示:

(1) 获取HttpServletRequest对象

ActionContext.getContext().get(ServletActionContext.HTTP_REQUEST);

(2) 获取HttpServletResponse对象

ActionContext.getContext().get(ServletActionContext.HTTP_RESPONSE);

(3) 获取ServletContext对象

ActionContext.getContext().get(ServletActionContext.SERVLET_CONTEXT);

为了提高代码重用,可创建一个Action的父类,在父类中封装用于操作Servlet API的方法,以下定义一个父类Action,命名为BaseAction.java,代码如下:

public class BaseAction {

//获取request对象

public Map getRequest() {

//通过ActionContext得到request对象

return (Map) ActionContext.getContext().get("request");

}

//获取session对象

public Map getSession() {

return ActionContext.getContext().getSession();

}

//获取ServletContext对象

public Map getApplication() {

return (Map)ActionContext.getContext().getApplication();

}

//获取response对象

public HttpServletResponse getResponse() {

//通过ServletActionContext类获取HttpServletResponse对象。

HttpServletResponse response = ServletActionContext.getResponse();

//设置响应头与字符编码

response.setContentType("text/html;charset=gbk");

response.setCharacterEncoding("gbk");

return response;

}

}

以下示例,用于演示在Struts2的Action中访问Servlet API,开发步骤如下:

(1)创建一个Action,命名为TestAction.java,该Action继承自上面的BaseAction,代码如下:

public class TestAction extends BaseAction

{

public String execute() throws Exception

{

//向request中,存储值

this.getRequest().put("uid", "这是request中的uid");

//向session中,存储值

this.getSession().put("uid", "这是session中的uid");

//向application中,存储值

this.getApplication().put("uid", "这是application中的uid");

//转发到index.jsp页面

return "index";

}

}

(2)创建JSP页面,命名为index.jsp,该页面用于显示request、session等作用域中的值,代码如下:

Action访问Servlet API


得到request中的值:${requestScope.uid }

得到session中的值:${sessionScope.uid }

得到application中的值:${applicationScope.uid }

运行index.jsp页面,结果如图1.6.5所示:

图1.6.5 在Action中访问Servlet API

6.2.2动态方法调用

Struts1框架提供了DispatchAction,从而充许一个Action内包含多个处理逻辑。例如,对于同一个表单,当用户通过不同的请求按钮提交表单时,应该使用同一个Action的不同方法来处理请求。如图1.6.6所示的用户注册页面包含两个提交按钮,但分别提交给Action的不同方法处理,其中“注册”按钮希望使用注册逻辑来处理请求,而“检验”按钮则希望使用检验逻辑来处理请求。

`

图1.6.6 用户注册页面

Struts2使用DMI(Dynamic Method Invocation,动态方法调用)来处理这种请求,动态方法调用指定表单元素的action属性格式如下:

action=”ActionName!methodName.action”,其中”ActionName”表示Action名字,”methodName”

表示方法名,例如,如果存在一个名为userManager的Action,该Action中有一个名为reg的方法。如果希望某个表单提交后,能执行reg方法,则使用动态方法调用的表单的代码片段如下:

. . .

以下示例用于演示Struts2中动态方法调用的实际使用方法,步骤如下: 1. 创建一个业务控制器Action ,命名为UserManagerAction.java ,代码如下: public class UserManagerAction extends BaseAction { //定义注册方法,本方法并末实现注册,只是模拟 public String reg() throws Exception { //获取输出对象 PrintWriter out=this.getResponse().getWriter(); out.println("

正在执行注册方法...

"); return null; } //定义检验方法,本方法并末实现检验用户名是否存在,只是模拟 public String check() throws Exception { //获取输出对象 PrintWriter out=this.getResponse().getWriter(); out.println("

正在执行检验方法...

"); return null; } }

2. 创建一个用于提供注册的JSP 页面,命名为reg.jsp ,代码如下:

用户名

密码
确认密码

3.在struts.xml中配置UserManagerAction,代码如下:

运行reg.jsp页面,单击“注册”按钮时,会调用UserManagerAction中的reg方法,如图1.6.7所示:

图1.6.7 单击“注册”按钮调用reg方法

单击“检验”按钮时,同样会调用UserManagerAction中的 check方法。

以上reg.jsp页面是通过在其中定义一个JavaScript函数来实现的,如下代码:

然后在提交按钮中通过onclick事件来调用此函数,如下代码:

事实上Struts2针对这种情况,提供了一个更为简单的方法,直接将普通的HTML提交按钮,换成Struts2框架特有的标签即可,无需定义JavaScript函数。该标签中有一个method属性用于指定要调用Action中的某个方法。修改以上reg.jsp页面中的代码,如下所示:

用户名

密码
确认密码

6.2.3

使用通配符

使用通配符的方式是另一种形式的动态方法调用。这种方式在配置Action 时,需要指定method 属性。以下是使用通配符配置上述UserManagerAction 的struts.xml 代码,如下所示:

6.2.4实现Action接口

为了让用户开发的Action类更加规范,Struts2提供了一个Action接口,这个接口定义了Struts2的Action 处理类应该实现的规范。以下是标签Action接口的代码:

public interface Action

{

//定义Action接口里包含的一些结果字符串

public static final https://www.doczj.com/doc/481562018.html,ng.String SUCCESS = "success";

public static final https://www.doczj.com/doc/481562018.html,ng.String NONE = "none";

public static final https://www.doczj.com/doc/481562018.html,ng.String ERROR = "error";

public static final https://www.doczj.com/doc/481562018.html,ng.String INPUT = "input";

public static final https://www.doczj.com/doc/481562018.html,ng.String LOGIN = "login";

//定义处理用户请求的execute方法

public abstract https://www.doczj.com/doc/481562018.html,ng.String execute() throws Exception;

}

在上面的Action代码中,我们发现该Action接口里已经定义了5个标准字符串常量:SUCCESS、NONE、

ERROR、INPUT和LOGIN,它们可以简化execute方法的返回值,并可以使execute方法的返回值标准化。

例如处理成功,则返回SUCCESS常量,避免直接返回一个success字符串。以下是一个实现了Action接

口的业务控制器LoginAction.java,代码如下:

public class LoginAction implements Action

{

private String uid;//用户名

private String pwd;//密码

//处理登录

public String execute() throws Exception

{

if("scott".equals(this.uid) && "tiger".equals(this.pwd))

{

//此处返回在Action接口中定义的字符串常量

return this.SUCCESS;//相当于return "success"

}

return this.ERROR;//相当于return "error"

}

//getter、setter方法省略…

}

实现Action接口不是必须的,仅为了规范execute()方法返回值。如果开发者依然希望使用特定的字符

串作为逻辑视图名,则可不必实现此接口。

6.2.5继承自ActionSuport类

struts2不要求自定义的action类继承任何的struts基类或struts接口,但是为了简化Acion的开发,大多数情况下都会继承com.opensymphony.xwork2.ActionSupport类。ActionSupport类是一个工具类,它已经实现了Action 接口。除此之外,它还实现了Validateable接口,提供了数据校验功能。在Validatable接口中定义了一个validate()方法,通过重写该方法可以实现,如果校验表单输入域出现错误,则将错误添加到ActionSupport类的fieldErrors 域中,然后通过Struts2的标签输出错误提示。为了让Struts2增加输入数据校验的功能,改写上节中的LoginAction,重写validate方法。修改后的LoginAction类代码如下:

public class LoginAction extends ActionSupport

{

private String uid;//用户名

private String pwd;//密码

//处理登录

public String execute() throws Exception

{

if("scott".equals(this.uid) && "tiger".equals(this.pwd))

{

//此处返回在Action接口中定义的字符串常量

return this.SUCCESS;//相当于return "success"

}

return this.ERROR;//相当于return "error"

}

//重写validate方法

public void validate() {

//如果用户名为空

if("".equals(this.uid))

{

this.addFieldError("uid", "用户名不能为空!");

}else

//如果用户名不为空,并且不匹配长度为5至8位的字母和数字组成的字符串

if(!Pattern.matches("\\w{5,8}", this.uid.trim()))

{

this.addFieldError("uid", "用户名必须由5至8位数字与英文字母组成");

}

//如果密码为空

if("".equals(this.pwd))

{

this.addFieldError("pwd", "密码不能为空!");

}else

//如果密码不为空,并且不匹配长度为6至10位的字母和数字组成的字符串

if(!Pattern.matches("\\w{6,10}", this.pwd.trim()))

{

this.addFieldError("uid", "密码必须由6至10位数字与英文字母组成");

}

}

//getter、setter方法省略…

}

addFieldError方法有两个参数,第一个参数代表数据校验的字段名,第二个参数用于指定数据校验失败后的错误提示文本。上面的Action类重写了validate方法,该方法会在执行系统的execute方法之前执行,如果执行该方法之后,Action类的fieldErrors中已经包含了数据校验错误,请求将被转发到input逻辑视图处。为了在校验失败后能将转入名为input的逻辑视图,必须在配置该Action时指定input属性。下面是loginAction 的配置片段:

/login.jsp /index.jsp /error.jsp

为了在数据校验失败时,能够显示所有的校验失败错误提示,可创建login.jsp 页面,并在页面中使用Struts2标签库中的标签。login.jsp 代码如下:

用户名:
密 码:

在login.jsp 中,输入用户名为”admin ”,密码为”jack ”,提交表单,运行结果如图1.6.9所示:

图1.6.9 继承ActionSupport 实现数据校验

6.3 处理结果

Struts2支持使用多种视图技术,例如JSP 、Velocity 和FreeMarker 等。当一个Action 处理用户请求结束后,仅仅返回一个字符串,这个字符串就是逻辑视图名。这个逻辑视图名在struts.xml 文件中是以元素来配置的,例如,以下是为LoginAction 控制器配置的多个result :

/login.jsp /index.jsp

/error.jsp

在配置result 时,name 属性是可以省略的如果省略,Struts2会默认name 值为”success ”。除此之外,还

可指定type属性,type属性决定了配置result的结果类型,如果省略,则采用Struts2默认的结果类型。

6.3.1dispatcher、redirect结果类型

dispatcher结果类型是用于JSP整合的类型,它将请求转发到指定的JSP资源,是Struts2默认的结果类型;而redirect结果类型则意味着将请求重定向到指定的视图资源,这意味着所有请求参数、请求属性都将丢失。以下代码说明了dispatcher和redirect两种结果类型的使用方法

/login.jsp

/index.jsp

/error.jsp

在实际应用开发中,经常会使用dispatcher结果类型在不同Action之间传递数据,例如存在LoginAction、OrderAction和LogAction三个业务控制器。LoginAction业务控制器中定义了login方法,用于实现用户登录功能;OrderAction业务控制器中定义了queryOrderByUserId方法,用于实现根据登录用户查询出该

用户的所有订单;LogAction业务控制器中定义了addLog方法,用于实现当用户登录失败时,添加错误日

志。以下示例用于演示使用dispatcher结果类型在不同Action之间传递数据,开发步骤如下:

1.创建业务控制器OrderAction,代码如下:

public class OrderAction extends BaseAction

{

//定义queryOrderByUserId方法,用于根据登录用户查询出该用户的所有订单

public String queryOrderByUserId() throws Exception

{

//获取输出对象

PrintWriter out=this.getResponse().getWriter();

//从request中获取登录的用户名

String uid=this.getRequest().get("uid").toString();

//执行查询订单操作,此处仅模拟,实际应用中应该从数据库中获取

out.println("

正在查询"+uid+"用户的所有订单...

");

return null;

}

}

2.创建业务控制器LogAction,代码如下:

public class LogAction extends BaseAction

{

//定义addLog方法,实现当用户登录失败时,添加错误日志

public String addLog() throws Exception

{

//获取输出对象

PrintWriter out=this.getResponse().getWriter();

//从request中获取登录的用户名

String uid=this.getRequest().get("uid").toString();

//执行添加错误日志操作

out.println("

正为"+uid+"用户创建登录失败错误日志...

");

return null;

}

}

3.创建业务控制器LoginAction,代码如下

public class LoginAction extends BaseAction

{

private String uid;//用户名

private String pwd;//密码

//处理登录

public String login() throws Exception

{

//将登录的用户名存储到request范围内

this.getRequest().put("uid", this.uid);

//模拟允许登录的用户

if("scott".equals(this.uid) && "tiger".equals(this.pwd) || "jack".equals(this.uid) && "8888".equals(this.pwd) )

{

//返回success逻辑视图名

return "success";

}

//返回error逻辑视图名

return "error";

}

//getter、setter方法省略…

}

4.创建用于提供登录界面的JSP页面login.jsp,代码如下:

用户名:

密码:

5.配置上述三个控制器到struts.xml文件中,代码如下:

order!queryOrderByUserId log!addLog

最新版本Struts2.3.12+Spring3.2.2+Hibernate4.2.0框架配置详细步骤

SSH框架搭建 Struts2.3.12+Spring3.2.2+Hibernate4.2.0 编号:SSH-S2-S3-H4 版本:V1.1 级别:公开 编写时间:2013-03-18

目录 1 导言 (1) 1.1 目的 (1) 1.2 范围 (1) 1.3 说明 (1) 2 搭建Struts2 (2) 2.1 搭建所需jar包 (2) 2.2 整合步骤 (2) 2.2.1 创建项目 (2) 2.2.2 导入jar包 (2) 2.2.3 配置web.xml (4) 2.2.4 创建web (4) 2.2.5 创建jsp页面 (5) 2.2.6 配置struts.xml (6) 2.2.7 配置Tomcat (6) 2.2.8 部署项目 (7) 2.3 测试 (8) 2.3.1 启动Tomcat (10) 2.3.2 测试Tomcat (10) 2.3.3 测试Struts (11) 3 整合Spring3 (12) 3.1 整合所需jar包 (12) 3.2 整合步骤 (12) 3.2.1 导入jar包 (12) 3.2.2 配置web.xml (12) 3.2.3 配置struts.xml (13) 3.2.4 配置spring.xml (13) 3.3 测试 (14)

3.3.1 启动Tomcat (14) 3.3.2 测试登录 (14) 4 整合Hibernate4 (15) 4.1 整合所需jar包 (15) 4.2 整合步骤 (15) 4.2.1 导入jar包 (15) 4.2.2 创建数据库ccc (15) 4.2.3 创建对象User (16) 4.2.4 生成映射文件User.hbm.xml (17) 4.2.5 创建dao (18) 4.2.6 创建service (19) 4.2.7 创建web (20) 4.2.8 配置jdbc.properties (21) 4.2.9 配置db.xml (22) 4.2.10 配置spring.xml (24) 4.2.11 配置struts.xml (24) 4.3 测试 (25) 4.3.1 启动Tomcat (25) 4.3.2 测试登录 (25)

软件项目主要阶段及各个阶段主要工作

软件项目主要阶段及各个阶段主要工作 Document number:WTWYT-WYWY-BTGTT-YTTYU-2018GT

软件项目主要分为哪些阶段各个阶段主要做哪些工作 本人在两个中小型软件开发企业工作过几年,也做过几年的项目管理工作。走过一些弯路也得出一些项目管理方面的体会,在此进行总结,希望能够与其他一些项目管理人员或对项目管理有兴趣的同事共同探讨一些中小型项目管理的问题及方法。? 大部分中小型软件开发企业的软件项目经常遇到的一些问题可能包括:项目时间紧、项目组成员经常加班;项目需求变更频繁;项目进行过程中可能就有项目团队成员离职或调离到其他项目组;项目重复性建设问题严重,每个项目都需要从框架开始重新开发,难以重用已有项目的成果等等。我觉得通过较好的规划和管理能够在一定程度上提高项目的成功率或者说提高项目的质量,降低开发成本,缩短项目开发时间。? 我理解项目管理有两个大的划分方法一是通用的项目管理体系,也就是PMP 中所说的5个项目管理过程组9个知识领域44个项目管理过程;二是具体业务领域的按项目生命期划分的各阶段的管理。本文主要从项目生命期各阶段的管理方面进行总结。? 我个人分析一个软件项目生命期大体需要经过的流程(这只是我个人的一个划分,有可能不是很全面):可行性分析、需求、设计、开发、测试、实施、维护、总结。? 下面我针对每个阶段谈一下自己的体会。? 一、可行性分析? 一般的项目都是通过外部招标的形式得到的。对于有些公司在应标的时候对项目就要有个取舍。如果在特殊时期为了生存可能只要不是太赔的项目都会尽量承接。? 但是一般项目在承接前最好在经济、技术等方面进行可行性分析,而且这种可行性分析最好是管理者、市场、技术等人员都参与,因为市场人员一般不懂(或不通)技术,技术不懂(或不通)市场,因此只有大家在一起共同分析讨论才能够得出比较可行的结果。可行性分析的结果一方面可以作为是否承接项目的依据,另一方面也可以作为承接项目方式或与客户谈判的依据。比如经分析项目工作量很大,如果按标书金额开发有可能会赔,那么可以与用户探讨是否将来能有个二期的项目;另外如果用户要求的时间比较紧,可是经分析很难按标书时间完成,那么也可以和用户同共探讨是否可以在正式签定合同时延长系统交付时间等。当然这些与用户的探讨工作一般是需要公司高层领导出面协调的,有时单独靠项目组是没有能力达成理想的结果的。? 另外在此阶段最好对项目的成本和需要的资源进行一下估算。? 二、需求? 需求实际要细分为需求调研、需求分析、需求确认、需求管理等。? 因为对于需求要想说清楚可能需要较长的篇幅,所以在此不进行展开。? 在此只是先强调一下需要相当重要,如果早期需求做的不够仔细会给项目的后期工作带来很多的隐患。?

Struts2学习笔记

Struts2项目的构建与配置 1.配置struts.xml (1)配置struts.xml可以参考下载的struts-2.3.14.1-all.zip解压后的apps文件夹下的 参考项目的struts.xml文件。 (2)主要的配置如下: /hello.jsp value="true"表示是开发模式,当修改了配置时服务器会自动加载修改后的配置,不需要中期服务器,方便开发。 (3)namespace="/"与浏览器的访问地址有关,namespace的默认值为空。 (4)/hello.jsp action的name值与浏览器的访 问地址有关,当地址是“http://…/hello”时,浏览器就会返回result中的hello.jsp 的页面。 2.配置web.xml (1)配置web.xml也可以参考下载的struts-2.3.14.1-all.zip解压后的apps文件夹下的 参考项目的web.xml文件 (2)主要配置如下: struts2 org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter struts2 /* 3.配置Struts2的jar包 (1)复制下载的struts-2.3.14.1-all.zip解压后的apps文件夹下的参考项目的 WEB-INF\lib文件夹下的所有的jar包到我们自己项目的WEB-INF\lib文件夹下即可。 Struts.xml的配置 1.package的属性与配置 (1)package的使用说明:类似于Java程序里的package,主要用于区分同名的action。在真 正的项目开发中package通常来区分不同的模块。例如: (2)name属性:用于区分不同的package,此属性不能省略不写。 (3)extends属性:用于继承其他的package,继承了某个package就包含了某个package里 的所有配置,此属性可以省略不写,默认继承struts-default。 (4)namespace属性:表示浏览器访问的路径,此属性可以省略不写,默认为空,当此属性 为空时,该package里的action可以匹配浏览的任何请求的action。 (5)abstract属性:此属性的值为false表示此package非抽象的,若为true表示此package

Struts2+Spring3+Hibernate4+Maven整合

Struts2+Spring3+Hibernate4+Maven整合 目录 1.建立Maven工程 2.搭建Spring3 3.搭建Struts2并整合Spring3 4.搭建Hibernate4并整合Spring3 内容 1.建立Maven工程 第一步: 第二步:

第三步:

第四步: 注意:这里的JDK要选择默认的,这样别人在使用的时候,如何JDk不一致的话也不会出错,如下图所示:

第五步: Maven标准目录 src/main/java src/main/resources src/test/java src/test/resources 第六步: 发布项目:Maven install 清除编译过的项目:Maven clean

OK,Mean 工程创建成功! 2. 搭建 Spring3

(1)下载Spring3需要的jar包 1.spring-core 2.spring-context 3.spring-jdbc 4.spring-beans 5.spring-web 6.spring-expression 7.spring-orm 在pom.xml中编写Spring3需要的包,maven会自动下载这些包。 org.springframework spring-core 3.1.2.RELEASE org.springframework spring-context 3.1.2.RELEASE org.springframework spring-jdbc 3.1.2.RELEASE org.springframework spring-beans 3.1.2.RELEASE org.springframework spring-web 3.1.2.RELEASE org.springframework spring-expression 3.1.2.RELEASE org.springframework spring-orm 3.1.2.RELEASE

struts2复习题(含答案)

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

BBS论坛系统 UML建模

软件建模与UML 实训报告 实训项目:________________________ 小组名称:________________________ 小组成员:________________________ 联系方式:________________________

目录 一、摘要 (1) 二、BBS论坛系统的可行性分析 (2) 三、BBS论坛系统的需求分析 (3) 四、系统的UML建模设计 (6) 五、BBS系统的数据库建模 (14) 六、心得 (19)

一、摘要 随着Internet技术的快速发展,人与人之间交流方式逐渐增多。网络视频、网络聊天、博客已成为人们彼此沟通、交流信息的主要方式。此外,为了方便人们在某一专业领域探讨问题和发表意见,Internet上还出现了在线论坛。在论坛上,人们可以对某一领域提出自己遇到的问题,即发表某一主题,随后,论坛上的其他人会根据自己的学识、经验发表意见或提出问题的方法。 开发BBS论坛系统的目的是提供一个供用户交流的平台,为广大用户提供交流经验、探讨问题的网上社区。因此,BBS论坛系统最基本的功能首先是发表主题,其次是其他人员根据主题发表自己的看法。此外,为了记录主题的发表者和主题的回复者信息,系统还需要提供用户注册和登录的功能。只有注册的用户登录后才能够发表和回复主题,浏览者(游客)只能浏览主题信息。 本论坛系统是基于是Struts1.2+SQL Server 2000实现的,它具有使用方便、操作灵活、运行稳定、安全可靠等特点。 关键词在线论坛,BBS,网上社区

二、BBS论坛系统的可行性分析 可行性分析是在系统调查的基础上,针对新系统的开发是否具备必要性和可能性,对新系统的开发从技术、经济、社会的方面进行分析和研究,以避免投资失误,保证新系统的开发成功。可行性研究的目的就是用最小的代价在尽可能短的时间内确定问题是否能够解决。 2.1、技术可行性 技术上的可行性分析主要分析技术条件能否顺利完成开发工作,硬、软件能否满足开发者的需要等。该BBS论坛管理系统采用了流行的JSP语言和当前新兴的Browser/Server (浏览器/服务器)模式进行开发。三层的B/S体系结构具有许多传统Client/Server(客户机/服务器)体系结构不具备的优点,而且又紧密的结合了Internet/Intranet(国际互联网/企业内部互联网)技术,是技术发展的大势所趋,它把应用系统带入了一个崭新的发展时代。数据库服务器选用SQL Server 2000数据库,它能够处理大量数据,同时保持数据的完整性并提供许多高级管理功能。它的灵活性、安全性和易用性为数据库编程提供了良好的条件。因此,系统的软件开发平台已成熟可行。硬件方面,科技飞速发展的今天,硬件更新的速度越来越快,容量越来越大,可靠性越来越高,价格越来越低,其硬件平台能满足此系统的需要。 2.2、经济可行性 主要是对项目的经济效益进行评估,本系统模拟的是提供一个供用户交流的平台,为广大用户提供交流经验、探讨问题的社区。但实际只是用于个人的毕业设计,只是模拟,也不存在资金的流动,故在经济上是可行的。 2.3、社会可行性 随着Internet技术的快速发展,BBS论坛已成为人们彼此沟通、交流信息的主要方式。在论坛上,人们可以对某一领域提出自己遇到的问题,随后,论坛上的其他人会根据自己的学识、经验发表意见或提出问题的方法。BBS论坛接近了人们之间的距离,它早已成为人们网上生活的必备工具。所以说BBS论坛对当今社会是相当重要的。

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.doczj.com/doc/481562018.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中的习惯。

02-Struts2的工作流程及配置文件

Struts2的工作流程及配置文件--- https://www.doczj.com/doc/481562018.html, --- Struts2.0的流程图

从图中看到Struts2的工作流程如下: 1.服务器接收到的请求首先经过一组过滤器链(实际中的其他过滤器可能还包括诸如Spring 的字符过滤器CharactorEncodingFilter、V elocity的过滤器等,一般FilterDispatcher位于过滤器的最后一个执行),过滤器链按照你在web.xml中的配置顺序在接收客户请求时顺序执行,在向客户发送响应时反序执行,Struts2的核心FilterDispatcher在web.xml中的配置如下: setCharactor org.springframework.web.filter.CharacterEncodingFilter encoding UTF-8 struts2 org.apache.struts2.dispatcher.FilterDispatcher setCharactor /* struts2 /* 注意:如果你使用的是W ebLogic6.1作为应用服务器,需要使用FilterDispatcherCompatW eblogic61替代FilterDispatcher。 2.请求被送到FilterDispatcher之后,FilterDispatcher会通过其私有静态的属性ActionMapper 询问这个请求是否需要调用Action处理,如果需要调用Action,FilterDispatcher会把请求委托给ActionProxy,ActionProxy调用ActionInvocation查找配置文件中该Action的所有信息,并以这个Action为目标创建代理对象(因为Struts2中的Action由于XWork的设计理念,并没有与Servlet的API被调用,所以如果直接调用Action的实例,那么显然基于HTTP 的请求都将无法传入Action。Struts2通过创建Action的代理对象,并使用拦截器将HTTP 的请求信息传入代理对象,这是典型的AOP处理方式,这也实现了控制器与Servlet的API 的分离,这是Struts1.x所欠缺的优秀的设计方式),然后执行该Action之前的所配置的所有拦截器,与过滤器相同,在接受请求时,会顺序执行你在配置文件中为该Action配置的拦截器顺序; 3.在穿越拦截器之后,就会执行Action,当Action执行完毕,ActionInvocation就要使用result

j2ee框架Struts2HibernateSpring考试复习题库

1.Eclipse是IMB公司向开放源代码社区捐献的Java程序开发平台,是一个成熟的、可扩展的体系结构。 2.Eclipse主要包含3个子项目:平台子项目,Java开发工具子项目,插件开发环境子项目。 3.MVC是Model(模型)业务逻辑层,View(试图)表述层,Controller(控制)控制层。 4.Struts是Apache Jakarta项目于2001年推出的一个开元的Java Web框架,通过一个配置文件,把各个层面的应用组件联系起来,使组件在程序层面上联系较少,耦合度较低,提高了应用程序的可维护性和扩展性。 5. Struts框架有两种发行包:源代码(source)和二进制(binary)。 6. Struts框架大约由300个Java类组成,可分为8个核心包:config,action,actions,tiles,upload,taglib,util,validator。 7. Struts的核心API包括ActionServlet,ActionForm,Action,ActionMapping及ActionForward,它们构成了Struts框架中的控制器组件,视图组件,模型组件 8.Hibernate是对象/关系映射(ORM)的解决方案,就是将Java对象与对象关系映射成关系数据库中表格与表格之间的关系。 9. Cache就是缓存,它往往是提高系统性能的在最重要手段,对数据起到一个蓄水池和缓冲的作用。 10. Session实现了第一级Cache,它属于事务级数据缓冲,二级Cache是SessionFactory范围内的缓冲,所有的Session共享同一个二级Cache。 11.设置Hibernate的二级Cache需要分两部进行:首先确认使用什么数据并发策略,然后设置缓存过期时间和设置Cache提供器。 12.Spring是指一个用于构造Java应用程序的轻量级框架。13.IoC是一种将组件依赖关系的创建和管理置于程序外部的技术。 1.MVC设计模式的J SP Model1和JSPModel2的区别?答:对Model1而言,JSP页面会完成请求的所有处理事项,负责向客户显示输出,整个流程并没有Servlet的参与,客户请求直接送往JSP页面,JSP页调用JavaBean组件或其他业务组件处理请求,并把结果在另一个页面显示出来。对Model2而言,客户请求不是直接送给JSP页面,而是送给一个Servlet 进行前端处理。一旦请求处理完毕,Servlet会把请求重定向到适当的JSP页面。 2. Struts 的基本原理?答:首先从struts-config.xml文件中读取信息,根据这些信息,它的控制器ActionServlet知道把视图中的请求转发给哪个业务逻辑组件处理。视图组件、控制器与业务逻辑组件之间没有代码上的联系,它们之间的关系在struts-config.xml中声明,这样大大提高了Web应用程序的可移植性和可维护性。 3. S truts的核心组件?答:ActionServlet的类扩展了javax.servlet.http.HttpServlet类,其职责是把HTTP消息打包起来并路由传送到框架中合适的处理器。Struts框架中的org.apache.struts.action.Action类是控制器组件的一个扩展。struts-config.xml是整个Struts 应用程序的枢纽。ActionMapping,控制器要通过查看请求信息并使用一组动作映射对象来作出决定。ActionForward,在Action完成之后,控制器要转交控制权的地方。ActionForm 对象可用来在用户和业务层之间传输客户的输入数据。 4. Struts框架如何处理每个请求相应的ActionForm对象?答:①检查该项动作的相应映射,查看是否已经有某个ActionForm得到配置②如果对应这个动作配置了某个ActionForm,则使用action元素中的name属性来查找FormBean的配置信息③查看是否已经创建了ActionForm的一个实例④如果在适当的作用域内已经存在一个ActionForm实例,而且这个实例的类型正是这个新请求所需要的类型,则重用这个实例⑤否则,创建所需ActionForm 的一个新实例,并存储在适当的作用域。⑥调用ActionForm实例的reset()方法⑦反复处理请求参数,如果参数名在ActionForm实例中具有对应的设置方法,就为它填上请求参数的

struts2.3.20环境搭建详解

Create Struts 2 Web Application With Artifacts In WEB-INF lib and Use Ant To Build The Application Edit Page Browse Space Add Page Add News You can download this complete example, Basic_Struts2_Ant, from Google Code - https://www.doczj.com/doc/481562018.html,/p/struts2-examples/downloads/list. Click on the link for Basic_Struts2_Ant.zip and save the file to your computer. Unzip the file and you should have a folder named Basic_Struts2_Ant. In that folder is a README.txt file with instruction on how to build and run the application. Icon This tutorial assumes you already know how to create a Java web application, use Ant to build the web application archive (war) file, and deploy the war file to a Servlet container such as Tomcat or Jetty. To create a Struts 2 web application with the Struts 2 artifacts added to the the application's class path manually you will need to download the Struts 2 distribution from the Apache Struts website. On the Struts 2 download page, click on the link for the current General Availability release. In that release's section you'll find several links. To get started with a basic Struts 2 web application you need to only download the Essential Dependencies Only zip file, which is approximately 12mb. After downloading this zip file, unzip it. You should have a folder named the same as the current general availability release and in that folder will be a lib folder. The lib folder contains the Struts 2 jar files (e.g. struts2-core-X.X.X.X.jar, where X.X.X.X is the version) and other jar files Struts 2 requires (e.g. xwork-core.X.X.X.jar). As we create our basic Struts 2 web application we will copy from the Struts 2 distribution lib folder just the jar files our application requires. As we add features to our application in future tutorials we will copy other jar files. Step 1 - Create A Basic Java Web Application In your Java IDE create a web application project named Basic_Struts2_Ant. To follow along with this tutorial your web application should have the following folder structure: Remember Struts 2 requires Servlet API 2.4 or higher, JSP 2.0 or higher, and Java 5 or higher. The example project, Basic_Struts2_Ant, which you can download from Google

最详细eclipse配置struts2

第一章lectery的学习笔记 1.1Eclipse下搭建Struts2开发环境 博客分类: Java EclipseTomcatJSPStrutsJDK 作者:bukebushuo 来源:https://www.doczj.com/doc/481562018.html,/bukebushuo/archive/2007/03/29/1545728.aspx 最近下载了最新的struts 2.06,在使用其中附带的例子时,在配置上遇到了一些问题。 经过很多次的努力后,终于配置成功。现在把配置过程写出来供大家参考! 一软件:1 Eclipse+lomboz 3.2 下载地址: https://www.doczj.com/doc/481562018.html,/project/showfiles.php?group_id=97&release_id= 1864(网页) https://www.doczj.com/doc/481562018.html,/project/download.php?group_id=97&file_id=7714(文件),不保证一直有效。 2 Tomcat 5.5 下载地址:https://www.doczj.com/doc/481562018.html,/download-55.cgi https://www.doczj.com/doc/481562018.html,/mirrors/apache/tomcat/tomcat-5/v5.5.23/bin/apache -tomcat-5.5.23.zip 3 JDK 6 下载地址:https://www.doczj.com/doc/481562018.html,/javase/downloads/index.jsp 4 Struts2.06

下载地址:https://www.doczj.com/doc/481562018.html,/download.cgi#struts201 二安装: 1 安装JDK6,按照自己喜欢的安装即可。JDK一定要在Eclipse之前安装,因为Eclipse的启动需要JDK。 2 安装Tomcat,我下载的Tomcat是直接解压缩版的,解压缩后拷贝到一个地方就可以了,拷贝后需要注意的是需要把JDK6目录中的 tools.jar拷贝到Tomcat中具体是JDK的lib目录下的tools.jar拷贝到Tomcat下common\lib中。 3 安装Eclipse,重点来了,解压缩下载的lomboz,应该得到一个eclipse目录,把这个目录拷贝到一个比较容易找的地方。 解压缩的时候需要注意,在解压缩过程中可能遇到文件路径过长的问题,我的解决方法是把下载下来的压缩包名重命名为1.zip,也就是尽量缩短文件名长度。然后解压缩的时候直接解压缩到某个硬盘的根目录下,解压缩完后再拷贝到自己想要的地方。 4, 解压缩Struts2.06,把下载下来的Struts2.06压缩包解压缩到一个目录中在他的APPS目录下有几个.war文件。 可以使用WINRAR打开,这里我们仅仅使用winrar把struts2-blank-2.0.6.war文件解压缩到本目录中就可以了。 三、配置 1:配置工作目录 第一次打开Eclipse时会要求你指定你的工作目录,请选择好你的工作目录,今后你的Eclipse的相关项目的配置就放在这个目录里。 2:配置JREs 打开配置对话框

MyEclipse开发Struts2过程

MyEclipse开发Struts2过程 Struts2是Struts1.x的升级换代产品,但是并没有继承Struts1.x的思想和操作模式,而是一个完全不同的实现方式,所以即使学会了Struts1.x还是得从头学习Struts2,但是当你学会了Struts2后会发现这个产品对编程及配置有了很大的简化,使得程序员将更多的精力集中到业务逻辑编程方面,下面就在MyEclipse8.5M1平台下如何开发基于Struts2的Web应用系统的MVC模式中的VC部分作以简要的描述,M部分还是可以采用其他框架实现,例如Spring+Hibernate等。 (一)创建基于Struts2的Web项目 从MyEclipse的菜单中一次选择File\New\Web Project,在弹窗中填写该项目的名称信息,并且选择J2EE的版本,如图:

(二)添加Struts2支持 将鼠标定位到Package Explorer视窗的该项目名称上,单击右键,在弹出的菜单上依次选择MyEclipse\Add Struts Capabilities,在弹窗中选择Struts的版本为Struts2.x,单击“Next”按钮进入下一个窗口,选择要加入的支持类库,库的选择视项目需求而定,可以在后续开发过程中陆续加入,这里只选择Struts2 Core Libraries。完成这些操作后发现系统在src目录下添加了一个配置文件struts.xml,这个文件就是Struts2的核心配置文件,后续的操作都在此文件中进行。 (三)编写JSP页面代码 这里注意尽量使用Struts2的标签来编写JSP代码,所以要在页面代码开始部分引入标签库,即添加该行代码<%@ taglib prefix="html" uri="/struts-tags"%>,MyEclipse8.5M1目前还不支持基于Struts2的JSP模板,所以在新建JSP页面代码的时候,先选择基于Struts1.x模板,然后再手动修改,也就是把该页面代码中

Struts 2 异常处理的常用的解决方法

一、第一个异常处理 严重: Servlet.service() for servlet jsp threw exception The Struts dispatcher cannot be found. This is usually caused by using Struts tags without the associated filter. Struts tags are only usable when the request has passed through its servlet filter, which initializes the Struts dispatcher needed for this tag. - [unknown location] at org.apache.struts2.views.jsp.TagUtils.getStack(TagUtils.java:60) at org.apache.struts2.views.jsp.StrutsBodyTagSupport.getStack(StrutsBodyTagSupport.java:44) at https://www.doczj.com/doc/481562018.html,ponentTagSupport.doStartTag(ComponentTagSupport.java:48) at https://www.doczj.com/doc/481562018.html,_005fstruts2_005flz.YpxxbQuery_jsp._jspx_meth_s_005fdebug_005f0(Ypxxb Query_jsp.java:108) at https://www.doczj.com/doc/481562018.html,_005fstruts2_005flz.YpxxbQuery_jsp._jspService(YpxxbQuery_jsp.java:83) 解决的办法:(4种解决方案) 1. web.xml 中添加一个filter struts2 *.jsp struts2 /action/* 2. struts2 /* 注意这里一定要是/* 3. 这通常是由于不经由Filter访问包含struts标签的jsp页面导致的。那么,只要通过配置,使得对jsp页面的访问请求由Filter过滤转发即可。 方法1:在strut.xml中配置一个通用Action,通过这个Action转发到jsp页面。这个时候,原先访问jsp的请求路径就要换成相应的Action路径了。写法如下。 /{1}.jsp 方法2:在web.xml中配置Filter的url-parttern。写法如下。其中struts2-dispatcher 是已定义的Filter。

struts面试题

1.简述Struts框架的初始化流程。 答案:对于采用Struts框架的Web应用,在Web应用启动时就会加载并初始化控制器ActionServlet ActionServlet从struts-config.xml文件中读取配置信息,把它们存放到ActionMappings对象中。 在Struts framework中,Controller主要是ActionServlet,但是对于业务逻辑的操作则主要由Action、ActionMapping、ActionForward这几个组件协调完成(也许这几个组件,应该划分到模型中的 业务逻辑一块)。 其中,Action扮演了真正的控制逻辑的实现者,而ActionMapping和ActionForward则指定了不同业务 逻辑或流程的运行方向。 2.简述Struts框架响应客户请求的工作流程 1.检索和用户请求匹配的ActionMapping实例,如果不存在,就返回用户请求路径无效的信息。 2.如果ActionForm实例不存在,就创建一个ActionForm对象,把客户提交的表单数据保存到ActionForm对象中。 3.根据配置信息决定是否需要表单验证。如果需要验证,就调用ActionForm的validate()方法。 4.如果ActionForm的validate()方法返回null或返回一个不包含ActionMessge的ActionErrors对象,就表示表单验证成功。 5.ActionServlet根据AtionMapping实例包含的映射信息决定将请求转发给哪个Action。如果应的Action实例不存在,就先创建这个实例,然后调用Action的execute()方法。 6.Action的execute()方法返回一个ActionForward对象,ActionServlet再把客户请求转发给ActionForward对象指向的JSP组件。 7.ActionForward对象指向的JSP组件生成动态页面,返回给客户。 对于以上流程的步骤(4),如果ActionForm的validate()方法返回一个包含一个或多个ActionError 的ActionErrors对象,就表示表单验证失败,此时ActionServlet将直接把请求转发给包含客户提交表 单的JSP组件。在这种情况下,不会再创建Action对象并调用Action的execute方法。 3Struts框架的数据验证可分为几种类型? 表单验证(由ActionForm Bean处理):如果用户没有在表单中输入姓名,就提交表单,将生成表单验证 错误 业务逻辑验证(由Action处理):如果用户在表单中输入的姓名为“Monster”,按照本应用的业务规则,不允许向“Monster”打招呼,因此将生成业务逻辑错误。 4简述Form Bean的表单验证流程。 1、当用户提交了HTML表单,Struts框架自动把表单数据组装到ActionForm Bean中。 2、接下来Struts框架会调用ActionForm Bean的validate()方法进行表单验证。 3、如果validate()方法返回的ActionErrors对象为null,或者不包含任何ActionMessage对象,就表示没有错误,数据验证通过。 4、如果ActionErrors中包含ActionMessage对象,就表示发生了验证错误,Struts框架会把ActionErrors对象保存到request范围内,然后把请求转发到恰当的视图组件,视图组件通过 标签把request范围内的ActionErrors对象中包含的错误消息显示出来,提示用户修改错误。 5在struts配置文件中action元素包含哪些属性和子元素? path属性:指定请求访问Action的路径 type属性:指定Action的完整类名 name属性:指定需要传递给Action的ActionForm Bean scope属性:指定ActionForm Bean的存放范围 validate属性:指定是否执行表单验证 input属性:指定当表单验证失败时的转发路径。

相关主题
文本预览
相关文档 最新文档