package com.oa.util;
public class Pager {
private int totalRows; //总行数 private int pageSize = 10; //每页显示的行数 private int currentPage; //当前页号 private int totalPages; //总页数 private int startRow; //当前页在数据库中的起始行
public Pager() { }
public Pager(int _totalRows) { totalRows = _totalRows; totalPages=totalRows/pageSize; int mod=totalRows%pageSize; if(mod>0){ totalPages++; } currentPage = 1; startRow = 0; }
public int getStartRow() { return startRow; }
public int getTotalPages() { return totalPages; }
public int getCurrentPage() { return currentPage; }
public int getPageSize() { return pageSize; }
public void setTotalRows(int totalRows) { this.totalRows = totalRows; }
public void setStartRow(int startRow) { this.startRow = startRow; }
public void setTotalPages(int totalPages) { this.totalPages = totalPages; }
public void setCurrentPage(int currentPage) { this.currentPage = currentPage; }
public void setPageSize(int pageSize) { this.pageSize = pageSize; }
public int getTotalRows() { return totalRows; }
public void first() { currentPage = 1; startRow = 0; }
public void previous() { if (currentPage == 1) { return; } currentPage--; startRow = (currentPage - 1) * pageSize; }
public void next() { if (currentPage < totalPages) { currentPage++; } startRow = (currentPage - 1) * pageSize; }
public void last() { currentPage = totalPages; startRow = (currentPage - 1) * pageSize; }
public void refresh(int _currentPage) { currentPage = _currentPage; if (currentPage > totalPages) { last(); } }
}
PagerHelp类:
package com.oa.util;
import javax.servlet.http.HttpServletRequest;
public class PagerHelp { public static Pager getPager(HttpServletRequest httpServletRequest,int totalRows) {
//定义pager对象,用于传到页面 Pager pager = new Pager(totalRows);
//从Request对象中获取当前页号 String currentPage = httpServletRequest.getParameter("currentPage"); //如果当前页号为空,表示为首次查询该页 //如果不为空,则刷新pager对象,输入当前页号等信息 if (currentPage != null) { pager.refresh(Integer.parseInt(currentPage)); }
//获取当前执行的方法,首页,前一页,后一页,尾页。 String pagerMethod = httpServletRequest.getParameter("pageMethod"); if (pagerMethod != null) { if (pagerMethod.equals("first")) { pager.first(); } else if (pagerMethod.equals("previous")) { pager.previous(); } else if (pagerMethod.equals("next")) { pager.next(); } else if (pagerMethod.equals("last")) { pager.last(); } } return pager; } }
7 Struts中的Action毫无疑问就是属于C层次了,当然也可以说是V层:
package com.oa.view.struts.action;
import java.util.ArrayList;
import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;
import org.apache.struts.action.Action;import org.apache.struts.action.ActionForm;import org.apache.struts.action.ActionForward;import org.apache.struts.action.ActionMapping;import org.apache.struts.actions.DispatchAction;import org.apache.struts.validator.DynaValidatorForm;
import com.oa.model.service.IUserService;import com.oa.util.Pager;import com.oa.util.PagerHelp;
public class ShowAllUserAction extends Action {
private IUserService userService;
public ActionForward execute( ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) { ArrayList list=new ArrayList(); int totalRows;//记录总行数 totalRows=userService.counter(); Pager page=new Pager(); page=PagerHelp.getPager(request,totalRows); list=(ArrayList) userService.findWithPage(page.getPageSize(),page.getStartRow()); request.setAttribute("list", list); request.setAttribute("page", page);
return mapping.findForward("show_ok"); } public IUserService getUserService() { return userService; } public void setUserService(IUserService userService) { this.userService = userService; }
}
8 Spring 的核心配置文件当然就不用说了:如下
<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd">
<beans>
<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource"> <property name="driverClassName"> <value>com.mysql.jdbc.Driver</value> </property> <property name="url"> <value>jdbc:mysql://localhost:3307/test</value> </property> <property name="username"> <value>root</value> </property> <property name="password"> <value>root</value> </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.MySQLDialect</prop> <prop key="hibernate.show_sql">true</prop> </props> </property> <property name="mappingResources"> <list> <value>com/oa/data/bo/User.hbm.xml</value> </list> </property> </bean> <bean id="UserDAO" class="com.oa.data.dao.impl.UserDAO"> <property name="sessionFactory"> <ref bean="sessionFactory" /> </property> </bean> <!-- 创建事务管理类 --> <bean id="transactionManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager"> <property name="sessionFactory"> <ref local="sessionFactory" /> </property> </bean> <!-- 创建用户事务代理类 --> <bean id="userDaoProxy" class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean"> <property name="transactionManager"> <ref bean="transactionManager" /> </property> <property name="target"> <ref local="UserDAO" /> </property> <property name="transactionAttributes"> <props> <prop key="insert*">PROPAGATION_REQUIRED</prop> <prop key="update*">PROPAGATION_REQUIRED,readOnly</prop> <prop key="*">PROPAGATION_REQUIRED,readOnly</prop> </props> </property> </bean> </beans>
9 服务上下文也写了个XML文件,serviceContext.xml ,当然也可以写在application.xml文件中
<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd"><beans> <bean id="UserService" class="com.oa.model.service.impl.UserService"> <property name="userDAO"> <ref bean="userDaoProxy" /> </property> </bean></beans>
10 viewContext.xml文件把所有的Action都做修配置,因为每个Action中都有个服务类的对象来处理业务,
<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd"><beans> <bean name="/login" class="com.oa.view.struts.action.UserAction" singleton="false"> <property name="userService"> <ref bean="UserService" /> </property> </bean> <bean name="/login_test" class="com.oa.view.struts.action.Login2Action" singleton="false"> <property name="userService"> <ref bean="UserService" /> </property> </bean> <bean name="/test" class="com.oa.view.struts.action.TestAction" singleton="false"> <property name="userService"> <ref bean="UserService" /> </property> </bean> <bean name="/showAllUser" class="com.oa.view.struts.action.ShowAllUserAction" singleton="false"> <property name="userService"> <ref bean="UserService" /> </property> </bean></beans>
11 struts-config文件可以说是使用了Spring之后变化比较大的地方了:
<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE struts-config PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 1.2//EN" "http://struts.apache.org/dtds/struts-config_1_2.dtd">
<struts-config> <data-sources /> <form-beans> <form-bean name="loginForm" type="org.apache.struts.validator.DynaValidatorForm"> <form-property name="password" type="java.lang.String" /> <form-property name="username" type="java.lang.String" /> <form-property name="password1" type="java.lang.String" /> <form-property name="username1" type="java.lang.String" /> </form-bean> <form-bean name="testForm" type="org.apache.struts.validator.DynaValidatorForm"> <form-property name="username2" type="java.lang.String" /> <form-property name="password2" type="java.lang.String" /> </form-bean> </form-beans>
<global-exceptions /> <global-forwards> <forward name="goOk" path="/ok.jsp" /> </global-forwards> <action-mappings> <action attribute="loginForm" input="/login.jsp" name="loginForm" parameter="method" path="/login" validate="true" scope="request" type="org.springframework.web.struts.DelegatingActionProxy" /> <action attribute="loginForm" input="/login.jsp" name="loginForm" parameter="method" path="/login_test" scope="request" validate="true" type="org.springframework.web.struts.DelegatingActionProxy" /> <action attribute="testForm" input="/login.jsp" name="testForm" path="/test" scope="request" type="com.oa.view.struts.action.TestAction" /> <action path="/showAllUser" scope="request" type="org.springframework.web.struts.DelegatingActionProxy"> <forward name="show_ok" path="/ok.jsp" /> </action> <action path="/showalluser2" type="com.oa.view.struts.action.Showalluser2Action"> <forward name="ok" path="/ok.jsp" /> </action> </action-mappings>
<message-resources parameter="com.oa.view.struts.ApplicationResources" /> <plug-in className="org.apache.struts.tiles.TilesPlugin"> <set-property property="definitions-parser-validate" value="true" /> <set-property property="definitions-config" value="/WEB-INF/tiles-config.xml" /> </plug-in>
<plug-in className="org.apache.struts.validator.ValidatorPlugIn"> <set-property property="pathnames" value="/WEB-INF/validator-rules.xml,/WEB-INF/validation.xml" /> </plug-in>
<plug-in className="org.springframework.web.struts.ContextLoaderPlugIn"> <set-property property="contextConfigLocation" value="/WEB-INF/applicationContext.xml,/WEB-INF/serviceContext.xml,/WEB-INF/viewContext.xml" /> </plug-in>
</struts-config>
12 最后当然是页面jsp文件了:
Login.jsp文件:
<%@ page language="java" contentType="text/html; charset=UTF-8"%><%@ taglib uri="http://jakarta.apache.org/struts/tags-bean" prefix="bean"%> <%@ taglib uri="http://jakarta.apache.org/struts/tags-html" prefix="html"%> <html> <head> <title>Login</title> </head> <body> <html:errors/><br> <html:form action="/login_test"> <bean:message key="user.name"/> : <html:text property="username"/><br/> <bean:message key="user.password"/> : <html:password property="password"/><br/> <input type="submit" value="<bean:message key="page.command.submit"/>" οnclick="document.forms[0].action='login.do?method=loginAction';document.forms[0].submit();"> </html:form> <hr> <a name="a" href="/showAllUser.do?pageMethod=first¤tPage=0">show _fcksavedurl=""/showAllUser.do?pageMethod=first¤tPage=0">show" _fcksavedurl=""/showAllUser.do?pageMethod=first¤tPage=0">show" all user</a> <a name="a" href="/showalluser2.do">show all user</a> <br> </body></html>
ok.jsp 主要是显示了分页的显示:
<%@ page language="java" contentType="text/html; charset=UTF-8"%><%@ taglib uri="http://jakarta.apache.org/struts/tags-bean" prefix="bean"%> <%@ taglib uri="http://jakarta.apache.org/struts/tags-html" prefix="html"%><%@page import="java.util.*"%><%@page import="com.oa.data.bo.User"%><%@page import="com.oa.util.Pager"%><html> <head> <title>OK!!!</title> </head> <body> <bean:message key="user.login.text2"/> <bean:message key="user.login.text4"/> <hr>
<% ArrayList list=new ArrayList(); User user=new User(); if(request.getAttribute("list")!=null) { list=(ArrayList)request.getAttribute("list"); for(int i=0;i<list.size();i++) { user=(User)list.get(i); %> <table width="100%" border="1" cellspacing="0" cellpadding="0"> <tr> <td height="25"><%=user.getUserName()%></td> <td height="25"><%=user.getUserPwd()%></td> </tr> </table> <% } } %> <% if(request.getAttribute("page")!=null) { Pager p=(Pager)request.getAttribute("page"); %> <table width="100%" border="1" cellspacing="0" cellpadding="0"> <tr> <td height="25"> 第<%=p.getCurrentPage()%>页 共<%=p.getTotalPages()%>页 <a href="/showAllUser.do?pageMethod=first¤tPage=1%>">首页</a> <a href="/showAllUser.do?pageMethod=next¤tPage=<%=p.getCurrentPage()%>">下页</a> <a href="/showAllUser.do?pageMethod=previous¤tPage=<%=p.getCurrentPage()%>">上页</a> <a href="/showAllUser.do?pageMethod=last¤tPage=<%=p.getCurrentPage()%>">末页</a> </td> </tr> </table> <% } %> </body> </html>