SSH联合开发环境的 搭建

项目环境搭建一般是由项目的架构师或项目组长,搭建好的项目中,java代码和配置文件以及测试代码应该是分离。各个框架的配置文件也要分开。

基本环境整体的效过:


下面开始建立项目,搭建环境。

一、建立好项目后,需要再建立两个单独的源文件夹,分别为test和config

在config下分别建立struts,spring和hibernate三个包,以便后面分别放入这三部分的配置。

 ·

二、然后加入Spring支持。


Spring和Struts的配置文件也不只一个,而是要根据功能来拆分为多个。

Spring的配置文件最好拆分为以下五个:

1)  -hibernate.xml:放入固定的数据库连接等相关配置

2)  -dao.xml:放入DAO相关配置

3)  -service.xml:放入Service相关配置

4)  -struts.xml:放入Action相关配置

5)  -transaction.xml:放入固定的事务处理相关配置。

 

三、加入Hibernate和struts的支持

将Hibernate部分的配置自动生成到-hibernate.xml配置文件中。

在-hibernate.xml中补充其他配置。

	<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource">
		<property name="driverClassName" value="oracle.jdbc.OracleDriver">
		</property>
		<property name="url" value="jdbc:oracle:thin:@localhost:1521:ORCL">
		</property>
		<property name="username" value="sunxun"></property>
		<property name="password" value="123"></property>
	</bean>
	<bean id="sessionFactory"
		class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
		<property name="dataSource">
			<ref bean="dataSource" />
		</property>
		<property name="hibernateProperties">
			<props>
				<prop key="hibernate.dialect">
					org.hibernate.dialect.Oracle9Dialect
				</prop>
				<prop key="hibernate.show_sql">
					true
				</prop>
				<prop key="hibernate.format_sql">
					true
				</prop>
			</props>
		</property>
		<property name="mappingResources">
			<list>
				<value>hibernate/NewsType.hbm.xml</value>
				<value>hibernate/News.hbm.xml</value>
			</list>
		</property>
	</bean>

	<bean id="hibernateTemplate" class="org.springframework.orm.hibernate3.HibernateTemplate">
		<property name="sessionFactory">
			<ref bean="sessionFactory" />
		</property>
	</bean>
//*

*其中dataSource数据源,主要是配置与数据库连接的操作。这里是Oracle

*SessionFactory是连接池,主要配置的Hibernate的属性,比如show_sql,format_sql

*还有一个生成表的映射文件

*

*//

在-transaction.xml中补充三个<bean>的配置(标准的三段式)。

	<bean id="transactionInterceptor"
		class="org.springframework.transaction.interceptor.TransactionInterceptor">
		<property name="transactionManager">
			<ref bean="transactionManager" />
		</property>
		<!-- 
			配置事务处理的方法和方式
		-->
		<property name="transactionAttributes">
			<props>
				<!--
					表示所有方法都要关闭连接,并进行事务处理.
					PROPAGATION_REQUIRED:如果之前有事务,则将当前操作合并到之前的事务中,如果之前没有事务,则开始一个新的事务。
					PROPAGATION_REQUIRED_NEW:无论之前是否有事务,都开始一个新的事务。
					PROPAGATION_REQUIRED_NEVER:不使用事务处理,使用自动提交方式。
				-->
				<prop key="*">PROPAGATION_REQUIRED</prop>
			</props>
		</property>
	</bean>

	<bean
		class="org.springframework.aop.framework.autoproxy.BeanNameAutoProxyCreator">
		<property name="beanNames">
			<list>
				<value>*ServiceImpl</value>
			</list>
		</property>
		<property name="interceptorNames">
			<list>
				<value>transactionInterceptor</value>
			</list>
		</property>
	</bean>

四、Struts的配置文件拆分方式:

1)  Struts.xml:放入一些公共的配置和包含信息

