本文主要是介绍SSH框架——走进Struts2,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
今天我们来学习java中比较流行的框架SSH。
所谓框架,其实就像我们盖房子一样,需要先搭建支架,然后再进行添砖加瓦,使之达到完美。而在软件开发中,框架也是一样的:就是将通用的代码进行封装,使我们可以重复利用,达到了高效开发的效果。当然既然已经搭建好的框架,用到我们的系统中,我们就需要学习它,怎么使我们自己独有的代码和框架进行完美的结合。因为大家都在用这些优秀的框架,所以框架的学习,其实就是框架规范的学习。有了规范,有个约束,有了统一,才能更加有利于合作的开发。
那么SSH又是什么呢?
关注数据流程的MVC框架 (Struts1/2, WebWork, Spring MVC……)
关注数据关系的容器框架 (Spring, GUICE……)
关注数据操作的持久层框架(Hibernate,IBatis……)
当然,每个公司用到的框架可能都不太一样,但是他们的原理是相通的,我们只要学习会一套框架,然后能够举一反三,构建出自己的知识网,然后就会很快的适应新的知识了。
首先,今天我们来一起学习一下Structs2。之后会继续介绍Hibernate和spring的学习。
一、概念
Struts2框架是一个轻量级的MVC流程框架,轻量级是指程序的代码不是很多,运行时占用的资源不是很多,MVC流程框架就是说它是支持分层开发,控制数据的流程,从哪里来,到那里去,怎么来,怎么去的这样一个框架
二、原理
一个请求在Struts2框架中的处理大概分为以下几个步骤
客户端初始化一个指向Servlet容器(例如Tomcat)的请求
这个请求经过一系列的过滤器(Filter)
(这些过滤器中有一个叫做ActionContextCleanUp的可选过滤器,这个过滤器对于Struts2和其他框架的集成很有帮助,例如:SiteMesh Plugin)
接着FilterDispatcher被调用, 它是控制器的核心,就是mvc中c控制层的核心,通过询问ActionMapper来决定这个请是否需要调用某个Action 。
如果ActionMapper决定需要调用某个Action,FilterDispatcher把请求的处理交给ActionProxy
ActionProxy通过ConfigurationManager询问框架的配置文件,找到需要调用的Action类 ,这里,我们一般是从struts.xml配置中读取。
同时ActionProxy创建一个ActionInvocation的实例。ActionInvocation实例使用命名模式来调用,在调用Action的过程前后,涉及到相关拦截器(Intercepter)的调用。
一旦Action执行完毕,ActionInvocation负责根据struts.xml中的配置找到对应的返回结果。返回结果通常是(但不总是,也可能是另外的一个Action链)一个需要被表示的JSP或者FreeMarker的模版。在表示的过程中可以使用Struts2 框架中继承的标签。在这个过程中需要涉及到ActionMapper。
三、使用
1.导入六个lib包
commons-fileupload-1.2.1.jar
commons-logging-1.0.4.jar
freemarker-2.3.15.jar
ognl-2.7.3.jar
struts2-core-2.1.8.jar
xwork-core-2.1.6.jar
2.配置web.xml
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5" xmlns=" http://java.sun.com/xml/ns/javaee" xmlns:xsi=" http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation=" http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"> <welcome-file-list> <welcome-file>index.jsp</welcome-file> </welcome-file-list> <display-name>Struts2.1 Hello World</display-name> <filter> <filter-name>struts2</filter-name> <filter-class> org.apache.struts2.dispatcher.FilterDispatcher</filter-class> </filter> <filter-mapping> <filter-name>struts2</filter-name> <url-pattern>/*</url-pattern> </filter-mapping>
</web-app>
3.在src下创建struts.xml,并配置
<!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.1//EN" " http://struts.apache.org/dtds/struts-2.1.dtd"> <struts><!-- 基本的配置内容 --><!-- package元素的name属性指的是包名, extends属性表示继承 struts-default这个包 --> <package name="struts2" extends="struts-default"><!-- action元素的name属性值对应Form表单的action属性值,class属性表示要处理的那个action类,这里是提交给LoginAction处理 --> <action name="login" class="com.test.action.LoginAction"><!-- result元素的name属性值对应LoginAction中被调用的那个方法的返回值,根据返回值去匹配name属性,然后跳转到相应的JSP页面 --> <result name="success">/success.jsp</result><result name="error">/error.jsp</result></action> </package> </struts>
4.创建实体类model
实体类是一个普通的POJO类
5.创建dao包
创建dao.impl包
6.创建service包
7.创建action包
action类继承ActionSupport 默认重写execute()或者自定义实现方法
8.根据struts.xml配置文件内的result元素创建相应的JSP页面
四、比较
struts2相对于struts1来说简单了很多,并且功能强大了很多,我们可以从几个方面来看:
- 从体系结构来看
struts2大量使用拦截器来出来请求,从而允许与业务逻辑控制器 与 servlet-api分离,避免了侵入性;而struts1.x在action中明显的侵入了servlet-api.
- 从线程安全分析
struts2.x是线程安全的,每一个对象产生一个实例,避免了线程安全问题;而struts1.x在action中属于单线程。
- 性能方面
struts2.x测试可以脱离web容器,而struts1.x依赖servlet-api,测试需要依赖web容器。
- 请求参数封装对比
struts2.x使用ModelDriven模式,这样我们 直接 封装model对象,无需要继承任何struts2的基类,避免了侵入性。
- 标签的优势
标签库几乎可以完全替代JSTL的标签库,并且 struts2.x支持强大的ognl表达式。
总结:
一个比较优秀的框架可以帮着我们更高效,稳定的开发合格的产品,不过我们也不要依赖框架,我们只要知道了原理,理解了思想,我们就可以在这个基础上创造出属于我们自己的框架!让我们站在巨人身上,去发现,去创新。
这篇关于SSH框架——走进Struts2的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!