这段时间不是很忙,头给我说了个事儿:让我把公司的网站给整整,想起来公司好多技术都该换新版本了,这正好是个机会,于是就搭了一套最新的开发框架。
IDE:myeclipse8.6
JAR包管理:maven2
spring版本:3.0.6.RELEASE
(maven中央库目前不支持3.1.0)
struts版本:2.2.3
hibernate版本:3.6.8
1.在myeclipse中新建一个maven工程:
1.1 File-->New-->Other-->MyEclipse-->Maven-->Java Maven Project
1.2 输入工程名、groupId、artifactId以及版本号
1.3 在新建的工程中点右键-->Myeclipse-->Add Web Project Capabilities
关于这种建工程的方式,有以下几点需要说明:
1》我不知道在myeclipse如何直接建maven web工程,用maven自带的那个web工程插件建造不了,所以
就这么建了,知道怎么直接建的跟我说声,不过这样建有一个好处,就是可以部署到tomcat里面运行。
2》不想用maven的我在下面贴出来jar包列表,你们可以自己下载。
2.pom文件
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>baseFrameForMaven</groupId> <artifactId>baseFrameForMaven</artifactId> <version>1.0.0-SNAPSHOT</version> <packaging>war</packaging> <name>baseFrameForMaven</name> <url>http://maven.apache.org</url> <properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> </properties> <dependencies> <!-- J2EE容器所需包 --> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>3.8.1</version> <scope>test</scope> </dependency> <dependency> <groupId>org.apache.openejb</groupId> <artifactId>javaee-api</artifactId> <version>5.0-1</version> <scope>provided</scope> </dependency> <dependency> <groupId>javax.faces</groupId> <artifactId>jsf-api</artifactId> <version>1.2_04</version> <scope>provided</scope> </dependency> <dependency> <groupId>javax.servlet</groupId> <artifactId>jstl</artifactId> <version>1.2</version> <scope>provided</scope> </dependency> <dependency> <groupId>javax.servlet.jsp</groupId> <artifactId>jsp-api</artifactId> <version>2.1</version> <scope>provided</scope> </dependency> <dependency> <groupId>javax.faces</groupId> <artifactId>jsf-impl</artifactId> <version>1.2_04</version> <scope>provided</scope> </dependency> <dependency> <groupId>org.aspectj</groupId> <artifactId>aspectjweaver</artifactId> <version>1.6.12</version> </dependency> <!-- mysql数据库驱动 --> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>5.1.18</version> </dependency> <!-- c3p0数据库连接池 --> <dependency> <groupId>c3p0</groupId> <artifactId>c3p0</artifactId> <version>0.9.1.2</version> </dependency> <!-- 这个包是我自己的,主要提供的一些通用hibernate方法,如果没有可以去掉 --> <dependency> <groupId>cn.apple.erp</groupId> <artifactId>erp_base</artifactId> <version>1.0.0</version> <exclusions> <exclusion> <groupId>org.hibernate</groupId> <artifactId>hibernate</artifactId> </exclusion> <exclusion> <groupId>proxool</groupId> <artifactId>proxool</artifactId> </exclusion> </exclusions> </dependency> <!-- ======================================================================= --> <!-- spring必须包 --> <!-- spring核心包 --> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-core</artifactId> <version>3.0.6.RELEASE</version> <!-- spring-asm-3.0.6.RELEASE.jar --> <!-- commons-logging-1.1.1.jar --> </dependency> <!-- 利用IOC管理Bean的包 --> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-beans</artifactId> <version>3.0.6.RELEASE</version> </dependency> <!-- 对bean再次封装后的包,方便性强。 --> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-context</artifactId> <version>3.0.6.RELEASE</version> <!-- spring-expression-3.0.6.RELEASE.jar --> <!-- spring-aop-3.0.6.RELEASE.jar --> <!-- aopalliance-1.0.jar --> </dependency> <!-- spring扩展包 --> <!-- SpringWeb下的工具包 --> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-web</artifactId> <version>3.0.6.RELEASE</version> </dependency> <!-- 对struts支持包 --> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-struts</artifactId> <version>3.0.6.RELEASE</version> <!-- spring-struts-3.0.6.RELEASE.jar --> <!-- commons-validator-1.1.4.jar --> <!-- commons-beanutils-1.7.0.jar --> <!-- commons-digester-1.6.jar --> <!-- oro-2.0.7.jar --> <!-- spring-context-support-3.0.6.RELEASE.jar --> <!-- struts-1.2.9.jar --> <!-- spring-webmvc-3.0.6.RELEASE.jar --> <!-- xalan-2.5.1.jar --> </dependency> <!-- 支持hibernate,对对象映射框架的支持 --> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-orm</artifactId> <version>3.0.6.RELEASE</version> <!-- spring-tx-3.0.6.RELEASE.jar --> <!-- spring-jdbc-3.0.6.RELEASE.jar --> </dependency> <dependency> <groupId>commons-dbcp</groupId> <artifactId>commons-dbcp</artifactId> <version>1.4</version> </dependency> <!-- ======================================================================= --> <!-- struts2.2.3必须包 --> <dependency> <groupId>org.apache.struts</groupId> <artifactId>struts2-core</artifactId> <version>2.2.3.1</version> <!-- ognl-3.0.1.jar --> <!-- asm-commons-3.1.jar --> <!-- asm-tree-3.1.jar --> <!-- commons-lang-2.5.jar --> <!-- commons-fileupload-1.2.2.jar --> <!-- commons-io-2.0.1.jar --> <!-- xwork-core-2.2.3.1.jar --> <!-- javassist-3.11.0.GA.jar --> <!-- freemarker-2.3.16.jar --> </dependency> <!-- 日志功能 --> <dependency> <groupId>commons-logging</groupId> <artifactId>commons-logging</artifactId> <version>1.1</version> <!-- avalon-framework-4.1.3.jar --> <!-- servlet-api-2.3.jar --> <!-- logkit-1.0.1.jar --> <!-- log4j-1.2.12.jar --> </dependency> <!-- ASM字节码库 --> <dependency> <groupId>asm</groupId> <artifactId>asm</artifactId> <version>3.1</version> </dependency> <!-- struts2对于spring的支持 --> <dependency> <groupId>org.apache.struts</groupId> <artifactId>struts2-spring-plugin</artifactId> <version>2.2.3.1</version> </dependency> <!-- struts2中对于注解的支持 --> <dependency> <groupId>org.apache.struts</groupId> <artifactId>struts2-convention-plugin</artifactId> <version>2.2.3.1</version> </dependency> <!-- hibernate3.6.8必须包 --> <!-- hibernate核心包 --> <dependency> <groupId>org.hibernate</groupId> <artifactId>hibernate-core</artifactId> <version>3.6.8.Final</version> <exclusions> <exclusion> <groupId>commons-collections</groupId> <artifactId>commons-collections</artifactId> </exclusion> <exclusion> <groupId>dom4j</groupId> <artifactId>dom4j</artifactId> </exclusion> <exclusion> <groupId>org.slf4j</groupId> <artifactId>slf4j-api</artifactId> </exclusion> </exclusions> <!-- hibernate-commons-annotations-3.2.0.Final.jar1 --> <!-- hibernate-jpa-2.0-api-1.0.1.Final.jar --> <!-- jta-1.1.jar --> </dependency> <!-- hibernate使用的一个日志系统 --> <dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-api</artifactId> <version>1.6.4</version> </dependency> <!-- 集合类 --> <dependency> <groupId>commons-collections</groupId> <artifactId>commons-collections</artifactId> <version>3.2.1</version> </dependency> <!-- XML配置和映射管理器--> <dependency> <groupId>dom4j</groupId> <artifactId>dom4j</artifactId> <version>1.6.1</version> </dependency> <!-- ASM字节码库--> <dependency> <groupId>asm</groupId> <artifactId>asm-attrs</artifactId> <version>2.2.3</version> </dependency> <!-- cglib字节码解释器--> <dependency> <groupId>cglib</groupId> <artifactId>cglib-nodep</artifactId> <version>2.2.2</version> </dependency> </dependencies> </project>
3. web.xml
<?xml version="1.0" encoding="UTF-8"?> <web-app version="2.5" 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_2_5.xsd"> <!-- log4j配置文件地址 --> <context-param> <param-name>log4jConfigLocation</param-name> <param-value>classpath:resources/log4j/log4j.properties</param-value> </context-param> <!-- 配置spring的配置文件 --> <context-param> <param-name>contextConfigLocation</param-name> <param-value>classpath:resources/spring/applicationContext.xml</param-value> </context-param> <!-- log4j监听 --> <listener> <listener-class>org.springframework.web.util.Log4jConfigListener</listener-class> </listener> <!-- Open Session In View Filter --> <!-- Spring提供的一个针对Hibernate的一个支持类, 发起一个页面请求时打开Hibernate的Session,一直保持这个Session,直到这个请求结束 --> <filter> <filter-name>OpenSessionInViewFilter</filter-name> <filter-class>org.springframework.orm.hibernate3.support.OpenSessionInViewFilter</filter-class> <init-param> <param-name>singleSession</param-name> <param-value>true</param-value> </init-param> </filter> <filter-mapping> <filter-name>OpenSessionInViewFilter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> <!-- Spring监听 --> <listener> <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> </listener> <!-- spring编码过滤器 --> <filter> <filter-name>Set Character Encoding</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> <init-param> <param-name>forceEncoding</param-name> <!-- 强制进行转码 --> <param-value>true</param-value> </init-param> </filter> <filter-mapping> <filter-name>Set Character Encoding</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> <!-- Struts2配置信息 --> <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>platform-web.xml,struts-default.xml,struts-plugin.xml,resources/struts/struts.xml</param-value> </init-param> </filter> <filter-mapping> <filter-name>struts2</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> <!-- 欢迎页面 --> <welcome-file-list> <welcome-file>/jsp/login/login.jsp</welcome-file> </welcome-file-list> </web-app>
4. log4j.properties
### set log levels ### log4j.rootLogger = debug, stdout, D, E ### \u8f93\u51fa\u5230\u63a7\u5236\u53f0 ### #kong zhi tai log4j.appender.stdout = org.apache.log4j.ConsoleAppender log4j.appender.stdout.Target = System.out log4j.appender.stdout.layout = org.apache.log4j.PatternLayout log4j.appender.stdout.layout.ConversionPattern = %-d{yyyy-MM-dd HH:mm:ss} [%t:%r] - [%p] %m%n ### \u8f93\u51fa\u5230\u65e5\u5fd7\u6587\u4ef6 ### log4j.appender.D = org.apache.log4j.DailyRollingFileAppender log4j.appender.D.File = ${webapp.root}/logs/log.log log4j.appender.D.Append = true log4j.appender.D.Threshold = DEBUG log4j.appender.D.layout = org.apache.log4j.PatternLayout log4j.appender.D.layout.ConversionPattern = %-d{yyyy-MM-dd HH:mm:ss} [%t:%r] - [%p] %m%n ### \u4fdd\u5b58\u5f02\u5e38\u4fe1\u606f\u5230\u5355\u72ec\u6587\u4ef6 ### log4j.appender.E = org.apache.log4j.DailyRollingFileAppender log4j.appender.E.File = ${webapp.root}/logs/error.log log4j.appender.E.Append = true log4j.appender.E.Threshold = ERROR log4j.appender.E.layout = org.apache.log4j.PatternLayout log4j.appender.E.layout.ConversionPattern =%-d{yyyy-MM-dd HH\:mm\:ss} [%t\:%r] - [%p] %m%n
5. applicationContext.xml
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context" xmlns:aop="http://www.springframework.org/schema/aop" xmlns:tx="http://www.springframework.org/schema/tx" xsi:schemaLocation=" http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.0.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.0.xsd"> <!-- 使用 annotation --> <context:annotation-config /> <!-- 使用 annotation 自动注册bean,并检查@Controller, @Service, @Repository注解已被注入 --> <context:component-scan base-package="cn.apple.baseFrameForMaven.*" /> <!-- hibernate属性配置 --> <context:property-placeholder location="classpath:resources/hibernate/hibernate.properties"/> <!-- hibernate 配置管理 --> <import resource="applicationContext-persistence.xml" /> </beans>
6. applicationContext-persistence.xml
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context" xmlns:aop="http://www.springframework.org/schema/aop" xmlns:tx="http://www.springframework.org/schema/tx" xsi:schemaLocation=" http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx.xsd"> <!-- C3P0 数据源 --> <bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource"> <property name="driverClass" value="${hibernate.connection.driver_class}"/> <property name="jdbcUrl" value="${hibernate.connection.url}"/> <property name="properties"> <props> <prop key="user">${hibernate.connection.username}</prop> <prop key="password">${hibernate.connection.password}</prop> </props> </property> </bean> <!-- 配置hibernate3相关属性 --> <bean id="sessionFactory" class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean"> <property name="dataSource" ref="dataSource" /> <property name="packagesToScan" value="cn.apple.baseFrameForMaven.model"/> <property name="hibernateProperties"> <props> <prop key="hibernate.dialect">${hibernate.dialect}</prop> <prop key="hibernate.show_sql">${hibernate.show_sql}</prop> <prop key="hibernate.format_sql">${hibernate.format_sql}</prop> <prop key="hibernate.hbm2ddl.auto">${hibernate.hbm2ddl.auto}</prop> <prop key="hibernate.cache.provider_class">${hibernate.cache.provider_class}</prop> <prop key="hibernate.cache.use_query_cache">${hibernate.cache.use_query_cache}</prop> <prop key="hibernate.cache.use_second_level_cache">${hibernate.cache.use_second_level_cache}</prop> </props> </property> </bean> <!-- 配置事务管理 --> <bean id="transactionManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager"> <property name="sessionFactory" ref="sessionFactory" /> </bean> <!-- 配置注解实现管理事务(cglib:proxy-target-class="true") --> <tx:annotation-driven transaction-manager="transactionManager" proxy-target-class="true" /> </beans>
7. hibernate.properties
## hibernate hibernate.dialect=org.hibernate.dialect.MySQLDialect hibernate.show_sql=true hibernate.format_sql=false hibernate.hbm2ddl.auto=update ## hibernate cache hibernate.cache.provider_class=org.hibernate.cache.HashtableCacheProvider hibernate.cache.use_query_cache=false hibernate.cache.use_second_level_cache=true ## C3P0 configuration hibernate.connection.driver_class=com.mysql.jdbc.Driver hibernate.connection.url=jdbc:mysql://localhost:3306/baseframeformaven??useUnicode=true&characterEncoding=utf-8 hibernate.connection.username=root hibernate.connection.password=123
8. struts.xml
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN" "http://struts.apache.org/dtds/struts-2.0.dtd"> <struts> <!-- 开启使用开发模式,详细错误提示 --> <constant name="struts.devMode" value="false" /> <!-- 将对象交给spring管理 --> <constant name="struts.objectFactory" value="spring" /> <!-- 指定资源编码类型 --> <constant name="struts.i18n.encoding" value="UTF-8" /> <!-- 指定每次请求到达,重新加载资源文件 --> <constant name="struts.i18n.reload" value="false" /> <!-- 指定每次配置文件更改后,自动重新加载 --> <constant name="struts.configuration.xml.reload" value="false" /> <!-- 国际化资源文件 --> <constant name="struts.custom.i18n.resources" value="resources/content/Language" /> <!-- 默认后缀名 --> <constant name="struts.action.extension" value="do,action,jhtml,," /> <!-- Struts Annotation --> <constant name="actionPackages" value="cn.apple.baseFrameForMaven.action"/> <!-- 去掉struts2标签的自带样式 --> <constant name="struts.ui.theme" value="simple" /> <constant name="struts.ui.templateDir" value="template" /> <constant name="struts.ui.templateSuffix" value="ftl" /> </struts>
9. Language_zh_CN.properties
Demo=\u793A\u4F8B
10. Language_en_US.properties
Demo=Demo Page
11. 如此这般,不出意外,你的程序就应该可以跑起来了,我写了一个简单的登录程序验证一下:
login.jsp
<%@ page language="java" contentType="text/html" pageEncoding="UTF-8"%> <%@ taglib uri="/struts-tags" prefix="s" %> <% String path = request.getContextPath(); String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/"; %> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <base href="<%=basePath%>"> <title>基础框架--登录</title> </head> <body> <s:form action="loginAction"> <s:label value="%{#request.errorMessage}"/> <s:textfield id="login" name="login" label="帐号" maxlength="36" size="20"/> <s:password id="password" name="password" label="密码" maxlength="12" size="19"/> <s:submit value="登陆" onclick="return validate()"/> </s:form> </body> </html>
success.jsp
<%@ page language="java" contentType="text/html" pageEncoding="UTF-8"%> <%@ taglib uri="/struts-tags" prefix="s" %> <% String path = request.getContextPath(); String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/"; %> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <base href="<%=basePath%>"> <title>基础框架--登录成功</title> </head> <body> 欢迎您:<s:label value="%{#request.userName}"/> </body> </html>
package cn.apple.baseFrameForMaven.action; import javax.annotation.Resource; import org.apache.struts2.convention.annotation.Action; import org.apache.struts2.convention.annotation.Result; import org.springframework.stereotype.Controller; import cn.apple.erp.base.action.BaseAction; import cn.apple.baseFrameForMaven.model.User; import cn.apple.baseFrameForMaven.service.UserService; /** * 登录用ACTION * * @author 张鑫 * */ @Controller public class LoginAction extends BaseAction { private static final long serialVersionUID = 1L; @Resource private UserService userService;//用户信息service层 /** * 用户登录验证 * * @return */ @SuppressWarnings("restriction") @Action(value = "/loginAction", results = { @Result(name = ERROR, location = "/jsp/login/login.jsp"), @Result(name = SUCCESS, location = "/jsp/login/success.jsp") }) public String verification(){ //从页面获取帐号和密码 String login = httpServletRequest.getParameter("login"); String password = httpServletRequest.getParameter("password"); User user = userService.findUserByLogin(login);//根据帐号到数据库中获取用户信息 //处理返回值信息 if(user==null){ //没有该用户 httpServletRequest.setAttribute("errorMessage", "该账户不存在");//设置出错提示信息 return ERROR; }else if(user.getUser_password()==null){ //数据库该用户密码为空 httpServletRequest.setAttribute("errorMessage", "帐号异常:没有密码。请联系管理员或者重新注册");//设置出错提示信息 return ERROR; }else if(!(user.getUser_password().equals(password))){ //判断密码是否匹配 httpServletRequest.setAttribute("errorMessage", "密码错误");//设置出错提示信息 return ERROR; }else{ //登录成功,用户信息放入session httpServletRequest.setAttribute("userName", user.getUser_name());//设置用户名 return SUCCESS; } } }
其他层我就不再往上写了。