Spring集成SpringMVC与Ibatis
2016-04-11 15:49
676 查看
一、web.xml
二、spring-servlet.xml
八、UserServiceImpl.java
九、UserDao.java
十、UserDaoImpl.java
十一、changePassword.jsp
十二、UserLoginTest.java
<?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" typ 4000 e="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(); } } }
相关文章推荐
- java中byte数组与int类型的转换的几种方式
- Java类的初始化
- SpringMVC——接收请求参数和页面传参
- struts2中迭代的用法
- Java数据类型中String、Integer、int相互间的转换
- SpringMVC整合Shiro
- JAVA知识 简单记录-多线程
- LeetCode 328 -Odd Even Linked List ( JAVA )
- Java基本数据类型的数据转化为字节数据的方法
- java中super
- Java继承
- solr入门之solr5x源码在eclipse中运行及添加mmseg分词器
- java.lang.UnsatisfiedLinkError: dalvik.system.PathClassLoader[DexPathLis。。。
- 二叉树根据前序后序重建
- java代码压缩文件,文件名中中文变为乱码 [
- ubuntu12替换了java,但eclipse仍然提示java版本为1.6,需要更高版本的java
- Java集合框架复习之Collection接口,iterator接口,iterable接口(二)
- 【JAVA设计模式】外观模式(Facade Pattern)
- Java中各种对日期的操作,加日期,减日期
- java反射之-Field