Spring集成SpringMVC与Ibatis

一、web.xml

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" version="2.5">
  <display-name></display-name>
  <context-param>
    <param-name>contextConfigLocation</param-name>
    <param-value>/WEB-INF/classes/spring-ibatis.xml,/WEB-INF/classes/spring-task.xml,/WEB-INF/classes/spring-servlet.xml</param-value>
  </context-param>
  
  <listener>
    <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
  </listener>
  
  <servlet>
    <description>spring mvc servlet</description>
    <servlet-name>springMvc</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    <init-param>
      <description>spring mvc 配置</description>
      <param-name>contextConfigLocation</param-name>
      <param-value>/WEB-INF/classes/spring-servlet.xml</param-value>
    </init-param>
    <load-on-startup>1</load-on-startup>
  </servlet>
  
  <servlet-mapping>
    <servlet-name>springMvc</servlet-name>
    <url-pattern>*.do</url-pattern>
  </servlet-mapping>
  
  <filter>
    <description>字符集过滤器</description>
    <filter-name>encodingFilter</filter-name>
    <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
    <init-param>
      <description>字符集编码</description>
      <param-name>encoding</param-name>
      <param-value>UTF-8</param-value>
    </init-param>
	<init-param>
			<param-name>forceEncoding</param-name>
			<param-value>true</param-value>
	</init-param>  
  </filter>
  
  <filter-mapping>
    <filter-name>encodingFilter</filter-name>
    <url-pattern>/*</url-pattern>
  </filter-mapping>
  
  <welcome-file-list>
    <welcome-file>index.jsp</welcome-file>
  </welcome-file-list>

</web-app>

二、spring-servlet.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"
	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:mvc="http://www.springframework.org/schema/mvc"	
	xsi:schemaLocation="
		http://www.springframework.org/schema/beans 
		http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
		http://www.springframework.org/schema/aop 
		http://www.springframework.org/schema/aop/spring-aop-3.0.xsd
  		http://www.springframework.org/schema/context 
		http://www.springframework.org/schema/context/spring-context-3.0.xsd 
  		http://www.springframework.org/schema/tx 
		http://www.springframework.org/schema/tx/spring-tx-3.0.xsd 
		http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd		
		">
	
	<!-- 把标记了@Controller注解的类转换为bean -->
	<context:component-scan base-package="com.x.*" />
	
	<!-- 可通过注解控制事务 -->  
    <tx:annotation-driven />  
	
	<mvc:annotation-driven/>
	
	<!-- 启动Spring MVC的注解功能,完成请求和注解POJO的映射 -->
	<bean class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter" />
	
	<!-- 对模型视图名称的解析,即在模型视图名称添加前后缀 -->
	<bean id="defaultViewResolver"
		class="org.springframework.web.servlet.view.InternalResourceViewResolver"
		p:order="3">
		<property name="viewClass"
			value="org.springframework.web.servlet.view.JstlView" />
		<property name="contentType" value="text/html" />
		<property name="prefix" value="/" />
		<property name="suffix" value=".jsp" />
	</bean>
		
	<!-- 处理Mutipart文件上次的bean -->
	<bean id="multipartResolver"
		class="org.springframework.web.multipart.commons.CommonsMultipartResolver"
		p:defaultEncoding="utf-8" />
		
</beans>
三、spring-ibatis.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"
	xmlns:tx="http://www.springframework.org/schema/tx"  
	xmlns:aop="http://www.springframework.org/schema/aop"  
	xmlns:context="http://www.springframework.org/schema/context" 
	xsi:schemaLocation="
		http://www.springframework.org/schema/beans 
		http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
		http://www.springframework.org/schema/aop 
		http://www.springframework.org/schema/aop/spring-aop-3.0.xsd
  		http://www.springframework.org/schema/context 
		http://www.springframework.org/schema/context/spring-context-3.0.xsd 
  		http://www.springframework.org/schema/tx 
		http://www.springframework.org/schema/tx/spring-tx-3.0.xsd 
		">
	
	<!-- 引入属性文件 -->
	<context:property-placeholder location="classpath:dbConfig.properties" />
	<!-- 配置数据源 -->
	<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource"  
        destroy-method="close">  
        <property name="driverClassName" value="${jdbc.driverClassName}" />  
        <property name="url" value="${jdbc.url}" />  
        <property name="username" value="${jdbc.username}" />  
        <property name="password" value="${jdbc.password}" />  
    </bean>  
    
    <!-- (事务管理)transaction manager, use JtaTransactionManager for global tx --> 
    <bean id="transactionManager"  
        class="org.springframework.jdbc.datasource.DataSourceTransactionManager">  
        <property name="dataSource" ref="dataSource" />  
    </bean>  

    <!-- 创建SqlSessionFactory,同时指定数据源 -->  
    <!--   SqlMap setup for iBATIS Database Layer   -->
    <bean id="nativeJdbcExtractor" class="org.springframework.jdbc.support.nativejdbc.CommonsDbcpNativeJdbcExtractor"   
    	lazy-init="true" />
    	
   	<bean id="oracleLobHandler" class="org.springframework.jdbc.support.lob.OracleLobHandler" lazy-init="true">   
	    <property name="nativeJdbcExtractor">   
	        <ref local="nativeJdbcExtractor" />   
	    </property>   
	</bean>
	
    <bean class="org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor"/>  
    	
    <bean id="sqlMapClient" class="org.springframework.orm.ibatis.SqlMapClientFactoryBean">
        <property name="configLocation">
            <value>classpath:/com/x/dao/ibatis/sqlMap/sql-map-config.xml</value>			
        </property>
        <property name="dataSource" ref="dataSource"/>
        <property name="lobHandler">   
        	<ref local="oracleLobHandler" />   
    	</property>
    </bean>
    
</beans>
四、sql-map-config.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE sqlMapConfig PUBLIC "-//ibatis.apache.org//DTD SQL Map Config 2.0//EN" 
    "http://ibatis.apache.org/dtd/sql-map-config-2.dtd">

<sqlMapConfig>
 <settings cacheModelsEnabled="true" lazyLoadingEnabled="true" errorTracingEnabled="true" enhancementEnabled="true" maxRequests="2048" maxSessions="1024" maxTransactions="512" useStatementNamespaces="false"/>

	<typeHandler jdbcType="CLOB" javaType="java.lang.String"   
        callback="org.springframework.orm.ibatis.support.ClobStringTypeHandler" />
    <sqlMap resource="com/x/dao/ibatis/sql/UserSql.xml"/> 
</sqlMapConfig>
五、UserSql.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE sqlMap PUBLIC "-//ibatis.apache.org//DTD SQL Map 2.0//EN"
    "http://ibatis.apache.org/dtd/sql-map-2.dtd">

<sqlMap namespace="UserSQL">

    <typeAlias alias="user" type="com.kysis.model.User"/>

    <resultMap id="userResult" class="user">
        <result property="id" column="id"/>
        <result property="username" column="USER_ID"/>
        <result property="password" column="password"/>
        <result property="CHName" column="CHS_NAME"/>
        <result property="depID" column="DEP_ID"/>
        <result property="memo" column="memo"/>
        <result property="homePhone" column="phone"/>
        <result property="email" column="email"/>
        <result property="phoneNumber" column="MSISDN"/>
        <result property="passwordHint" column="password_hint"/>
        <result property="version" column="version"/>
		<result property="site" column="SITE"/>
         <result property="accountExpired" column="account_expired"/>
        <result property="enabled" column="IS_USABLE"/>
        <result property="accountLocked" column="account_locked"/>
        <result property="credentialsExpired" column="credentials_expired"/>
		<result property="updatepwd" column="uppwd_date"/>
		<result property="outUse" column="OUT_USE"/>
		<result property="lastCanuseDate" column="LAST_CANUSE_DATE"/>
    </resultMap>

    <select id="User.getLoginUser" parameterClass="user" resultMap="userResult">
        select *  from user_info
        where USER_ID = #username#
              and PASSWORD = #password#
              and IS_USABLE=1
    </select>

	<select id="User.getValideLoginUser" parameterClass="user" resultMap="userResult">
        select u.*  from user_info u  
        where u.USER_ID = #username#
              and u.PASSWORD = #password#
              and IS_USABLE=1
    </select>
    
    <select id="getUserRolesId" parameterClass="java.lang.Long" resultClass="string">
    <![CDATA[
        select r.id from user_rol r, user_role_ref ur
        where (ur.role_id = r.id) and ur.user_id=#id#
    ]]>
    </select>
    
    <update id="updatePassword" parameterClass="user" >
  		<![CDATA[
  			UPDATE USER_INFO u SET u.PASSWORD = #password# WHERE u.USER_ID=#username#
  		]]>
  	</update>    

</sqlMap>
六、UserLoginController

package com.x.controller.web;

import java.io.IOException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.log4j.LogManager;
import org.apache.log4j.Logger;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.ResponseBody;
import com.x.service.UserService;
import com.x.util.InputstreamUtil;
import com.x.util.json.CreateRespJson;
/**
 *	用户登录
 */
