一、ssm框架搭建
1.1创建项目
新建项目后规划好各层的包。
1.2导入包
搭建SSM框架所需包百度云链接:http://pan.baidu.com/s/1cvKjL0
1.3整合spring与mybatis
调整spring与mybatis配置文件
1.4创建、编写配置文件:
myBatis-config.xml文件
<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-config.dtd"> <configuration> <!-- 通过别名简化对类的使用 <typeAliases> <typeAlias type="cn.itcast.entity.Dept" alias="Dept" /> </typeAliases> <mappers> <mapper resource="cn/itcast/entity/DeptMapper.xml" /> </mappers> --> </configuration>
applicationContext.xml
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:tx="http://www.springframework.org/schema/tx" xmlns:aop="http://www.springframework.org/schema/aop" xmlns:context="http://www.springframework.org/schema/context" xmlns:p="http://www.springframework.org/schema/p" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.2.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.2.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.2.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.2.xsd"> <!-- 配置数据源,记得去掉myBatis-config.xml的数据源相关配置 --> <bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource"> <property name="driverClass" value="com.mysql.jdbc.Driver" /> <property name="jdbcUrl" value="jdbc:mysql://localhost:3306/mybatis?useUnicode=true&characterEncoding=UTF-8" /> <property name="user" value="root" /> <property name="password" value="root" /> </bean> <!-- 配置session工厂 --> <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean"> <property name="dataSource" ref="dataSource" /> <property name="configLocation" value="classpath:myBatis-config.xml" /> </bean> <!-- 配置事务管理器,管理数据源事务处理--> <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager"> <property name="dataSource" ref="dataSource" /> </bean> <!-- 配置事务通知 --> <tx:advice id="advice" transaction-manager="transactionManager"> <tx:attributes> <!-- 默认只处理运行时异常,可加rollback-for="Exception/Throwable"等处理所有异常或包括错误 --> <tx:method name="insert*" propagation="REQUIRED" rollback-for="Exception"/> <tx:method name="update*" propagation="REQUIRED" rollback-for="Exception"/> <tx:method name="delete*" propagation="REQUIRED" rollback-for="Exception"/> <tx:method name="*" propagation="SUPPORTS"/> </tx:attributes> </tx:advice> <!-- 配置切面织入的范围,后边要把事务边界定在service层 --> <aop:config> <aop:advisor advice-ref="advice" pointcut="execution(* cn.itcast.scm.dao.impl.*.*(..))"/> </aop:config> <!-- 配置SessionTemplate,已封装了繁琐的数据操作--> <bean id="sqlSessionTemplate" class="org.mybatis.spring.SqlSessionTemplate"> <constructor-arg name="sqlSessionFactory" ref="sqlSessionFactory"/> </bean> <context:component-scan base-package="*"/> </beans>
1.5编写实体及sql映射文件
如没有建库表,先建库表,可参考如下sql:
drop database if exists mybatis; create database mybatis CHARACTER SET UTF8; use mybatis; create table dept( dept_id int primary key auto_increment, dept_name varchar(50), dept_address varchar(50) ); insert into dept(dept_name,dept_address) values('研发部一部','广州'); insert into dept(dept_name,dept_address) values('研发部二部','广州'); insert into dept(dept_name,dept_address) values('研发部三部','深圳'); select * from dept;
编写实体类
public class Dept implements Serializable { private Integer deptId; private String deptName; private String deptAddress; public Integer getDeptId() { return deptId; } public void setDeptId(Integer deptId) { this.deptId = deptId; } public String getDeptName() { return deptName; } public void setDeptName(String deptName) { this.deptName = deptName; } public String getDeptAddress() { return deptAddress; } public void setDeptAddress(String deptAddress) { this.deptAddress = deptAddress; } @Override public String toString() { return "Dept [deptId=" + deptId + ", deptName=" + deptName + ", deptAddress=" + deptAddress + "]"; } }
sql映射文件,并将相关信息映射到mybatis-config.xml文件。
<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <mapper namespace="cn.itcast.scm.entity.DeptMapper"> <resultMap type="Dept" id="deptResultMap"> <id property="deptId" column="dept_id" /> <result property="deptName" column="dept_name" /> <result property="deptAddress" column="dept_address" /> </resultMap> <!-- id和命名空间用来定位SQL语句,parameterType表示参数的类型,resultMap返回类型 --> <select id="selectDept" parameterType="Integer" resultMap="deptResultMap"> <!--参数的写法#{deptID} --> select * from dept where dept_id=#{deptID} </select> <insert id="insertDept" parameterType="Dept"> insert into dept(dept_name,dept_address) values(#{deptName},#{deptAddress}); </insert> </mapper>
myBatis-config.xml文件修改后为如下内容
<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-config.dtd"> <configuration> <!-- 通过别名简化对类的使用 --> <typeAliases> <typeAlias type="cn.itcast.scm.entity.Dept" alias="Dept" /> </typeAliases> <mappers> <mapper resource="cn/itcast/scm/entity/DeptMapper.xml" /> </mappers> </configuration>
1.6编写Dao接口及实现
DeptDaoImpl.java
@Repository("deptDao") public class DeptDaoImpl{ @Resource private SqlSessionTemplate sqlSessionTemplate; /** * 根据部门编号查询部门信息 * @param deptId 部门编号 * @return 部门信息 */ public Dept selectDept(Integer deptId){ Dept dept= sqlSessionTemplate.selectOne("cn.itcast.entity.DeptMapper.selectDept", deptId); return dept; } /** * 添加部门信息 * @param dept 部门信息 * @return 添加成功的记录数 */ public int insertDept(Dept dept){ System.out.println("------dao.dept:"+dept); return sqlSessionTemplate.insert("cn.itcast.entity.DeptMapper.insertDept", dept); } }
1.7测试spring与mybatis整合
public class TestDeptDao { //@Resource //这里没法使用,后继版本有其它方式可以注入 static private DeptDaoImpl deptDao; @BeforeClass public static void setUpBeforeClass() throws Exception { ApplicationContext context =new ClassPathXmlApplicationContext("applicationContext.xml"); deptDao=(DeptDaoImpl) context.getBean("deptDao"); } @AfterClass public static void tearDownAfterClass() throws Exception { } @Test public void testSelectDept() { System.out.println(deptDao.selectDept(1)); } @Test public void testInsertDept() { Dept dept=new Dept(); //dept.setDeptId(117); dept.setDeptName("name117"); dept.setDeptAddress("address117"); System.out.println("受影响行数:"+deptDao.insertDept(dept)); } }
1.8整合springmvc
修改web.xml文件,加入springmvc相关信息,编写 控制器类及相关jsp 文件
spring-mvc.xml
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:mvc="http://www.springframework.org/schema/mvc" xmlns:context="http://www.springframework.org/schema/context" xmlns:p="http://www.springframework.org/schema/p" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.2.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.2.xsd http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-3.2.xsd "> <mvc:annotation-driven></mvc:annotation-driven> <context:component-scan base-package="*"/> </beans>
web.xml文件配置
<?xml version="1.0" encoding="UTF-8"?> <web-app version="3.0" 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_3_0.xsd"> <display-name></display-name> <welcome-file-list> <welcome-file>index.jsp</welcome-file> </welcome-file-list> <listener> <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> </listener> <context-param> <param-name>contextConfigLocation</param-name> <param-value>classpath:applicationContext.xml</param-value> </context-param> <servlet> <servlet-name>mvc</servlet-name> <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> <init-param> <param-name>contextConfigLocation</param-name> <param-value>classpath:spring-mvc.xml</param-value> </init-param> <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <servlet-name>mvc</servlet-name> <url-pattern>*.action</url-pattern> </servlet-mapping> <filter> <filter-name>encodingFilter</filter-name> <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class> <init-param> <param-name>encoding</param-name> <param-value>UTF-8</param-value> </init-param> </filter> <filter-mapping> <filter-name>encodingFilter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> </web-app>
编写控制器类
@Controller @RequestMapping(value="/dept") public class DeptAction { @Resource private DeptDaoImpl deptDao; @RequestMapping(value="/insert") public String insert(Dept dept){ System.out.println("---action.dept:"+dept); deptDao.insertDept(dept); return "forward:/jsp/main.jsp"; } }
缩写跳转页面
/jsp/main.jsp
<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%> <html> <head> </head> <body> this is main jsp </body> </html>
1.9测试ssm整合
缩写测试页面
index.jsp
<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%> <html> <head> </head> <body> <form action="dept/insert.action" method="post"> 名称:<input type="text" name="deptName"><br> 地址:<input type="text" name="deptAddress"><br> <input type="submit" value="ok"> </form> </body> </html>
二、ssm框架优化
2.1中文乱码
中文乱码处理,在web.xml中配置拦截器(参考前面)
<filter> <filter-name>encodingFilter</filter-name> <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class> <init-param> <param-name>encoding</param-name> <param-value>UTF-8</param-value> </init-param> </filter> <filter-mapping> <filter-name>encodingFilter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping>
2.2添加业务层
1).添加业务层相关包、接口及实现
接口包:cn.itcast.service
实现类包:cn.itcast.service.impl
编写接口与实现类(实现类用@Service进行注解,dao接口结合下边的配置,通过@Autowired方式注入代理实例),略。
2.3添加dao层接口
2.4修改applicationContext.xml与spring-mvc.xml文件
添加如下内容:
<!-- 把事务边界定在service层 --> <aop:config> <aop:advisor advice-ref="advice" pointcut="execution(* cn.itcast.scm.service.impl.*.*(..))"/> </aop:config> <!-- 自动扫描组件,要把controller去除,他们是在spring-mvc.xml中配置,如果不去除会影响事务管理。 --> <context:component-scan base-package="cn.itcast"> <context:exclude-filter type="annotation" expression="org.springframework.stereotype.Controller" /> </context:component-scan> <!-- 配置 转换器,对于在basePackage设置的包(包括子包)下的接口类,如果在Mapper.xml文件中定义过, 将被转换成spring的BEAN,在调用 的地方通过@Autowired方式将可以注入接口实例--> <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer"> <property name="sqlSessionFactory" ref="sqlSessionFactory"/> <property name="basePackage" value="cn.itcast.scm.dao"/> </bean>
spring-mvc.xml
<!-- 扫描所有的controller 但是不扫描service --> <context:component-scan base-package="cn.itcast"> <context:include-filter type="annotation" expression="org.springframework.stereotype.Controller" /> <context:exclude-filter type="annotation" expression="org.springframework.stereotype.Service" /> </context:component-scan>
2.5修改各层的调用
控制器类通过业务层接口调用业务层,业务层再通过dao接口(可删除dao实现类,及测试类)获取代理对象执行相关SQL,进行数据的操作
三、开发环境与插件
3.1软件、框架版本约定
编号 |
工具 |
版本 |
说明 |
MyBatis |
3.2 |
实现持久化操作 |
|
Spring |
3.2 |
用于分层解藕 |
|
Junit |
4.0 |
单元测试 |
|
JQuery |
2.0 (支持IE 10 和以上的版本) |
实现ajax各种特效和插件 |
|
EasyUI |
1.3.5 |
基于jQuery的用户界面插件 |
|
SVN |
1.6 |
开发版本控制软件 |
|
sitemesh |
2.4.2 |
网页布局和修饰的框架 |
|
Ztree |
3.5.26 |
树状数据的web显示 |
3.2开发环境
操作系统 |
Windows 7 |
|
开发工具 |
myEclipse 10 |
|
数据库 |
mysql-5.5 |
|
Web容器 |
Tomcat 7 / Tomcat6 |
|
JDK |
JDK 1.6+ J2EE 6.0 + Tomcat 7.0 (开发环境与部署环境相同) JDK 1.5 + J2EE 5.0 + Tomcat 6.0 (开发环境与部署环境相同) |
3.3 SVN介绍
1: CVS: 版本控制器鼻祖 2: SVN集中式版本控制器 3: git分布式版本控制器
2: svn安装工具
3: 创建仓库: svnadmin create "e:\testdir\student_svn"
3.1: 通过客户端选定要提交的文件夹import 信息提交到仓库(仓库URLsvn://localhost:3690)的时候会出现: "目标积极拒绝,无法连接" 说明服务是没有启动
3.2: 启动服务: svnserve -d -r e:\testdir\student_svn 上传项目的时候会提示: 认证失败,这是由于没有设置用户名与密码
3.3: 修改E:\testdir\student_svn\conf目录下的svnserve.conf及pwsswd文件,svnserve.conf文件中开启密码(去掉前面的注释包括空格): password-db = passwd,pwsswd文件添加用户名及密码格式:用户名=密码
3.4: 通过dos命令创建的服务,命令行窗口是不能够关闭的(关闭窗口,服务也关闭), -d 此参数是仅仅在Linux下面有效的
4: import: 第一次提交,对于同一个项目import只能使用一次,以后都是在原来版本下 commit
5: checkout: 从仓库中下载指定的版本,默认下载是最新版 (在下载的项目中有隐藏 "svn"文件夹)此文件夹中记录服务器相关信息
6: export: 从仓库中下载指定的版本,默认下载是最新版,但是下载完毕之后与SVN仓库没有任何联系,以后也不能进行版本的更新
7:update: 可以更新仓库中新版本,默认是最新版
8: revert: 可以指定某些文件还原到下载的初始版本
9:commit: 本地的工作副本提交到仓库中
10: 在myEclipse中配置svn插件 svn.link 文件中配置: path=soft\\svn,启动myelcipse即可使用SVN功能
插件安装与使用参考:
1)解压zip文件
2)把features,pougins文件夹copy到C:\Users\chufeng\MyEclipse\MyEclipse 10\soft\svn目录下(C:\Users\chufeng\MyEclipse\MyEclipse 10\为myeclipse安装目录, soft/svn可以自己创建)
3)进入C:\Users\chufeng\MyEclipse\MyEclipse 10\dropins目录,并新建svn.link文件,添加内容:path=soft\svn
4)启动myeclipse
5)选择myeclipse的“file"-->import-->svn-->从svn中检出-->检出时,需要填写URL地址,URL为:svn://IP地址[:端口号],使用默认的端口时可以不用写端口
3.4简化实体别名及mapper.xml文件配置
修改applicationContext.xml
<!-- 配置session工厂 --> <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean"> <property name="dataSource" ref="dataSource" /> <property name="configLocation" value="classpath:myBatis-config.xml" /> <!--配置扫描式加载SQL映射文件,记得去掉mybatis-config配置--> <property name="mapperLocations" value="classpath:cn/itcast/scm/dao/*.xml"/> </bean>
mybatis-config.xml添加支持基于包的别名扫描
<!-- 通过别名简化对类的使用 --> <typeAliases> <!-- <typeAlias type="cn.itcast.scm.entity.Dept" alias="Dept" /> --> <!-- 通过package, 可以直接指定package的名字, mybatis会自动扫描你指定包下面的javabean, 并且默认设置一个别名,默认的名字为: javabean 的首字母小写的非限定类名来作为它的别名。 --> <package name="cn.itcast.scm.entity"/> </typeAliases>
3.5 mybatis逆向工程代码生成器(插件)
--安装插件:
1。解压mybatis_generator_1.3.1.zip文件
2。把features,pougins文件夹copy到C:\Users\chufeng\MyEclipse\MyEclipse 10\soft\mybatis目录下(C:\Users\chufeng\MyEclipse\MyEclipse 10\为myeclipse安装目录, soft\mybaits可以自己创建)
3。进入C:\Users\chufeng\MyEclipse\MyEclipse 10\dropins目录,并新建mybatis.link文件,添加内容:path=C:\\Users\\chufeng\\MyEclipse\\MyEclipse 10\\soft\\mybatis
4。启动myeclipse
--使用插件
5。项目中添加generatorConfig.xml文件,并修改相关内容。右建可以找到generator mybatis artifacts生成
mybatis逆向工程代码生成器(插件)百度云链接: http://pan.baidu.com/s/1hr6NefE
generatorConfig.xml文件内容:
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE generatorConfiguration PUBLIC "-//mybatis.org//DTD MyBatis Generator Configuration 1.0//EN" "http://mybatis.org/dtd/mybatis-generator-config_1_0.dtd"> <generatorConfiguration> <!-- 处理1 --> <classPathEntry location="E:\tools\lib\mysql_driver\mysql-connector-java-5.1.26-bin.jar"/> <!-- 指定运行环境是mybatis3的版本 --> <context id="testTables" targetRuntime="MyBatis3"> <commentGenerator> <!-- 是否取消注释 --> <property name="suppressAllComments" value="true" /> <!-- 是否生成注释代时间戳 --> <property name="suppressDate" value="true" /> </commentGenerator> <!-- 处理2 jdbc 连接信息 --> <jdbcConnection driverClass="com.mysql.jdbc.Driver" connectionURL="jdbc:mysql://localhost:3306/scm?useUnicode=true&characterEncoding=UTF-8" userId="root" password="root"> </jdbcConnection> <!--处理3 targetPackage指定模型在生成在哪个包 ,targetProject指定项目的src,--> <javaModelGenerator targetPackage="cn.itcast.scm.entity" targetProject="scm/src"> <!-- 去除字段前后空格 --> <property name="trimStrings" value="true" /> </javaModelGenerator> <!-- 处理4 配置SQL映射文件生成信息 --> <sqlMapGenerator targetPackage="cn.itcast.scm.dao" targetProject="scm/src" /> <!--处理5 配置dao接口生成信息--> <javaClientGenerator type="XMLMAPPER" targetPackage="cn.itcast.scm.dao" targetProject="scm/src" /> <!--处理6 指定表及实体类的映射--> <table tableName="account" domainObjectName="Account" enableSelectByExample="true" enableDeleteByExample="true" enableCountByExample="true" enableUpdateByExample="true" enableInsert="true" /> <table tableName="supplier" domainObjectName="Supplier" enableSelectByExample="true" enableDeleteByExample="true" enableCountByExample="true" enableUpdateByExample="true" enableInsert="true" /> </context> </generatorConfiguration>
注意:
1.完成后记得把实体实现Serializable,重写一下toString()方法,方便以后使用。
2.当重新使用generatorConfig.xml生成代码时,会在已经存在的数据库后面继续追加代码而非覆盖导致出现大量的重复代码,一个聪明的办法是生成前先注释掉已经生成好的数据库。
3.6 jquery与easyUI技术整合
jquery-easyui-1.3.5版本,解压后文件夹直接copy到项目webroot虚拟目录下,文件夹说明:
demo:可以查阅例子,在项目中可以删除
local:本地化资源,一般保留本地化文件
plugins:部署用,
src:源码,分析用,可以删除
thems:样式、图标等信息
导入easyUI相关的文件
编写测试页面easyUI.jsp:
<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%> <%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <c:set var="proPath" value="${pageContext.request.contextPath}" /> <link rel="stylesheet" type="text/css" href="${proPath}/jquery-easyui-1.3.5/themes/default/easyui.css"> <link rel="stylesheet" type="text/css" href="${proPath}/jquery-easyui-1.3.5/themes/icon.css"> <script type="text/javascript" src="${proPath}/jquery-easyui-1.3.5/jquery.min.js"></script> <script type="text/javascript" src="${proPath}/jquery-easyui-1.3.5/jquery.easyui.min.js"></script> <title>My JSP 'MyJsp.jsp' starting page</title> <meta http-equiv="pragma" content="no-cache"> <meta http-equiv="cache-control" content="no-cache"> <meta http-equiv="expires" content="0"> <meta http-equiv="keywords" content="keyword1,keyword2,keyword3"> <meta http-equiv="description" content="This is my page"> <!-- <link rel="stylesheet" type="text/css" href="styles.css"> --> <script type="text/javascript"> $(function(){alert("可以使用了!");}); </script> </head> <body> <div id="p" class="easyui-panel" style="width:500px;height:200px;padding:10px;" title="My Panel" iconCls="icon-save" collapsible="true"> test my panel </div> </body> </html>
浏览器输入地址访问,并观察是否正常!
注意:
1.jquery.min.js 报错(有红点的问题):解决方式为选中 :项目文件夹 -> 鼠标右键 -> MyEclipse -> manage validation -> 左面点击 -> Excluded resources -> 找到jquery.min.js -> 打上钩 -> apply
2.浏览器:建议使用IE10或以上版本、火狐
3.7 json使用
导入包
spring-mvc.xml配置支持JSON注解
<mvc:annotation-driven></mvc:annotation-driven>
action中添加支持json交互方法:
@RequestMapping("/doAjax") @ResponseBody //如果返回json格式,需要这个注解,这里用来测试环境 public Object doAjax(Supplier supplier){ System.out.println("---doAjax.supplier:"+supplier); supplier.setSupName("supName1"); return supplier; }
编写测试页面:json.jsp
<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%> <%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <c:set var="proPath" value="${pageContext.request.contextPath}" /> <link rel="stylesheet" type="text/css" href="${proPath}/jquery-easyui-1.3.5/themes/default/easyui.css"> <link rel="stylesheet" type="text/css" href="${proPath}/jquery-easyui-1.3.5/themes/icon.css"> <script type="text/javascript" src="${proPath}/jquery-easyui-1.3.5/jquery.min.js"></script> <script type="text/javascript" src="${proPath}/jquery-easyui-1.3.5/jquery.easyui.min.js"></script> <title>My JSP 'json.jsp' starting page</title> <script type="text/javascript"> $( function(){ $("#bt1").click( function(){ $.post( "supplier/doAjax.action", {supId:1001,supName:"name1001"}, function(json){alert(json.supId+"||"+json.supName);}, "json" ); } ); } ); </script> </head> <body> <button id="bt1" >testJson</button> </body> </html>
四、Java Web框架对比:SSH和SSM
4.1 SSH:Spring+Struts2+Hibernate SSM:Spring+SpringMVC+MyBaitis
两个框架都是IoC容器+MVC框架+ORM框架。IoC的意思是控制反转,意思是把创建和查找依赖对象的控制权交给容器而不是自己实例化对象;MVC框架采用MVC分层,模型层处理数据逻辑,通常是模型对象在数据库存取数据,视图层处理数据显示,控制器层处理用户交互,通常从视图读取数据,控制用户输入,并向模型发送数据;ORM框架即对象-关系映射模型,在数据库表和持久化对象间进行映射,这样在操作数据库时只需要对对象操作。
4.2 Spring
在IoC容器方面,SSH和SSM都是使用Spring。Spring是轻量级的IoC和AOP容器。IoC容器是Spring的核心,负责创建对象,管理对象,装配对象,配置对象,并且管理这些对象的整个生命周期。管理对象动态向某个对象提供其他对象,通过依赖注入来实现,Spring有三种注入方式:接口注入、Set注入和构造注入。Spring AOP即面向切面编程,可以用在日志和事务管理等方面。
4.3 Struts2与SpringMVC
MVC整合框架两者分别使用的是Struts2和SpringMVC。两者的区别:1.Struts2是类级别的拦截, 一个类对应一个request上下文,SpringMVC是方法级别的拦截,一个方法对应一个request上下文,因此容易实现restful API;2.Struts2是多例的,每次请求都创建一个Action,类属性被方法共享,而SpringMVC是单例的,只有一个实例,方法之间变量不共享;3.Struts2的核心控制器是Filter,SpringMVC的核心控制器是Servlet;4.拦截器方面,Struts2有自己的interceptor机制,SpringMVC用的是独立的AOP方式;5.SpringMVC是Spring的一个模块,项目管理和安全性比Struts2好,配置文件少,并且集成了Ajax,处理ajax请求,直接通过返回数据,方法中使用注解@ResponseBody,能自动将对象转换为JSON数据。
4.4 Hibernate与MyBaitis
ORM框架分别用的是Hibernate和MyBaitis。MyBatis的sql语句是手动编写的,可以进行更为细致的SQL优化,可以减少查询字段,具有高度灵活,可优化,易维护的特点。但需要维护SQL和结果映射,工作量大。Hibernate面向对象查询,以对象化的思维操作数据库,hql与具体的数据库无关,移植性更好。Hibernate无需编写SQL,映射的规则也可以由IDE生成,提高了开发效率,还提供了缓存、日志、级联等强大功能。但是对于多表关联复杂SQL、数据系统权限限制、根据条件编写SQL、存储过程等十分不便,性能难以通过SQL优化。