现在主流的Web MVC框架除了Struts这个主力 外,其次就是Spring MVC了,因此这也是作为一名程序员需要掌握的主流框架,框架选择多了,应对多变的需求和业务时,可实行的方案自然就多了。不过要想灵活运用Spring MVC来应对大多数的Web开发,就必须要掌握它的配置及原理。

一、下载spring源包
spring地址:http://www.springsource.org/download
我下的是spring-framework-3.1.0.RELEASE-with-docs.zip
下载依赖包:spring-framework-3.0.5.RELEASE-dependencies.zip
注意官网上3.0.3版本以后同版本依赖包不提供下载

二、导入所需jar包
引入dist目录下除了下面三个其余所有包
org.springframework.web.struts-3.1.0.RELEASE.jar
org.springframework.spring-library-3.1.0.RELEASE.libd
org.springframework.web.portlet-3.1.0.RELEASE.jar
引入依赖包下com.springsource.org.apache.commons.logging-1.1.1.jar及com.springsource.org.aopalliance-1.0.0.jar

三、spring框架配置

1、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"><!--配置Sring MVC的核心控制器DispatcherServlet --><servlet><servlet-name>dispatcherServlet</servlet-name><servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class><init-param>  <param-name>contextConfigLocation</param-name>  <param-value>classpath*:/spring-*.xml</param-value>  </init-param>  <load-on-startup>1</load-on-startup></servlet><!-- 为DispatcherServlet建立映射 --><servlet-mapping><servlet-name>dispatcherServlet</servlet-name><url-pattern>*.html</url-pattern></servlet-mapping><context-param> <param-name>log4jConfigLocation</param-name> <param-value>classpath:/log4j.properties</param-value> </context-param> <!-- 配置log4j.xml监听器 --> <listener> <listener-class>org.springframework.web.util.Log4jConfigListener</listener-class> </listener> <!-- 解决工程编码过滤器 -->  <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><display-name></display-name> <welcome-file-list><welcome-file>index.jsp</welcome-file></welcome-file-list>
</web-app>

2、应用上下文配置

spring-servlet.xml即配置用于开启基于注解的springMVC功能,照web.xml中设定,路径为WEB-INF下

写道
<?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:p="http://www.springframework.org/schema/p"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd">

<!-- 加载config.properties 文件-->
<bean id="propertyConfigurer"
class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
<property name="location">
<value>classpath:config.properties</value>
</property>
</bean>

<bean class="org.springframework.web.servlet.view.UrlBasedViewResolver">
<property name="viewClass" value="org.springframework.web.servlet.view.JstlView"/>
<property name="prefix" value="/jsp/" />
<property name="suffix" value=".jsp" />
</bean>

<!-- 配置数据源
<bean id="userDao" class="com.examp.dao.UserDao">
<property name="dataSource" ref="dataSource"/>
</bean>-->

<!-- 配置数据源 -->
<bean id="userDao" class="com.examp.dao.impl.UserDaoImpl">
<property name="sqlMapClient" ref="sqlMapClient"></property>
</bean>

<!-- 配置spring 加载sqlmap文件-->
<bean id="sqlMapClient" class="org.springframework.orm.ibatis.SqlMapClientFactoryBean">
<property name="configLocation">
<value>classpath:/sqlmap-config.xml</value>
</property>
<property name="dataSource" ref="dataSource"/>
</bean>

<!-- 定义视图 -->
<bean id="viewResolver"
class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="viewClass">
<value>org.springframework.web.servlet.view.InternalResourceView</value>
</property>
</bean>

<!-- 定义事务管理器 -->
<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="dataSource"/>
</bean>

<bean id="baseTransactionProxy"
class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean"
abstract="true">
<property name="transactionManager">
<ref bean="transactionManager" />
</property>
<property name="transactionAttributes">
<props>
<prop key="add*">PROPAGATION_REQUIRED</prop>
<prop key="update*">PROPAGATION_REQUIRED</prop>
<prop key="delete*">PROPAGATION_REQUIRED</prop>
<prop key="insertOrUpdate*">PROPAGATION_REQUIRED</prop>
<prop key="find*">PROPAGATION_REQUIRED,readOnly</prop>
<prop key="get*">PROPAGATION_REQUIRED,readOnly</prop>
<prop key="*">PROPAGATION_REQUIRED</prop>
</props>
</property>
</bean>
</beans>

