struts2+hibernate3+ibatis整合 mobile项目
Struts2 ( struts-2.3.4 )常用的jar包,和项目结构,一般jsp文件放在web-inf下面,通过action来调用jsp,防止用户直接输入jsp文件名
Web.xml添加:
<filter>
<filter-name>struts2</filter-name>
<filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter
</filter-class>
</filter>
<filter-mapping>
<filter-name>struts2</filter-name>
<url-pattern>*.do</url-pattern>
</filter-mapping>
Struts.xml添加到src/config里,放在web-inf/classes/下面
package包名的规范:com.microsoft…. net.beifeng……
com公司,net网络公司 + 项目名(如有子系统再加名称) + 模块 + 包的业务,如:net.befeng.mobile_scm.test.action
Struts.xml配置:
<constant name="struts.action.extension" value="do" />//后缀为do结尾
<constant name="struts.devMode" value="false" /> //是否为开发模式
<package name="default" namespace="/" extends="struts-default">
<action name="welcome">
<result>/WEB-INF/jsp/MyJsp.jsp</result>
</action>
<action name="showname" class="net.sun.mobile_scm.test.action.TestAction">
<result name="ret">/WEB-INF/jsp/index2.jsp</result>
</action>
</package>
namespace=”/”,代表包package的位置,如namespace=”/vendor”:http://localhost:9999/mobile/vendor/xxx.do
Spring整合:myEclipse里有spring类库
加载applicationContext.xml文件,在main()中:
ApplicationContext applicationContext = new ClassPathXmlApplicationContext(“applicationContext.xml”);
applicationContext.getBean(“….”);得到某对象实例
在spring3包里有个spring.jar包加到项目中
默认applicationContext.xml放在WEB-INF中
如果要放在WEB-INF/classes下面要自定义设置,多个文件用,分开
在 Web项目中启动spring,有2种方法
1、 在web.xml用listener配置
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/classes/applicationContext.xml,...xml</param-value>
</context-param>
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
2、用servlet 配置
<servlet>
<servlet-name>spring</servlet-name>
<servlet-class>org.springframework.web.context.ContextLoaderServlet</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/classes/applicationContext.xml</param-value>
</init-param>
<load-on-startup>0</load-on-startup>
</servlet>
Struts2和spring整合:将struts2-spring-plugin-2.1.6.jar放到Lib中
第1种整合方式:action写在struts.xml里,注入写在applicationContext.xml里。缺点:有多少个action就要写多少个<action>…</action>
<bean id="testAction" class="net.sun.mobile_scm.test.action.TestAction">
<property name="testService" ref="testService" />
</bean>
<bean id="testService" class="net.sun.mobile_scm.text.service.TestServiceImpl" />
第2种方式:在applicationContext里只要写bean的实现类(TestServiceImp),不要写action类里ref=”testService”,但是action里的属性名和bean id名一定要一致。spring容器自动会加载。
<bean id="testService" class="net.sun.mobile_scm.text.service.TestServiceImpl" autowire=”byName”/>
autowire=”byName”按名称自动装配
Ibatis结构及配置:
Classes下面加入SqlMapConfig.xml,对应类的sql xml文件,加入ibatis-2.3.4.jar文件
<?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>
<transactionManager type="JDBC" commitRequired="false"> //JDBC设置
<dataSource type="SIMPLE">
<property name="JDBC.Driver" value="com.mysql.jdbc.Driver" />
<property name="JDBC.ConnectionURL" value="jdbc:mysql://localhost:3306/mobile" />
<property name="JDBC.Username" value="root" />
<property name="JDBC.Password" value="root" />
</dataSource>
</transactionManager>
<sqlMap resource="config/emp.xml"/> //其它xml文件,大多是sql语句
</sqlMapConfig>
Emp.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>
<select id="findEmp" resultClass="test.Emp">
select empName,tel,remark from basic_emp where empId=#value#
</select>
</sqlMap>
在main()中测试:
//得到class路径
String appPath = IBatisTest.class.getClassLoader().getResource("").getPath();
String file = appPath + "config/SqlMapConfig.xml";
SqlMapClient client = SqlMapClientBuilder.buildSqlMapClient(new FileInputStream(file));
Emp emp = (Emp)client.queryForObject("findEmp","007BFC8C0C754C65B1CDF8FB4E8A21F0");
System.out.println(emp.getEmpName());
Spring数据源配置(DBCP):commons-dbcp.jar和commons-pool-1.3.jar 2个包
在applicationContext.xml中设置:
在表头添加:xmlns:context="http://www.springframework.org/schema/context"
<!-- jdbc.properties配置文件设置 -->
<context:property-placeholder location="WEB-INF/classes/jdbc.properties" /> //在src/config里添加jdbc.properties
<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource">
<property name="driverClassName" value="${driverName}" />
<property name="url" value="${url}" />
<property name="username" value="${username}" />
<property name="password" value="${password}" />
</bean>
jdbc.properties里设置:
driverName=com.mysql.jdbc.Driver
url=jdbc\:mysql\://localhost\:3306/mobile
username=root
password=root
spring与Ibatis整合:(通过SqlMapConfig.xml),配置文件全部放到src/config里
<bean id="sqlMapClient" class="org.springframework.orm.ibatis.SqlMapClientFactoryBean">
<property name="configLocation" value="/WEB-INF/classes/SqlMapConfig.xml"/>
<property name="dataSource" ref="dataSource"/>
</bean>
公用Dao类设置:
<bean id="dao" class="net.sun.mobile_scm.dao.CommonDaoImpl">
<property name="sqlMapClient" ref="sqlMapClient"></property>
</bean>
net.sun.mobile_scm.dao.CommonDaoImpl类写法:
public class CommonDaoImpl extends SqlMapClientTemplate implements CommonDao {
public Object queryObject(String sqlId, Object parameter) throws SQLException {
return getSqlMapClient().queryForObject(sqlId, parameter);
}//异常一般从DAOàService用 throws 抛到Aciton里,通过struts2的异常处理类来处理,然后显示在页面上,不要在DAO,Service里写try{}catch
Spring编码过滤器UTF-8,在web.xml里设置:
<!-- Spring UTF-8过滤器 ,放在struts2过滤器前面-->
<filter>
<filter-name>CharsetFilter</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>CharsetFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
Log4j.properties配置:log4j.jar放在lib里,log4j.properties放在src/config里:
log4j.appender.console=org.apache.log4j.ConsoleAppender
log4j.appender.console.layout=org.apache.log4j.SimpleLayout
log4j.rootCategory=DEBUG, consol
页面里数据从pageàrequestàSessionàApplication顺序来查找参数的,application类用listener侦听器来实现
public class SysInit implements ServletContextListener {
public void contextInitialized(ServletContextEvent event) { //初始化方法
ServletContext application = event.getServletContext(); //得到ServletContext
String sysname = application.getInitParameter("sysname");
application.setAttribute("sysname", sysname); } //变量存入application里
}
登录页面:user_login.jsp
id对应的css是“#”,class对应的css是“.” ,background-color:#cccccc 背景颜色,font-size:12px字体大小
background-image:url(“images/xx.jsp”)背景图片,overflow:hidden没有滚动条,position:absolute绝对坐标
margin:25px 0 26px 0; (顺时针:上右下左) z-index:10元素叠次顺序,数字越大显示在最前面,可以为负数
font-weight:bold; 文本的粗细
1、页面登录窗口
颜色RGB:数字越小,颜色越深。FFFFFF是白色 000000是黑色
Jquery对象和Dom对象(原生对象)转换:
o = $(o);//jquery对象 ; o=o[0];//原生对象,原生对象才能用offsetLeft,offsetTop,offsetParent,
$("div.validateCodeDiv").css("display","block"); //显示DIV ; display:none//不显示
$("div.validateCodeDiv").css("top", top).css("left", left);//DIV设置top和left
$("input[name=account],input[name=passwd],#submitBtn").click(function(){…}//得到form里的控件事件
$("#submitBtn").mouseover(function(){this.src = "images/login_submitBtn2.gif";})//鼠标移上DIV显示图片
//绑定验证码图片单击实现换验证码
$("div.validateCodeDiv").click(function(event){
changeCode();}); //生成验证码代码
event.stopPropagation();//防止冒泡,当click后,会一层层向上冒泡,因为是body[ $(document) ]里有个display:none属性,如果不阻止,单击DIV不显示该层。
正则表达式:判断空字符串
string.phototype.trim = function(){ return this.replace(/(^\s*)|(\s*$)/g,""); }//以/开头;/g结尾 ;\s空格; * 0到多个;^开头;$结尾
2、页面欢迎窗口:
<!-- onselectstart IE下禁止选择文字 oncontextmenu IE取消鼠标右键-->
<body onselectstart="return false;" oncontextmenu="return false;">
Firefox浏览器中在CSS里加入:-moz-user-select: none; //禁止选择文字
透明度:filter: alpha(opacity=0);支持IE opacity: 0;//支持FireFox
background-repeat:no-repeat; //背景图像将仅显示一次
repeat-x //背景图像将在水平方向重复 repeat-y //背景图像将在垂直方向重复
cursor: pointer; //手图标
visibility: hidden; //隐藏不显示
visibility:hidden|visible和display:none|block区别:visibility隐藏后,仍然占据空间(效率高,不经常用)display隐藏后,不占据空间(效率低,经常用)
3.RBAC设计 基于角色的访问控制(Role-Based Access Control)
浙公网安备 33010602011771号