首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 企业软件 > 行业软件 >

Spring+Struts+ibatis上配置数据读写分离及事务(四)

2012-09-15 
Spring+Struts+ibatis下配置数据读写分离及事务(四)接?Spring+Struts+ibatis下配置数据读写分离及事务(三)

Spring+Struts+ibatis下配置数据读写分离及事务(四)

接?Spring+Struts+ibatis下配置数据读写分离及事务(三)

10.配置log4j.properties,方便打印ibatis执行信息

# Global logging configurationlog4j.rootLogger=ERROR, stdout,Rlogfile# SqlMap logging configurationlog4j.logger.com.ibatis=DEBUGlog4j.logger.com.ibatis.common.jdbc.SimpleDataSource=DEBUGlog4j.logger.com.ibatis.common.jdbc.ScriptRunner=DEBUGlog4j.logger.com.ibatis.sqlmap.engine.impl.SqlMapClientDelegate=DEBUGlog4j.logger.java.sql.Connection=DEBUGlog4j.logger.java.sql.Statement=DEBUGlog4j.logger.java.sql.PreparedStatement=DEBUGlog4j.logger.java.sql.ResultSet=DEBUGlog4j.logger.org.springframework=ERRORlog4j.logger.org.apache.struts=ERRORlog4j.logger.org.apache.cxf=ERROR# Console outputlog4j.appender.stdout=org.apache.log4j.ConsoleAppenderlog4j.appender.stdout.layout=org.apache.log4j.PatternLayoutlog4j.appender.stdout.layout.ConversionPattern=%d %5p [%t] - %m%n#logfilelog4j.appender.logfile=org.apache.log4j.DailyRollingFileAppenderlog4j.appender.logfile.DatePattern=yyyy-MM-ddlog4j.appender.logfile.layout=org.apache.log4j.PatternLayoutlog4j.appender.logfile.layout.ConversionPattern=%d %p [%c] - <%m>%nlog4j.appender.logfile.File=${webRoot}/logs/myweb.loglog4j.appender.logfile.MaxFileSize=2048KB#Rlogfilelog4j.appender.Rlogfile=org.apache.log4j.RollingFileAppenderlog4j.appender.Rlogfile.layout=org.apache.log4j.PatternLayoutlog4j.appender.Rlogfile.layout.ConversionPattern=%d %p [%c] - <%m>%nlog4j.appender.Rlogfile.File=${webRoot}/logs/myweb.loglog4j.appender.Rlogfile.MaxFileSize=2048KBlog4j.appender.Rlogfile.MaxBackupIndex=10?

?11.配置Struts对应的action的配置(配置Struts+Json并实现了页面跳转)

?

<?xml version="1.0" encoding="UTF-8" ?><!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.1//EN" "http://struts.apache.org/dtds/struts-2.1.dtd"><struts>    <package name="system" namespace="/" extends="json-default">        <action name="admin" name="ajaxSuccess">                <param name="root">result</param>            </result>             <result name="success" type="dispatcher">index.jsp</result>          </action>   </package></struts>    

?

?12.配置struts.xml

?

<?xml version="1.0" encoding="UTF-8" ?><!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.1//EN" "http://struts.apache.org/dtds/struts-2.1.dtd"><struts>    <constant name="struts.devMode" value="true" />    <constant name="struts.objectFactory" value="spring" /> <constant name="struts.objectFactory"value="org.apache.struts2.spring.StrutsSpringObjectFactory" />        <!--导入后台系统Struts配置-->    <include file="config/struts/bg/struts-system.xml"></include>    <!--导入前台系统Struts配置--></struts>    

?

?13.配置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">    <context-param><param-name>contextConfigLocation</param-name><param-value>classpath:config/spring.xml</param-value></context-param><listener><listener-class>org.springframework.web.context.ContextLoaderListener</listener-class></listener><!--系统启动初始化BEGIN--><listener><listener-class>com.ssi222.wilr.util.listener.SystemInitListener</listener-class></listener><listener><listener-class>org.springframework.web.util.IntrospectorCleanupListener</listener-class></listener>    <!--系统启动初始化END--><filter><filter-name>struts2</filter-name><filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class><init-param><param-name>config</param-name><param-value>struts-default.xml,struts-plugin.xml,/config/struts.xml</param-value></init-param></filter><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>struts2</filter-name><url-pattern>/*</url-pattern></filter-mapping><display-name></display-name><welcome-file-list><welcome-file>login.jsp</welcome-file></welcome-file-list></web-app>

