struts2总结详解 (一)

2014-11-24 11:27:35 · 作者: · 浏览: 28

一、Struts mvc的完美实现


Mvc

Cgi 通用网关接口 动态web早期

Servlet之后产生jsp servlet适合处理业务请求 产生数据 不适合输出 因此产生jsp

Jsp 九大内置对象

Requestresponse session exception out config page pageContext application

作用域(由大到小)排序:application域 session域 request域 page域

Page域:pagecontext对象域,在当前jsp页面中有效(跳转到其他页面无效)

pageContext可以得到其他八大内置对象

jsp 本质是servlet

公式 html + css + java内嵌代码+java script

<%page session=”true/false” isErrorPage=”true/false”> session false 则 <%%>无法访问

jsp model1 jsp+javabean

jsp model2 servlet(controller) +jsp(view) + javabean(m)

将事务处理和显示界面分开 分工明确

servlet : 三件事:1、接受参数(封装) 2、调用业务方法(service) 3、传值(通过娱对象)4、 决定现实那个页面

dao(userdaointer接口 userdaoimp 实现) service(userinterface userimpl) web(servlet,filter,listern)

二、框架:一堆组件控件的集合,组合起来完成更多的事情

组件

构件

控件()

插件

三层架构:

视图层:struts (mvc)

业务逻辑层:spring (业务)service

数据库访问层:hibernate(数据访问)daojdbc session.save(user)

If(str==null&&str==””){} 重复代码封装

三、框架如何学:

J2EE十三种方法

四、搭建环境

包 修改xmleb容器管理

1、 新建web工程struts2_00_HelloWorld

2、 复制解压文件实例的struts.xml至新工程的src下修改

3、 在lib下导入解压文件apps/Struts2-blank/WEB-INF/lib/XXX.jar(除前三个都加)

4、 修改web.xml(复制粘贴)

5、 在Tomcat6.0/conf/Catalina/localhost/创建一个工程名.xml,写入

6、 工程名 namespace(以/开头) /

action.name helloWorld

五、问题解决

1、如何找到请求的java类

1) 关于package
在struts2框架中使用包来管理Action,包的作用和java中的类包是非常类似的,它主要用于管理一组业务功能相关的action。在实际应用中,我们应该把一组业务功能相关的Action放在同一个包下。实际中经常按功能模块划分。

配置包时必须指定name属性,该name属性值可以任意取名,但必须唯一,他不对应java的类包,如果其他包要继承该包,必须通过该属性进行引用。包的namespace属性用于定义该包的命名空间,命名空间作为访问该包下Action的路径的一部分,如访问上面例子的Action,访问路径为:/test/helloworld.action。 namespace属性可以不配置,对本例而言,如果不指定该属性,默认的命名空间为“”(空字符串)。

通常每个包都应该继承struts-default包, 因为Struts2很多核心的功能都是拦截器来实现。如:从请求中把请求参数封装到action、文件上传和数据验证等等都是通过拦截器实现的。 struts-default定义了这些拦截器和Result类型。可以这么说:当包继承了struts-default才能使用struts2提供的核心功能。 struts-default包是在struts2-core-2.x.x.jar文件中的struts-default.xml中定义。 struts-default.xml也是Struts2默认配置文件。 Struts2每次都会自动加载 struts-default.xml文件。

以通过abstract=“true”定义为抽象包,抽象包中不能包含action。

包还可

2) 关于namespace
Namespace必须以/开头

namespace决定了action的访问路径,默认为"",可以接收所有路径的action
namespace可以写为/,或者/xxx,或者/xxx/yyy,对应的action访问路径为/index.action, /xxx/index.action,或者/xxx/yyy/index.action.namespace最好也用模块来进行命名

默认命名空间 namespace为空或不设置任何值,可以接受所有路径的action。

Package 和namespace一般在开发中用模块来命名。

默认命名空间所在的package可以处理所有其他package处理不了的action,路径随便写只要最后那个action在我这个package下就可以。

3) 关于action

Servlet单实例,action是每次都new一个新的。

1>Action配置中的各项默认值
1>如果没有为action指定class,默认是ActionSupport。

2>如果没有为action指定method,默认执行action中的execute() 方法。

3>如果没有指定result的name属性,默认值为success。

2>Action的搜索顺序
1.获得请求路径的URI,

2.首先寻找namespace为/path1/path2/path3的package,如果不存在这个package则执行步骤3;如果存在这个package,则在这个package中寻找名字为test的action,当在该package下寻找不到action 时就会直接跑到默认namaspace的package里面去寻找action(默认的命名空间为空字符串“”) ,如果在默认namaspace的package里面还寻找不到该action,页面提示找不到action

3.寻找namespace为/path1/path2的package,如果不存在这个package,则转至步骤4;如果存在这个package,则在这个package中寻找名字为test的action,当在该package中寻找不到action 时就会直接跑到默认namaspace的package里面去找名字为test的action ,在默认namaspace的package里面还寻找不到该action,页面提示找不到action

4.寻找namespace为/path1的package,如果不存在这个package则执行步骤5;如