<struts>

	<include file="struts/struts-root.xml"></include>
	<include file="struts/struts-front.xml"></include>
	<include file="struts/struts-back.xml"></include>

	<package name="my-default" extends="struts-default" abstract="true">
		<!--
		全局文件大小限制方式,一般不推荐 
		<interceptors>
			<interceptor-stack name="my-default-stack">
				<interceptor-ref name="fileUpload">
					<param name="maximumSize">700000</param>
				</interceptor-ref>
				<interceptor-ref name="defaultStack"></interceptor-ref>
			</interceptor-stack>
		</interceptors>
		 -->
		<global-results>
			<result name="forward">/forward.jsp</result>
			<result name="input">/error.jsp</result>
		</global-results>
	</package>

</struts>   

2)  Struts-root.xml:里面配置所有不需要登陆就能访问的Action配置。

3)  Struts-front.xml:前台普通用户登陆后才能处理的相关功能

4)  Struts-back.xml:后台管理员登陆后才能处理的相关功能。


五、将项目的包也要按照固定的格式来建立出来,包名默认为: 公司名.项目名.功能

将pojo映射生成。

src下需要的包:

cn.itcast.ssh.back.action;

cn.itcast.ssh.back.service.impl;    

cn.itcast.ssh.dao.impl;

cn.itcast.ssh.filter;

cn.itcast.ssh.front.action;

cn.itcast.ssh.front.service.action;

cn.itcast.ssh.util;

六、编写web.xml 的监听

	<context-param>
		<param-name>contextConfigLocation</param-name>
		<param-value>/WEB-INF/classes/spring/applicationContext-*.xml</param-value>
	</context-param>

	<listener>
		<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
	</listener>
最后将一些公共的文件拷贝到项目里,如公共的IDAO

分页的组件:split_page.jsp