?以上配置中还涉及到了一些java文件,如SystemInitListener,这个只是做测试,所以没有做什么操作,各位可以自己根据需求去写,SystemInitListener代码如下:

?

package com.ssi222.wilr.util.listener;import javax.servlet.ServletContext;import javax.servlet.ServletContextEvent;import javax.servlet.ServletContextListener;import org.apache.commons.logging.Log;import org.apache.commons.logging.LogFactory;import org.springframework.context.support.ClassPathXmlApplicationContext;public class SystemInitListener implements ServletContextListener {private static Log log = LogFactory.getLog(SystemInitListener.class);@Overridepublic void contextDestroyed(ServletContextEvent arg0) {}@Overridepublic void contextInitialized(ServletContextEvent sce){this.SystemStarup(sce.getServletContext());}public void SystemStarup(ServletContext servletContext){log.info("系统启动初始化...");log.info("系统正在初始化服务容器...");try {new ClassPathXmlApplicationContext(new String[] { "config\\spring.xml" });} catch (Exception ex) {log.error("初始化服务容器发生错误,请仔细检查您的配置文件!\n" + ex.getMessage());ex.printStackTrace();System.exit(0);}}}

?涉及到的Action如下:

?

public class AdminAction extends ActionSupport {private IAdminService adminService;private AdminInfo admin;private String result;public AdminInfo getAdmin() {return admin;}public void setAdmin(AdminInfo admin) {this.admin = admin;}public String getResult() {return result;}public void setResult(String result) {this.result = result;}public void setAdminService(IAdminService adminService) {this.adminService = adminService;}public String login() {AdminInfo adminInfo=adminService.checkAdminLogin(admin.getAccount());Map<String, String> map=new HashMap<String, String>();if(adminInfo==null)map.put("msg","您输入的用户名不存在");else{if(Utils.validateStrIsEquals(adminInfo.getPassword(), new MD5().getMD5ofStr(admin.getPassword())))map.put("msg", "success");elsemap.put("msg", "您输入的密码错误");}result =Utils.getJson(map, "obj");return "ajaxSuccess";}public String index(){return "success";}}

??涉及的service层相关代码如下:

?/**

 * @author Wilr * @function 基础业务模型接口 */public interface IBaseService {}/** * @author Wilr * @function 业务基础模型实现基类 */public class BaseServiceImpl implements IBaseService {protected IPresentation presentation;public void setPresentation(IPresentation presentation) {this.presentation = presentation;}}/** * @author Wilr * @function 管理员业务层接口 */public interface IAdminService {  /**   * @author Wilr   * @param loginAccount 登录账号(account/email)   * @function 检查用户登录   * @return 符合条件的用户   */  public AdminInfo checkAdminLogin(String account);}/** * @author Wilr * @function 管理员业务层接口实现 */public class AdminServiceImpl extends BaseServiceImpl implements IAdminService {    private static final String NAMESPACE="System"; //对应Ibatis中配置的命名空间@Overridepublic AdminInfo checkAdminLogin(String account) {return (AdminInfo)presentation.queryForObject(NAMESPACE+".loadLoginAdmin",account);}}

? ?jsp页面采用AJAX提交并跳转页面的javascript代码清单如下:

function errorShow(msg,tagart){   $('#username').removeClass('username').addClass('errorusername');   $('#msgTip>div').text(msg);   $('#msgTip').show();   $(tagart).focus();}$(document).ready(function(){          $('#account').focus();   $('#login').bind("click",function(){       var $account=$('#account').val();       var $password=$('#password').val();      if($account.length<=0){         errorShow('请输入用户名','#account');         return false;      }      if($password.length<=0){       errorShow('请输入密码','#password');       return false;      }      $.post("admin!login",{"admin.account":$account,"admin.password":$password},function(data){         var $result=$.parseJSON(data).msg;         if($result=="success")             window.location.href = "admin!index";              else            errorShow($result,'#account');      });  });});
?

? ?涉及到的javabean类我就不列举清单了,涉及的数据持久层请看我的博客:

?

http://wilr.iteye.com/admin/blogs/1189330(浅谈Spring+Struts+Ibatis项目结构下的持久层优化)

整个整合配置过程到此全部结束,有写的不好的地方大家多给点意见和多多包涵,我在继续优化,也方便小弟近一步提高,

小弟在此先行谢过。

?

?

热点排行