首页 > 代码库 > ssh框架构建项目详解--基本概念和struts2
ssh框架构建项目详解--基本概念和struts2
1.ssh是struts+spring+hibernate的继承框架,是目前比较流行的框架,但是已经不如ssm了.
2.集成ssh从职责上分为四层(类似于servlet+jsp+jdbc做项目的三层构架:视图,控制,业务....),分别是表示层,业务逻辑层,数据持久层,域模块层,这样分层可以让程序员短时间内构建一个结构清晰,复用性高,维护方便的web应用程序
a.使用struts作为系统的整体基础架构,负责mvc的分离(模型,视图,控制器),
b.在struts框架的模型部分,控制业务反转!
c.利用hibernate框架对持久层提供支持,
d.spring做管理,对hibernate和struts进行管理
3.基本思路
a.面对对象思维,根据需求提出一些模型,将这些模型实现为基本的java对象
b.编写基本的dao接口,采用hiberna架构来实现dao类(sessionfactory对jdbc进行封装..简化了数据访问层的编写)
c.spring作为总管家,对hibern和struts进行统筹管理
4.业务流程
a.在表示层中,通过jsp页面实现交互界面,负责接收请求和传送相应(request&response)
b.在struts配置文件中(struts-config.xml)将ActionServlet接收到的数据委派给相应的Action进行处理
c.在业务逻辑层中,管理服务组件的spring Ioc容器负责向Action提供业务模型(service),和该业务的数据处理组件(dao)共同完成业务逻辑,也就是自动注入...并且提供事务处理,缓冲池等组件提升系统性能和数据完整性
d.在持久层中(也就是执行增改查)则依赖于hibernate对象映射和数据库交互.处理dao请求的数据并返回结果
5.总结:采用ssh框架进行开发,实现了对mvc的分离,也实现了业务逻辑和持久层的分离,最终目的,就是不论前端如何变化,模型要改动的都很少.....总体而言提高了开发效率,提高了可维护性和复用性...
6.框架结构
1.struts,一般我们开发都使用maven构架,因此在pom.xml添加的依赖jar包..struts2的依赖jar如下;
commons和commons-io是 apache commons的jar包
ognl提供了OGNL表达式
struts2-core提供了struts2核心包
xwork-core是由于struts2很多事是基于webwork的,因此也需要这个jar包
依赖坐标可以去
http://mvnrepository.com/
查询和复制
我们提供三个jsp页面
这是login.jsp登录页面
<%@ page language="java" contentType="text/html; charset=GBK"
pageEncoding="GBK"%>
<%@taglib prefix="s" uri="/struts-tags"%>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=GBK">
<title><s:text name="loginPage"/></title>
</head>
<body>
<s:form action="login">
<s:textfield name="username" key="user"/>
<s:textfield name="password" key="pass"/>
<s:submit key="login"/>
</s:form>
</body>
</html>
这是登录成功的welcome.jsp页面
<%@ page language="java" contentType="text/html; charset=GBK" pageEncoding="GBK"%> <%@taglib prefix="s" uri="/struts-tags"%> <html> <head> <title><s:text name="succPage"/></title> <meta http-equiv="Content-Type" content="text/html; charset=GBK"> </head> <body> <s:text name="succTip"> <s:param>${sessionScope.user}</s:param> </s:text><br/> </body> </html>
这是登录失败的error.jsp页面
<%@ page language="java" contentType="text/html; charset=GBK" pageEncoding="GBK"%> <%@taglib prefix="s" uri="/struts-tags"%> <html> <head> <title><s:text name="errorPage"/></title> <meta http-equiv="Content-Type" content="text/html; charset=GBK"> </head> <body> <s:text name="failTip"/> </body> </html>
struts-config.xml配置如下(配置文件放在根目录下)
<struts>
6 <!-- 指定全局国际化资源文件 --> 7 <constant name="struts.custom.i18n.resources" value="http://www.mamicode.com/mess"/> 8 <!-- 指定国际化编码所使用的字符集 --> 9 <constant name="struts.i18n.encoding" value="http://www.mamicode.com/GBK"/> 10 <!-- 所有的Action定义都应该放在package下 --> 11 <package name="test" extends="struts-default"> 12 <action name="login" class="com.test.action.LoginAction"> 13 <result name="error">/error.jsp</result> 14 <result name="success">/welcome.jsp</result> 15 </action> 16 </package> 17 </struts>
所有的 action定义都应该放在package下,class后面是全路径名称,result是action返回的结果名称,和指定的页面
其constant配置常用配置如下
<constant name="struts.custom.i18n.resources" value="http://www.mamicode.com/mes"></constant>
<constant name="struts.multipart.parser" value="http://www.mamicode.com/jakarta"></constant>
<!-- 指定由spring负责action对象的创建 -->
<constant name="struts.objectFactory" value="http://www.mamicode.com/spring" />
<!-- 所有匹配*.action的请求都由struts2处理 -->
<constant name="struts.action.extension" value="http://www.mamicode.com/action,," />
<!-- 是否启用开发模式 -->
<constant name="struts.devMode" value="http://www.mamicode.com/true" />
<!-- struts配置文件改动后,是否重新加载 -->
<constant name="struts.configuration.xml.reload" value="http://www.mamicode.com/true" />
<!-- 设置浏览器是否缓存静态内容 -->
<constant name="struts.serve.static.browserCache" value="http://www.mamicode.com/false" />
<!-- 请求参数的编码方式 -->
<constant name="struts.i18n.encoding" value="http://www.mamicode.com/utf-8" />
<!-- 每次HTTP请求系统都重新加载资源文件,有助于开发 -->
<constant name="struts.i18n.reload" value="http://www.mamicode.com/true" />
<!-- 文件上传最大值 -->
<constant name="struts.multipart.maxSize" value="http://www.mamicode.com/104857600" />
<!-- 让struts2支持动态方法调用 -->
<constant name="struts.enable.DynamicMethodInvocation" value="http://www.mamicode.com/true" />
<!-- Action名称中是否还是用斜线 -->
<constant name="struts.enable.SlashesInActionNames" value="http://www.mamicode.com/false" />
<!-- 允许标签中使用表达式语法 -->
<constant name="struts.tag.altSyntax" value="http://www.mamicode.com/true" />
<!-- 对于WebLogic,Orion,OC4J此属性应该设置成true -->
<constant name="struts.dispatcher.parametersWorkaround" value="http://www.mamicode.com/false" />
下面是loginAction的代码
package com.test.action; 2 3 import com.opensymphony.xwork2.ActionContext; 4 import com.opensymphony.xwork2.ActionSupport; 5 6 public class LoginAction extends ActionSupport { 7 private String username;//从页面获取的参数名称 8 private String password; 9 //通国get/set方法获取页面请求数据,与页面名称要一致,如果是对象要写成 user.userName 10 public String getUsername() { 11 return username; 12 } 13 14 public void setUsername(String username) { 15 this.username = username; 16 } 17 18 public String getPassword() { 19 return password; 20 } 21 22 public void setPassword(String password) { 23 this.password = password; 24 } 25 //核心action方法,返回的是一个字符串,该字符创要和struts-config.xml配置中的action配置的result配置中的名称一致... 26 public String execute() throws Exception { 27 if (getUsername().equals("xingoo") && getPassword().equals("123")) { 28 ActionContext.getContext().getSession().put("user", getUsername()); 29 return SUCCESS; 30 }else{ 31 return ERROR; 32 } 33 } 34 }
ssh框架构建项目详解--基本概念和struts2