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 ,