@Controller
public class UserLoginController {

    protected final static Logger logger = LogManager.getLogger(UserLoginController.class);  
	@Autowired
	private UserService userService;
	
	@RequestMapping(value = "userLogin",method = RequestMethod.POST,produces = "application/json; charset=UTF-8")
	@ResponseBody
	public Object validateUserLogin(HttpServletRequest request, HttpServletResponse response){

		//String reqJson = request.getParameter("param");
		String reqJson = null;
		try {
			reqJson = InputstreamUtil.Inputstr2Str_byteArr(request.getInputStream(), "UTF-8");
		} catch (IOException e) {
			logger.error("接受 用户登录 请求json失败!");
			return CreateRespJson.parseJsonFailed();
		}
		
		String retJson = userService.validateUserLogin(reqJson);
		
		return retJson;
		
	}
	
}
七、UserService.java

package com.x.service;

import com.x.model.User;
/**
 * Business Service Interface to handle communication between web and
 * persistence layer.
 *
 * <p><a href="UserManager.java.html"><i>View Source</i></a></p>
 *
 * @author <a href="mailto:matt@raibledesigns.com">Matt Raible</a>
 *  Modified by <a href="mailto:departureAirportName@getrolling.com">departureAirportName Kibler </a> 
 */
public interface UserService {
    