3、数据源连接配制 spring-data.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:p="http://www.springframework.org/schema/p"  xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd"><!-- 连接数据库配置 -->  <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource">  <property name="driverClassName">  <value>${db.dirverClass}</value>  </property>  <property name="url">  <value>${db.url}</value>  </property>  <property name="username">  <value>${db.username}</value>  </property>  <property name="password">  <value>${db.password}</value>  </property>  </bean>
</beans>

4、业务逻辑控制层配置 spring-action.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:p="http://www.springframework.org/schema/p"  xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd"><!-- 定义映射 --><bean id="urlMapping" class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping"><property name="mappings"><props><prop key="helloWorld.html">helloWorldAction</prop><prop key="userAction.html">userAction</prop></props></property></bean><!-- 定义控制器 --><bean id="helloWorldAction" class="com.examp.ch23.HelloWorldAction"><property name="helloWorld"><value>${helloWorld}</value></property><property name="helloWorld1"><value>${name}</value></property><property name="viewPage"><value>${toUrl}</value></property></bean><!-- 根据请求参数决定方法 userAction.html?action=toDetail -->  <bean id="userAction" class="com.examp.ch23.UserAction"><property name="userDao" ref="userDao"></property><!-- <property name="dao" ref="userDao"></property> --><property name="methodNameResolver">  <bean class="org.springframework.web.servlet.mvc.multiaction.ParameterMethodNameResolver">  <!-- 指定参数名为action -->  <property name="paramName" value="action" />  </bean>  </property></bean>
</beans>

5、编写DAO接口层