<html>
  <head>
    <base href="<%=basePath%>">
    
  </head>
  
  <body>
  
  <%--
  	使用说明:
  		列表时,将以下内容粘贴到需要分页显示的位置
  			<jsp:include page="/split_page_plugin.jsp">
				<jsp:param value="${pageNo}" name="pageNo"/>
				<jsp:param value="${pageSize}" name="pageSize"/>
				<jsp:param value="${column}" name="column"/>
				<jsp:param value="${keyword}" name="keyword"/>
				<jsp:param value="${count}" name="count"/>
				<jsp:param value="news!list.action" name="URL"/>
				<jsp:param value="title:标题|content:内容" name="columnData"/>
				<jsp:param value="1" name="pageStyle"/>
			</jsp:include>
			
			其中:
				URL为查询列表的路径.
				columnData为搜索功能的选项处理,格式:  字段名:显示文字|字段名2:显示文字2.....
				pageStyle为分页组件样式,其中1 为数字版,2为下拉列表,3或默认为文本框
			
  	
  
  --%>
  				
			<br/>
			
			<%
				int pageNo = Integer.parseInt(request.getParameter("pageNo"));
				int pageSize = Integer.parseInt(request.getParameter("pageSize"));
				int count = Integer.parseInt(request.getParameter("count"));
				int allPages = (count - 1) / pageSize + 1;
				
				String column = request.getParameter("column");
				String keyword = request.getParameter("keyword");
				
				String URL = request.getParameter("URL");
			
			%>
			
			<form action="<%=URL %>" id="split_form" method="post" οnsubmit="return checkPageNo();">				
			
				<%
					String pageStyle = request.getParameter("pageStyle");
				
					if ("1".equals(pageStyle)) {
				%>
			
				<input type="button" value="<<" <%=pageNo==1?"disabled":"" %> οnclick="changePage(1);"/>				
				<input type="button" value="<" <%=pageNo==1?"disabled":"" %> οnclick="changePage(<%=pageNo-1 %>);"/>
				
				<%
					if (pageNo - 2 > 1 ) {
				%>
				...
				<%			
					}
				
					for (int i = pageNo - 2; i <= pageNo + 2 && i <= allPages;i++) {
						if (i == pageNo) {
				%>
				<font color="red"><%=i %></font>
				<%			
						}
						
					else if (i > 0) {
				%>
					<a href="javascript:changePage(<%=i %>);"><%=i %></a>
				<%		
						}
						
					
					}
				
					if (pageNo + 2 < allPages) {
					%>
					...
					<%			
							}
				%>
				
				
				
				<input type="button" value=">" <%=allPages==pageNo?"disabled":"" %>  οnclick="changePage(<%=pageNo+1 %>)"/>
				<input type="button" value=">>" <%=allPages==pageNo?"disabled":"" %> οnclick="changePage(<%=allPages %>);"/>
				
				<input type="hidden" name="pageNo" id="pageNo" value="<%=pageNo %>"/>
				
				<%
					} else if ("2".equals(pageStyle)) {
				%>
				<input type="button" value="首页" <%=pageNo==1?"disabled":"" %> οnclick="changePage(1);"/>
				<input type="button" value="上一页" <%=pageNo==1?"disabled":"" %> οnclick="changePage(<%=pageNo - 1 %>);"/>
				<input type="button" value="下一页" <%=allPages == pageNo?"disabled":"" %> οnclick="changePage(<%=pageNo + 1 %>);"/>
				<input type="button" value="尾页" <%=allPages == pageNo?"disabled":"" %> οnclick="changePage(<%=allPages %>);"/>
				
				跳转到
				<select id="pageNo" name="pageNo" οnchange="changePage(this.value);">
					<%
						for (int i = 1; i <= allPages ;i++) {
					%>
					<option value="<%=i %>" <%=i==pageNo?"selected":"" %>><%=i %></option>
					<%
						}
					%>
				</select>
				页 
				
				<%		
						
					} else {
				%>
				<input type="button" value="首页" <%=pageNo==1?"disabled":"" %> οnclick="changePage(1);"/>
				<input type="button" value="上一页" <%=pageNo==1?"disabled":"" %> οnclick="changePage(<%=pageNo - 1 %>);"/>
				<input type="button" value="下一页" <%=allPages == pageNo?"disabled":"" %> οnclick="changePage(<%=pageNo + 1 %>);"/>
				<input type="button" value="尾页" <%=allPages == pageNo?"disabled":"" %> οnclick="changePage(<%=allPages %>);"/>
				
				跳转到
				<input type="text" id="pageNo" name="pageNo" size="3" maxlength="3" value="<%=pageNo %>"/>
				页 <input type="submit" value="Go"/>
				<%		
					}
				%>
				
				<%
					int[] allSize = {1,2,5,10,20};
				%>
				每页显示
				<select name="pageSize" id="pageSize" οnchange="changePage(1);">
					<%
						for (int i = 0;i < allSize.length;i++) {
					%>	
					<option value="<%=allSize[i] %>" <%=allSize[i]==pageSize?"selected":"" %>><%=allSize[i] %></option>
					<%
						}
					%>
				</select>
				条数据
				
				<br/>
				<select name="column" id="column">
					<%
						String columnData = request.getParameter("columnData");
						String[] dataValues = columnData.split("\\|");
						for (int i = 0;i < dataValues.length;i++) {
							String[] values = dataValues[i].split(":");
					%>
					<option value="<%=values[0] %>" <%=values[0].equals(column)?"selected":"" %>><%=values[1] %></option>
					<%		
						}
					
					%>
				</select>
				<input type="text" name="keyword" value="<%=keyword %>"/>
				<input type="submit" value="搜索"/>				
			</form> 
			
			<script type="text/javascript">
				function changePage(newPage) {
					// 改变页数
					document.getElementById("pageNo").value = newPage;
					// 提交表单,改变显示内容
					document.getElementById("split_form").submit();
				}
				
				function checkPageNo() {
					// 取得当前输入的页数
					var pageNo = document.getElementById("pageNo").value;
					// 判断是否是合法的数字
					// 在js里,使用 /^格式$/.test(内容) 来测试内容是否匹配某个格式 
					// \d(数字),\w(字母,数字或下划线), +(前面的内容有1个以上),?(0个或1个),*(有没有都可以)
					// 如果符合条件,则返回true,否则返回false 
					if (/^\d+$/.test(pageNo)) {
						// 还要判断是否在范围内
						if (pageNo >= 1 && pageNo <= <%=allPages%>) {
							// 合法
							return true;
						}
					}
					return false;
				}
			</script>
  
  
  </body>
</html>



                         


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值