    public String validateUserLogin(String reqJson);

}

八、UserServiceImpl.java

package com.x.service.impl;
import org.acegisecurity.providers.encoding.Md5PasswordEncoder;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

/**
 * Implementation of UserManager interface.</p>
 * 
 * <p>
 * <a href="UserManagerImpl.java.html"><i>View Source</i></a>
 * </p>
 *
 */
@Service("userService")
@Transactional
public class UserServiceImpl  implements UserService {

	@Autowired
	private UserDao userDao;

	@Override
	public String validateUserLogin(String reqJson) {
		
	}
	
}

九、UserDao.java

package com.x.dao;

import com.x.model.User;
/**
 * User Data Access Object (Dao) interface.
 *
 * <p>
 * <a href="UserDao.java.html"><i>View Source</i></a>
 * </p>
 *
 * @author <a href="mailto:matt@raibledesigns.com">Matt Raible</a>
 */
public interface UserDao{
	
}

十、UserDaoImpl.java

package com.x.dao.impl;

import java.util.HashSet;
import java.util.List;
import org.apache.log4j.LogManager;
import org.apache.log4j.Logger;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.orm.ibatis.support.SqlMapClientDaoSupport;
import org.springframework.stereotype.Repository;
import com.ibatis.sqlmap.client.SqlMapClient;
import com.x.dao.UserDao;
import com.x.model.User;

/**
 * This class interacts with iBatis's SQL Maps to save and retrieve User
 * related objects.
 *
 * <p><a href="UserDaoiBatis.java.html"><i>View Source</i></a></p>
 *
 * @author <a href="mailto:matt@raibledesigns.com">Matt Raible</a>
 */
@Repository(value = "userDao")
public class UserDaoImpl extends SqlMapClientDaoSupport implements UserDao{
	
	@Autowired
	public void setMySqlMapClient(SqlMapClient mySqlMapClient) {
		super.setSqlMapClient(mySqlMapClient);
	}	
}

十一、changePassword.jsp

