在咱们的开发中,有一个经典的框架,就是SSH,他们各自是:Struts,Spring,Hibernate,咱们队他们神交已久,在曾经的博客中我介绍了Hibernate,今天咱们也逐步揭开Struts的神奇面纱,一块儿来看看这个熟悉的老朋友!html
首先咱们仍是去维基百科上看看他的介绍:java
Struts是Apache软件基金会(ASF)赞助的一个开源项目。它最初是Jakarta项目中的一个子项目,并在2004年3月成为ASF的顶级项目。它经过採用JavaServlet/JSP技术,实现了基于Java EEWeb应用的Model-View-Controller(MVC)设计模式的应用框架,是MVC经典设计模式中的一个经典产品。web
不要被MVC吓住,咱们当即去看看他是什么?算法
MVC模式(Model-View-Controller)是软件project中的一种软件架构模式,把软件系统分为三个基本部分:模型(Model)、视图(View)和控制器(Controller)。数据库
MVC模式最先由Trygve Reenskaug在1978年提出[1] ,是施乐帕罗奥多研究中心(XeroxPARC)在20世纪80年代为程序语言Smalltalk发明的一种软件设计模式。MVC模式的目的是实现一种动态的程序设计,使兴许对程序的改动和扩展简化,并且使程序某一部分的反复利用成为可能。除此以外,此模式经过对复杂度的简化,使程序结构更加直观。软件系统经过对自身基本部分分离的同一时候也赋予了各个基本部分应有的功能。专业人员可以经过自身的专长分组:apache
(控制器Controller)- 负责转发请求,对请求进行处理。编程
(视图View) - 界面设计人员进行图形界面设计。设计模式
(模型Model) - 程序猿编敲代码应有的功能(实现算法等等)、数据库专家进行数据管理和数据库设计(可以实现详细的功能)。session
如下让咱们经过一个简单的样例认识他:架构
1.首先要下载struts的jar包,地址http://struts.apache.org/
2.解压后将lib目录里的jar包都增长到项目中
3.在webapps目录中解压struts-blank.war,将当中的struts-config.xml复制到项目中
4.配置web.xml部署ActionServlet。这个格式是相对固定的,因此通常复制就能够
<span style="font-size:18px;"><servlet> <servlet-name>action</servlet-name> <servlet-class>org.apache.struts.action.ActionServlet</servlet-class> <init-param> <param-name>config</param-name> <param-value>/WEB-INF/struts-config.xml</param-value> </init-param> <init-param> <param-name>debug</param-name> <param-value>2</param-value> </init-param> <init-param> <param-name>detail</param-name> <param-value>2</param-value> </init-param> <load-on-startup>2</load-on-startup> </servlet> <servlet-mapping> <servlet-name>action</servlet-name> <url-pattern>*.do</url-pattern> </servlet-mapping> </span>
5.配置struts-config.xml部署Action、ActionForm。当中type均为你项目中Action和ActionForm所在包的完整路径;name可以随便起,但是Action中的name必须与它用到的ActionForm的name相一致;再有就是action中要加入scope="request"这个属性,因为scope默认是session,这个可以依据实际状况本身定。
<span style="font-size:18px;"><struts-config> <form-beans> <form-bean name="loginForm" type="com.wang.struts.LoginActionForm"></form-bean> <!-- 可以有多个ActionForm --> </form-beans> <action-mappings> <action path="/login" type="com.wang.struts.LoginAction" name="loginForm" scope="request"> <forward name="success" path="/login_success.jsp"></forward> <forward name="error" path="/login_error.jsp"></forward> </action> <!-- 可以有多个Action --> </action-mappings> </struts-config> </span>
<span style="font-size:18px;">package com.action; import java.util.Map; import com.entity.User; import com.opensymphony.xwork2.ActionContext; import com.opensymphony.xwork2.ActionSupport; public class loginaction extends ActionSupport { private User user; public User getUser() { return user; } public void setUser(User user) { this.user = user; } @Override public String execute() throws Exception { if("admin".equals(user.getUserName()) && "admin".equals(user.getPassWord()) ){ //System.out.println("you are success!"); Map<String, Object> session = (Map)ActionContext.getContext().get("session"); session.put("userName", user.getUserName()); return "success"; }else{ //System.out.println("your user name is wrong !"); return "error"; } //System.out.println("hello!"); //return super.execute(); } } </span>
7.编写登录页面
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>SS2_Test_Login</title> </head> <body> <form action="login"> User login <hr/> User Name: <input name="user.userName" type="text"><br/> User PassWord: <input name="user.PassWord" type="text"> <input id="Btn_Login" type="submit" value="OK"> </form> </body> </html>
咱们看看他是怎么执行的:
这个详细的执行,咱们才刚刚接触,暂且以为,他就是一个三层的调用吧!
而这和MVC有什么关系呢?听听百科的解释:
MVC结构[编辑]
在Struts中,已经由一个名为ActionServlet的Servlet充当控制器(Controller)的角色,依据描写叙述模型、视图、控制器相应关系的struts-config.xml的配置文件,转发视图(View)的请求,组装响应数据模型(Model)。在MVC的模型(Model)部分,经常划分为两个主要子系统(系统的内部数据状态与改变数据状态的逻辑动做),这两个概念子系统分别详细相应Struts里的ActionForm与Action两个需要继承实现超类。在这里,Struts可以与各类标准的数据訪问技术结合在一块儿,包含EnterpriseJava Beans(EJB), JDBC与JNDI。在Struts的视图(View)端,除了使用标准的JavaServerPages(JSP)之外,还提供了大量的标签库使用,同一时候也可以与其它表现层组件技术(产品)进行整合,比方VelocityTemplates,XSLT等。经过应用Struts的框架,终于用户可以把大部分的关注点放在本身的业务逻辑(Action)与映射关系的配置文件(struts-config.xml)中。
写完了这个測试,咱们发现,Struts给咱们带来了很是大的方便,将后台处理和前台显示经过xml配置文件实现了本身主动适配,本身主动处理!给咱们的编程带来了很是大的优势,这样咱们写的后台处理和前台处理代码就会带来很是大的复用性!
而经过这个实例,咱们对框架的理解也更深入一点,框架是一种另外意义上的抽象,框架提供的是公共服务,他是种对横向上的抽象。经过这个样例,咱们也更理解面向对象的设计了!
每一种技术的学习,事实上都不难,那么难在哪呢?难在你以为他“高大上”了,事实上拨开所有技术的脸皮,不仍是ascii码的组合,面向对象技术,设计模式的应用吗?这么看来,这个世界,仍是简单的!