package com.examp.dao;import java.util.List;import com.examp.po.UserPO;/*** @author Administrator**/
public interface IUserDao {public List<UserPO> getAllUsers();public UserPO getUserByID(UserPO user);public void addUser(UserPO user);
}
package com.examp.dao.impl;import java.util.List;import org.springframework.orm.ibatis.support.SqlMapClientDaoSupport;import com.examp.dao.IUserDao;
import com.examp.po.UserPO;public class UserDaoImpl extends SqlMapClientDaoSupport implements IUserDao{public List<UserPO> getAllUsers() {return this.getSqlMapClientTemplate().queryForList("user.GET-ALL-USER");}public UserPO getUserByID(UserPO user) {return (UserPO) this.getSqlMapClientTemplate().queryForObject("user.GET-USER-BY-ID",user);}public void addUser(UserPO user) {//this.getSqlMapClientTemplate().insert("user.ADD-USER", user);}
}

6、编写业务实体类PO UserPO.java

package com.examp.po;import java.io.Serializable;public class UserPO implements Serializable {private String id;private String name;private String password;private int type;private String email;private String phone;private int sex;private String qq;public String getId() {return id;}public void setId(String id) {this.id = id;}public String getName() {return name;}public void setName(String name) {this.name = name;}public String getPassword() {return password;}public void setPassword(String password) {this.password = password;}public int getType() {return type;}public void setType(int type) {this.type = type;}public String getEmail() {return email;}public void setEmail(String email) {this.email = email;}public String getPhone() {return phone;}public void setPhone(String phone) {this.phone = phone;}public int getSex() {return sex;}public void setSex(int sex) {this.sex = sex;}public String getQq() {return qq;}public void setQq(String qq) {this.qq = qq;}
}

7、编写控制层 Action

package com.examp.ch23;import java.util.HashMap;
import java.util.List;
import java.util.Map;import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;import net.sf.json.JSONObject;import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.mvc.multiaction.MultiActionController;
import org.springframework.web.util.WebUtils;import com.examp.dao.IUserDao;
import com.examp.dao.UserDao;
import com.examp.po.UserPO;//public class UserAction implements Controller{
public class UserAction extends MultiActionController{private static final Log logger = LogFactory.getLog(UserAction.class);  private UserDao dao; private IUserDao userDao;private UserPO userPO;private String name;public String getName() {return name;}public void setName(String name) {this.name = name;}public ModelAndView list(HttpServletRequest request,HttpServletResponse response) throws Exception {logger.info("UserAction list 方法...");Map<String,Object> model = new HashMap<String,Object>();/*Collection<UserPO> list = dao.doquery();List<UserPO> users = new ArrayList<UserPO>();for (UserPO userPO : list) {  UserPO user = new UserPO();  user.setId(userPO.getId());  user.setName(userPO.getName());  user.setSex(userPO.getSex());user.setEmail(userPO.getEmail());  users.add(user);  } */ List<UserPO> result = userDao.getAllUsers();model.put("list", result);return new ModelAndView("userList",model);}public ModelAndView detail(HttpServletRequest req,HttpServletResponse res) throws Exception{String id = req.getParameter("id");UserPO userPO = null;if(userPO == null){userPO = new UserPO();}userPO.setId(id);Map<String,Object> model = new HashMap<String,Object>();userPO = userDao.getUserByID(userPO);model.put("user", userPO);return new ModelAndView("userDetail",model);}/*** 通向新增用户页面* @param req* @param res* @return* @throws Exception*/public ModelAndView toAddUser(HttpServletRequest req,HttpServletResponse res) throws Exception{Map<String,Object> model = new HashMap<String,Object>();return new ModelAndView("addUser",model);    }/*** 新增用户* @param req* @param res* @return* @throws Exception*//*public void addUser(HttpServletRequest req,HttpServletResponse res) throws Exception{String name = WebUtils.findParameterValue(req, "name");String email = WebUtils.findParameterValue(req, "email");String msg = "";logger.info("用户名: "+ name + "   邮件: " + email);if(userPO == null){userPO = new UserPO();userPO.setName(name);userPO.setEmail(email);}Map<String,Object> model = new HashMap<String,Object>();//userDao.addUser(userPO);msg = "1";//text 格式res.getWriter().print(msg);}**/public void addUser(HttpServletRequest req,HttpServletResponse res) throws Exception{String name = WebUtils.findParameterValue(req, "name");String email = WebUtils.findParameterValue(req, "email");String json = "",msg = "成功";logger.info("用户名: "+ name + "   邮件: " + email);if(userPO == null){userPO = new UserPO();}//json格式/*json = "{\"success\":true,\"msg\":\"1\"}";res.getWriter().print(json);*/Map<String, Object> map = new HashMap<String,Object>();map.put("status", msg);JSONObject result = JSONObject.fromObject(map);res.setContentType("text/html;charset=utf-8");res.getWriter().print(result.toString());}public UserDao getDao() {return dao;}public void setDao(UserDao dao) {this.dao = dao;}public IUserDao getUserDao() {return userDao;}public void setUserDao(IUserDao userDao) {this.userDao = userDao;}public UserPO getUserPO() {return userPO;}public void setUserPO(UserPO userPO) {this.userPO = userPO;}
}
8、编写持久层 sqlmap
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE sqlMapConfig PUBLIC "-//iBATIS.com//DTD SQL Map Config 2.0//EN" "http://ibatis.apache.org/dtd/sql-map-config-2.dtd">
<sqlMapConfig><settings cacheModelsEnabled="true" errorTracingEnabled="true"enhancementEnabled="true" lazyLoadingEnabled="true" useStatementNamespaces="true"statementCachingEnabled="true"/><sqlMap resource="sqlmap/sqlmap-t_user.xml"/>
</sqlMapConfig>
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE sqlMap PUBLIC "-//iBATIS.com//DTD SQL Map 2.0//EN" "http://ibatis.apache.org/dtd/sql-map-2.dtd"><sqlMap namespace="user"><typeAlias alias="userPO" type="com.examp.po.UserPO" /><resultMap class="userPO" id="user"><result property="id" column="id" /><result property="name" column="name" /><result property="email" column="email" /><result property="sex" column="sex" /></resultMap><select id="GET-ALL-USER" parameterClass="string" resultClass="userPO"><![CDATA[ SELECT T.ID,T.NAME,T.EMAIL,T.SEX FROM T_USER T]]></select><select id="GET-USER-BY-ID" parameterClass="userPO" resultClass="userPO"><![CDATA[ SELECT T.ID,T.NAME,T.EMAIL,T.SEX FROM T_USER TWHERE 1=1]]><isNotNull property="id" prepend="AND"><![CDATA[id = #id#]]></isNotNull></select><!-- <insert id="ADD-USER" parameterClass="userPO"><![CDATA[INSERT INTO t_user(id,name,password,nick_name,type,email,phone,sex,real_name,idno,head_portrait,province,city,is_auth,is_bound_phone,is_protected,bound_phone,reg_time,status,login_time,is_del,qq,birthday,office_tel,office_adr,office_zip,home_adr,home_zip,remark,operator,opt_time,regist_type,verify_status,auth_url_up,payment_pas,auth_url_dw,corporate_name,organization_code,rand_no,relate_sale_id,relate_service_id,reg_source,law_person,law_personnum,loan_comp_type,ip,class)VALUES(#id#,#name#,#password#,#nickName#,#type#,#email#,#phone#,#sex#,#realName#,#idNo#,#headPortrait#,#province#,#city#,#isAuth#,#isBoundPhone#,#isProtected#,#boundPhone#,#regTime#,#status#,#loginTime#,#isDel#,#qq#,#birthday#,#officeTel#,#officeAdr#,#officeZip#,#homeAdr#,#homeZip#,#remark#,#operator#,#optTime#,#registType#,#verifyStatus#,#authUrlUp#,#paymentPas#,#authUrlDw#,#corporateName#,#organizationCode#,#randNo#,#relateSaleId#,#relateServiceId#,#regSource#,#lawPerson#,#lawPersonnum#,#loanCompType#,#ip#,#userClass#)]]></insert> -->
</sqlMap>

9、编写JSP页面

<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<%@page import="com.examp.po.*" %>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html><head><base href="<%=basePath%>"><title>用户列表</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"></head>
<%
String str = (String)request.getAttribute("helloWorld");
//List list = (List)request.getAttribute("list");
%><body><table><tr><td colspan="4" align="center"><a href="/ch23/userAction.html?action=toAddUser">添加用户</a></td></tr><tr><td>用户ID</td><td>用户名</td><td>性别</td><td>邮件</td></tr><c:forEach var="user" items="${list}"><tr><td><a href="/ch23/userAction.html?action=detail&id=${user.id}">${user.id}</a></td><td>${user.name}</td><td><c:if test="${user.sex == 0}">保密</c:if><c:if test="${user.sex == 1}">男</c:if><c:if test="${user.sex == 2}">女</c:if></td><td>${user.email}</td></tr></c:forEach></table></body>
</html>

spring mvc + ibatis + Oracle + ajax 轻量级架构搭建及详解相关推荐

  1. Spring MVC学习总结(8)——Swagger入门详解

    前言 Swagger 是一款RESTFUL接口的文档在线自动生成+功能测试功能软件.本文简单介绍了在项目中集成swagger的方法和一些常见问题.如果想深入分析项目源码,了解更多内容,见参考资料. S ...

  2. mvc 一般注释_使用带有注释和JQuery的Spring MVC 3的Ajax

    mvc 一般注释 与Ajax一起工作对我来说一直很有趣! 是不是 ? 我将使您轻松将Ajax与Spring MVC 3和JQuery结合使用. 这篇文章将向您说明如何在工业编码的现实生活中使用Ajax ...

  3. 使用带有注释和JQuery的Spring MVC 3的Ajax

    与Ajax一起工作对我来说一直很有趣! 是不是 ? 我将使您轻松将Ajax与Spring MVC 3和JQuery结合使用. 这篇文章将向您说明如何在工业编码的现实生活中使用Ajax. 和往常一样,我 ...

  4. Windows 网络服务架构系列课程详解(一) ----DHCP服务器的搭建与配置

    Windows 网络服务架构系列课程详解(一) ---------DHCP服务器的搭建与配置   实验背景: 企业网络环境中在没有配置DHCP服务器时,经常会遇到这样的情况,用户不懂怎么去配置IP地址 ...

  5. Spring MVC学习(8)—HandlerInterceptor处理器拦截器机制全解

    基于最新Spring 5.x,详细介绍了Spring MVC的HandlerInterceptor处理器拦截器机制,以及它的一系列拦截方法. 本次我们来学习Sring MVC的HandlerInter ...

  6. 2015年系统架构师考试题详解

    原文地址为: 2015年系统架构师考试题详解 考试科目一:综合知识 某航空公司机票销售系统有n个售票点,该系统为每个售票点创建一个进程Pi(i=1,2,-,n)管理机票销售.假设Tj(j=1,2,-, ...

  7. [转]大数据环境搭建步骤详解(Hadoop,Hive,Zookeeper,Kafka,Flume,Hbase,Spark等安装与配置)

    大数据环境安装和配置(Hadoop2.7.7,Hive2.3.4,Zookeeper3.4.10,Kafka2.1.0,Flume1.8.0,Hbase2.1.1,Spark2.4.0等) 系统说明 ...

  8. 【夯实Spring Cloud】Spring Cloud中的Eureka服务注册与发现详解

    本文属于[夯实Spring Cloud]系列文章,该系列旨在用通俗易懂的语言,带大家了解和学习Spring Cloud技术,希望能给读者带来一些干货.系列目录如下: [夯实Spring Cloud]D ...

  9. oracle spool 分隔符_sqlplus--spool命令参数详解

    sqlplus--SPOOL参数详解 Spool是Oracle快速导出数据的工具,是sqlplus的指令,不是sql语法里的东西 一.Spool常用的设置 set arraysize 5000;  / ...

最新文章

  1. 如何构建和部署 SAP Commerce Cloud 项目
  2. 通过反射获得类的构造引用无视private修饰符
  3. 软件测试_Loadrunner_APP测试_性能测试_脚本优化_脚本回放
  4. cisco交换机命令大全(11)
  5. treeview 如何从多个数据表中获取数据动态生成 [提问]
  6. BroadCastReceive的理解和使用
  7. Rust: Path等
  8. java.security.jar 下载_springsecurity下载-Spring Security jar包下载 v4.2.2官方完整版--pc6下载站...
  9. cad画钟表_如何在Word中画钟表?
  10. 安卓分屏神器_平板机皇!华为MatePad Pro全面评测:这才是安卓生产力标杆
  11. poi导出使用HSSFWorkbook行数超出
  12. 升级mongodb时出现The data files need to be fully upgraded
  13. Newton牛顿法(二)| 收敛性和收敛速度 +初值的选取方法
  14. 查询每门课程被选修的学生数
  15. EduCoder-Hive表DDL操作(一、二)答案-路漫漫远俢兮
  16. 使用android sqlite读取数据库的简单方法
  17. Glide加载常用类型图片(带白色边框的圆形图、圆角矩形图片、圆形图片)
  18. sql server 完全卸载后报错unknown\comopnents\.....\...... vertify that you have sufficient access to thatkey
  19. 有道云笔记迁移到为知笔记
  20. 云服务器1M带宽是什么意思,怎么选择服务器带宽?

热门文章

  1. power线程识别寄存器TIR
  2. C#基础--Lambda和LINQ
  3. Nginx+rtmp+ffmpeg搭建视频转码服务
  4. “王者”依然“荣耀”,错的不是游戏而是对游戏的偏见
  5. 国产 MCU AT32F403A 替换 STM32F103 点LED灯
  6. android+7.0+nexus,Nexus用户福利:尝鲜体验一键Root Android 7.0的快感
  7. python你好世界代码大全_Python菜鸟入阶第二步(编写hello world小程序)
  8. pywinauto关闭windows的弹窗
  9. OpenCV函数汇总(所有函数)---219个函数
  10. [PHP]int长度限制