<%@ page pageEncoding="UTF-8"%>
<!doctype html>
<html class="no-js">
<head>
  <meta charset="utf-8">
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
  <meta name="description" content="">
  <meta name="keywords" content="">
  <meta name="viewport"
        content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no">
  <title>修改密码</title>

  <!-- Set render engine for 360 browser -->
  <meta name="renderer" content="webkit">

  <!-- No Baidu Siteapp-->
  <meta http-equiv="Cache-Control" content="no-siteapp"/>

  <link rel="icon" type="image/png" href="../../assets/i/favicon.png">

  <!-- Add to homescreen for Chrome on Android -->
  <meta name="mobile-web-app-capable" content="yes">
  <link rel="icon" sizes="192x192" href="../../assets/i/favicon.png">

  <!-- Add to homescreen for Safari on iOS -->
  <meta name="apple-mobile-web-app-capable" content="yes">
  <meta name="apple-mobile-web-app-status-bar-style" content="black">
  <meta name="apple-mobile-web-app-title" content="Amaze UI"/>
  <link rel="apple-touch-icon-precomposed" href="../../assets/i/favicon.png">

  <!-- Tile icon for Win8 (144x144 + tile color) -->
  <meta name="msapplication-TileImage" content="../../assets/i/favicon.png">
  <meta name="msapplication-TileColor" content="#0e90d2">

  <!-- SEO: If your mobile URL is different from the desktop URL, add a canonical link to the desktop page https://developers.google.com/webmasters/smartphone-sites/feature-phones -->
  <!--
  <link rel="canonical" href="http://www.example.com/">
  -->
  <link rel="alternate icon" type="image/png" href="../../assets/i/favicon.png">
  <link rel="stylesheet" href="../../assets/css/amazeui.min.css"/>
  <link rel="stylesheet" href="../../assets/css/app.css">
  	<!--[if (gte IE 9)|!(IE)]><!-->
	<script src="../../assets/js/jquery.min.js"></script>
	<!--<![endif]-->
	<script src="../../assets/js/amazeui.min.js"></script>
  <style>
    .header {
      text-align: center;
    }
    .header h1 {
      font-size: 200%;
      color: #333;
      margin-top: 30px;
    }
    .header p {
      font-size: 14px;
    }
  </style>
  
</head>
<body >
<!--[if lte IE 9]>
<p class="browsehappy">你正在使用<strong>过时</strong>的浏览器,Amaze UI 暂不支持。 请 <a
  href="http://browsehappy.com/" target="_blank">升级浏览器</a>
  以获得更好的体验!</p>
