接 Spring+Struts+ibatis下配置数据读写分离及事务(三)
10.配置log4j.properties,方便打印ibatis执行信息
# Global logging configuration
log4j.rootLogger=ERROR, stdout,Rlogfile
# SqlMap logging configuration
log4j.logger.com.ibatis=DEBUG
log4j.logger.com.ibatis.common.jdbc.SimpleDataSource=DEBUG
log4j.logger.com.ibatis.common.jdbc.ScriptRunner=DEBUG
log4j.logger.com.ibatis.sqlmap.engine.impl.SqlMapClientDelegate=DEBUG
log4j.logger.java.sql.Connection=DEBUG
log4j.logger.java.sql.Statement=DEBUG
log4j.logger.java.sql.PreparedStatement=DEBUG
log4j.logger.java.sql.ResultSet=DEBUG
log4j.logger.org.springframework=ERROR
log4j.logger.org.apache.struts=ERROR
log4j.logger.org.apache.cxf=ERROR
# Console output
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%d %5p [%t] - %m%n
#logfile
log4j.appender.logfile=org.apache.log4j.DailyRollingFileAppender
log4j.appender.logfile.DatePattern=yyyy-MM-dd
log4j.appender.logfile.layout=org.apache.log4j.PatternLayout
log4j.appender.logfile.layout.ConversionPattern=%d %p [%c] - <%m>%n
log4j.appender.logfile.File=${webRoot}/logs/myweb.log
log4j.appender.logfile.MaxFileSize=2048KB
#Rlogfile
log4j.appender.Rlogfile=org.apache.log4j.RollingFileAppender
log4j.appender.Rlogfile.layout=org.apache.log4j.PatternLayout
log4j.appender.Rlogfile.layout.ConversionPattern=%d %p [%c] - <%m>%n
log4j.appender.Rlogfile.File=${webRoot}/logs/myweb.log
log4j.appender.Rlogfile.MaxFileSize=2048KB
log4j.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" class="adminAction">
<result type="json" 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);
@Override
public void contextDestroyed(ServletContextEvent arg0) {
}
@Override
public 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");
else
map.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中配置的命名空间
@Override
public 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项目结构下的持久层优化)
整个整合配置过程到此全部结束,有写的不好的地方大家多给点意见和多多包涵,我在继续优化,也方便小弟近一步提高,
小弟在此先行谢过。
分享到:
相关推荐
基于C51单片机Proteu仿真实例及软件源码+文档说明 之-电子琴.zip
均包含代码,文章,部分项目包含ppt
基于java的智乐健身后台管理系统设计与实现.docx
基于java的鲜花销售管理系统设计与实现.docx
内容概要:本文回顾了近年来关于数字孪生(Digital Twin)的概念和技术的发展历程,并详尽介绍了这种技术在未来车间中的潜在应用场景和需克服的难关。数字孪生是一种用于集成物理和虚拟系统的技术手段,它能够在产品设计、智能生产和预防性维护等多个领域发挥作用。 适合人群:研究人员和工程师们希望更好地理解数字孪生的基本理论与具体应用实践。 使用场景及目标:涵盖了从产品的设计、制造过程到服役阶段故障预测的全过程,并探讨了基于DT的具体实施路径。 其他说明:强调了信息物理系统的交互融合是DT成功部署的基础,而建立高准确度的多维虚拟模型、孪生数据驱动和实现动态实时交互将是推进这一前沿概念向前发展的关键。
管理员能够查看、添加、修改和删除景点分类信息,景点分类管理 用户在系统前台可查看系统信息,包括首页、景点信息、酒店信息以及客房信息等 用户要登录界面可输入用户名、密码,点击登录按钮进行登录系统 项目关键技术 开发工具:IDEA 、Eclipse 编程语言: Java 数据库: MySQL5.7+ 后端技术:ssm 前端技术:Vue 关键技术:springboot、SSM、vue、MYSQL、MAVEN 数据库工具:Navicat、SQLyog
关键字:UTM/企业防火墙/NGFW 功能:vpn,sdwan,无线控制器,ldap,双因子认证,nat/透明,终端控制,av防病毒,ips入侵检测,应用控制,web过滤, FortiGate UTM/NGFW产品 ①端口:8口、16口、24口、48口 ②层数:二层(接入层交换机、傻瓜式交换机)、三层(核心交换机、汇聚交换机) ③是否网管 网管: 非网管(傻瓜式交换机,即插即用) WEB网管(S1720GW系列) 全网管(S1720GFR系列,S2700以上的型号都为全网管) ④速率:百兆、千兆、万兆等 1.带机量(支持用户数) 2.端口数 3.吞吐量,并发连接数 4.功能 功能差异须知 NG-xxxx产品特有功能 TG-xxxx&NG-xxxx共有功能 TG-xxxx产品特有功能 FW:网络接入、安全防护、高可用性、身份认证、系统服务、系统管理 ●应用层DDOS攻击防护 负载均衡:多链路负载均衡与备份、多链路智能选路技术、多算法的服务器负载均衡 ●异常行为分析:内置统计只能算法,智能学习
简化设计,轻松管理 一键设计:快速创建和管理SQLite3数据库,简化数据库设计流程。 高效查询:强大的查询功能,帮助您轻松处理复杂的SQL语句。 功能全面,灵活便捷 可视化界面:直观的图形界面,让您无需编写繁琐的SQL代码,即可完成数据库设计。 数据同步:支持实时数据同步,确保您的数据库始终保持最新状态。 高度兼容,广泛适用 跨平台支持:适用于Windows、Mac和Linux等多种操作系统,满足不同开发环境的需求。 多语言集成:与C、C++等主流编程语言无缝对接,提高开发效率。 安全可靠,稳定运行 数据备份:内置数据备份与恢复功能,保障数据安全。 性能优化:优化数据库结构,提升查询速度和存储效率。
小程序-滴滴作业.zip 小程序-滴滴作业.zip 小程序-滴滴作业.zip
地线贴标_复制.ezd
Chrome主题-开阔绿地草地主题
基于java校园兼职平台设计与实现.docx
基于java的旅游管理系统设计与实现.docx
基于java的技术大健康综合咨询问诊平台的设计与实现.docx
均包含代码,文章,部分项目包含ppt
项目工程资源经过严格测试可直接运行成功且功能正常的情况才上传,可轻松复刻,拿到资料包后可轻松复现出一样的项目,本人系统开发经验充足(全领域),有任何使用问题欢迎随时与我联系,我会及时为您解惑,提供帮助。 【资源内容】:包含完整源码+工程文件+说明(如有)等。答辩评审平均分达到96分,放心下载使用!可轻松复现,设计报告也可借鉴此项目,该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的。 【提供帮助】:有任何使用问题欢迎随时与我联系,我会及时解答解惑,提供帮助 【附带帮助】:若还需要相关开发工具、学习资料等,我会提供帮助,提供资料,鼓励学习进步 【项目价值】:可用在相关项目设计中,皆可应用在项目、毕业设计、课程设计、期末/期中/大作业、工程实训、大创等学科竞赛比赛、初期项目立项、学习/练手等方面,可借鉴此优质项目实现复刻,设计报告也可借鉴此项目,也可基于此项目来扩展开发出更多功能 下载后请首先打开README文件(如有),项目工程可直接复现复刻,如果基础还行,也可在此程序基础上进行修改,以实现其它功能。供开源学习/技术交流/学习参考,勿用于商业用途。质量优质,放心下载使用。
基于java的共享客栈管理系统设计与实现.docx
基于java的车库智能管理平台设计与实现.docx
基于java的学生宿舍管理设计与实现.docx
【C++】项目设计资源 【C++】新手入门教程 包含例子和相关说明