当前位置:编程学习 > JAVA >>

struts2总结详解

一、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内嵌代码+javascript

 

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

 

jsp model1  jsp+javabean <jsp:userbean

                         <jsp:setpropertis

                          <jsp:维护复杂很难查找修改 由于无servlet故内嵌代码存于页面代码中

 

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,写入<context docbase =”D:\apache-tommcat-6.0.20\webapps\struts2_00_HelloWorld”/>

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;如果存在这个package,则在这个package中寻找名字为test的action,当在该package中寻找不到action 时就会直接跑到默认namaspace的package里面去找名字为test的action ,在默认namaspace的package里面还寻找不到该action,页面提示找不到action

 

5.寻找namespace为/的package,如果存在这个package,则在这个package中寻找名字为test的action,当在package中寻找不到action或者不存在这个package时,都会去默认namaspace的package里面寻找action,如果还是找不到,页面提示找不到action。

 

3>如何编写一个action
         Struts2中的action和 之前的servlet的功能是一致的,我们来回忆一下以前的servlet做些什么事情?

         1,接受客户端的请求,如何有参数的话要接受参数。接收到的参数有时候会封装成业务对象,有时候不封装直接给业务方法用。

         2,调用业务方法处理业务请求.

         4,将业务请求返回的数据设置到合适的域对象[可选].

         3,页面转发跳转到servlet或jsp。

        

         好我们来正式写一个action,以前servlet有三种实现方式

1, implementServlet

2, extendsGenericServlet

3, extendsHttpServlet

 

现在action实现也有3种实现方式

1.        普通的java类

<default-class-refclass="com.opensymphony.xwork2.ActionSupport" />

2.        implement Action

3.        extendsActionSupport

 

 

4>ActionDefault
Usually, if an action is request

补充:软件开发 , Java ,
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,