<![endif]-->
 <script type="text/javascript">
 
 	var browser = {
		versions: function() {
		var u = navigator.userAgent, app = navigator.appVersion;
		return {//移动终端浏览器版本信息 
			trident: u.indexOf('Trident') > -1, //IE内核
			presto: u.indexOf('Presto') > -1, //opera内核
			webKit: u.indexOf('AppleWebKit') > -1, //苹果、谷歌内核
			gecko: u.indexOf('Gecko') > -1 && u.indexOf('KHTML') == -1, //火狐内核
			mobile: !!u.match(/AppleWebKit.*Mobile.*/) || !!u.match(/AppleWebKit/), //是否为移动终端
			ios: !!u.match(/\(i[^;]+;( U;)? CPU.+Mac OS X/), //ios终端
			android: u.indexOf('Android') > -1 || u.indexOf('Linux') > -1, //android终端或者uc浏览器
			iPhone: u.indexOf('iPhone') > -1 || u.indexOf('Mac') > -1, //是否为iPhone或者QQHD浏览器
			iPad: u.indexOf('iPad') > -1, //是否iPad
			webApp: u.indexOf('Safari') == -1 //是否web应该程序,没有头部与底部
			};
	    }(),
		language: (navigator.browserLanguage || navigator.language).toLowerCase()
	}
	 
 	$(function(){
 		if('${param.msg}' == '成功。'){
			if (browser.versions.ios || browser.versions.iPhone || browser.versions.iPad) {
 				  var url="app:"+"1";
   				  window.location = url;
   				  addSubView('view');
   				  native.calculateForJS("2");
 			}else if (browser.versions.android) {
 				window.key.jsMethod('1');
 			}	
 		}else if('${param.msg}' != ''){
			$(".am-modal-bd").append('${param.msg}');
 			$("#retMsg").click(); 	 			 
 		}
 		$("#oldPassword").val('${param.oldPassword}');
 		$("#newPassword").val('${param.newPassword}');
 		$("#confirmPassword").val('${param.confirmPassword}');
 		
 	});
 	var submitCommit = function(){
 		var progress = $.AMUI.progress;
 		progress.start();
 		$("#submitBtn").button("loading");
 	}
 </script>
<div class="am-g">
  <div class="am-u-lg-6 am-u-md-8 am-u-sm-centered">
    <hr>
    <h2 align="center" >修改密码</h2>
    <hr/>
    <form method="post" class="am-form" id="changePassword" action="${pageContext.request.contextPath}/changePassword.do" name="changePassword" onSubmit="return submitCommit();" >

      <input type="hidden" name="userName" id="userName" placeholder="用户名不能为空"  value="${param.userName}" required>
  		
  	  <span class="am-icon-lock"></span>	
      <label for="password">旧密码:</label>
      <input type="password" name="oldPassword" id="oldPassword" placeholder="旧密码不能为空"  value="" required>
      <hr>
        
      <span class="am-icon-lock"></span>  
      <label for="password">新密码:</label>
      <input type="password" name="newPassword" id="newPassword" minlength="8" maxlength="20" placeholder="输入的密码必须是字母加数字且8位以上" 
      		 pattern="^[A-Za-z]+[0-9]+[A-Za-z0-9]*|[0-9]+[A-Za-z]+[A-Za-z0-9]*$" value="" required>
  
      <span class="am-icon-lock"></span>
      <label for="password">确认密码:</label>
      <input type="password" name="confirmPassword" class="am-icon-lock" id="confirmPassword" minlength="8" maxlength="20" placeholder="输入的密码必须是字母加数字且8位以上" 
      		 pattern="^[A-Za-z]+[0-9]+[A-Za-z0-9]*|[0-9]+[A-Za-z]+[A-Za-z0-9]*$" value="" required>
      <hr>

      <div class="am-cf">
        <input type="submit" id="submitBtn" value="确认修改" class="am-btn am-btn-primary am-btn-sm am-center am-round" data-am-loading="{loadingText: '努力加载中...'}">
      </div>
    </form>
  </div>
</div>
<button
  id="retMsg"
  type="button"
  style="display:none;"
  class="am-btn am-btn-primary"
  data-am-modal="{target: '#my-alert'}">
</button>
<div class="am-modal am-modal-alert" tabindex="-1" id="my-alert">
  <div class="am-modal-dialog">
    <div class="am-modal-hd am-btn-primary am-btn-sm am-center">提示</div>
    <div class="am-modal-bd">
    </div>
    <div class="am-modal-footer">
      <span class="am-modal-btn">确定</span>
    </div>
  </div>
</div>  
<!--[if lt IE 9]>
<script src="http://libs.baidu.com/jquery/1.11.1/jquery.min.js"></script>
<script src="http://cdn.staticfile.org/modernizr/2.8.3/modernizr.js"></script>
<script src="../../assets/js/amazeui.ie8polyfill.min.js"></script>
<![endif]-->
</body>

</html>

十二、UserLoginTest.java

package com.x.test;

import java.io.IOException;
import org.apache.commons.httpclient.HttpClient;
import org.apache.commons.httpclient.HttpException;
import org.apache.commons.httpclient.methods.PostMethod;
import org.apache.commons.httpclient.params.HttpMethodParams;

public class UserLoginTest {
	/**
	 * @param args
	 */
	public static void main(String[] args) {
		try {
			String param = "{\"req_source\":\"IOS\",\"userId\":\"username\",\"password\":\"password\",\"sign\":\"ac59075b964b0715\"}";
			String url = "http://x.x.x.x:8081/x/userLogin.do";
			PostMethod method = new PostMethod(url);
			method.getParams().setParameter(HttpMethodParams.HTTP_CONTENT_CHARSET, "UTF-8");		
			HttpClient client = new HttpClient();
			client.getHttpConnectionManager().getParams()
			.setConnectionTimeout(5000);
			//method.setParameter("param", param);
			method.setRequestBody(param);
			int status = client.executeMethod(method);
			method.getURI();
			String ret = method.getResponseBodyAsString();
			System.out.println("status="+status+" ret="+ret);
		} catch (HttpException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}
	}
}



  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值