Cotroller Class
@Controller @RequestMapping("/login") public class LoginController extends BaseController{..........}
public class BaseController { /** * 基础Controller,执行继承此BaseController的Controller前,先记录下当前的reuqest,response,session * @author Administrator * */ protected HttpServletRequest request; protected HttpServletResponse response; protected HttpSession session; @ModelAttribute //只要进入到此控制器,就先执行此注解标记的方法。一般此注解用于初始化...... public void setRequestAndResponse(HttpServletRequest request, HttpServletResponse response){ this.request = request; this.response = response; this.session = request.getSession(); } }
service
做抽象的业务逻辑处理,供Controller调用
serviceImpl
做具体的业务逻辑处理,并把处理的结果返回,以方便Controller传递给前端页面。
配置
<!-- 启用spring mvc 注解 --> @Controller @Service......
<mvc:annotation-driven/>
<!-- Spring注解扫描的包 -->
<context:component-scan base-package="huanghai.ocean">
<context:include-filter type="annotation" expression="org.springframework.stereotype.Controller" />
<context:exclude-filter type="annotation" expression="org.springframework.stereotype.Service" />
</context:component-scan>
页面跳转需要配置:
<!-- 视图解释类 jsp--> <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"> <property name="prefix" value="/WEB-INF/jsp/"/> <property name="suffix" value=".jsp"/> <property name="viewClass" value="org.springframework.web.servlet.view.JstlView" /> </bean>
spring-mvc.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:websocket="http://www.springframework.org/schema/websocket" xmlns:mvc="http://www.springframework.org/schema/mvc" xmlns:util="http://www.springframework.org/schema/util" xmlns:aop="http://www.springframework.org/schema/aop" xmlns:p="http://www.springframework.org/schema/p" xmlns:task="http://www.springframework.org/schema/task" xmlns:tx="http://www.springframework.org/schema/tx" xsi:schemaLocation="http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-3.2.xsd http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.2.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.2.xsd http://www.springframework.org/schema/websocket http://www.springframework.org/schema/websocket/spring-websocket.xsd http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util-3.2.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.2.xsd http://www.springframework.org/schema/task http://www.springframework.org/schema/task/spring-task-3.2.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.2.xsd "> <!-- 启用spring mvc 注解 --> <mvc:annotation-driven/> <!-- Spring注解扫描包 --> <context:component-scan base-package="huanghai.ocean"> <context:include-filter type="annotation" expression="org.springframework.stereotype.Controller" /> <context:exclude-filter type="annotation" expression="org.springframework.stereotype.Service" /> </context:component-scan> <!-- 视图解释类 jsp--> <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"> <property name="prefix" value="/WEB-INF/jsp/"/> <property name="suffix" value=".jsp"/> <property name="viewClass" value="org.springframework.web.servlet.view.JstlView" /> </bean> <!-- 文件上传 --> <bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver"> <property name="maxUploadSize" value="10485760" /> <property name="maxInMemorySize" value="1024" /> <property name="defaultEncoding" value="UTF-8" /> <property name="uploadTempDir" value="uploadfile/temp" /> </bean> </beans>
applicationContext.xml配置:
redis对String的封装→引用→redis连接的id→引用 →redis连接池的id
启用注解来管理事务→引用transactionManager的id→在transactionManager引用sessionFactory的id→在sessionFactory中引用druid的id
<!-- 激活自动代理功能 --> <aop:aspectj-autoproxy proxy-target-class="true"/> <!-- 启用Spring注解 --> <context:annotation-config/> <context:component-scan base-package="huanghai.ocean"> <context:exclude-filter type="annotation" expression="org.springframework.stereotype.Controller" /> </context:component-scan> <task:annotation-driven /> <!-- 加载数据配置文件properties --> <bean id="propertyConfigurer" class="com.ant.utils.EncryptPropertyPlaceholderConfigurer"> <property name="locations"> <list> <value>classpath:druid.test.properties</value> <value>classpath:redis.test.properties</value> </list> </property> </bean> <!-- Redis连接池 --> <bean id="jedisPoolConfig" class="redis.clients.jedis.JedisPoolConfig"> <property name="maxTotal" value="600"></property> <property name="minIdle" value="2"></property> <property name="maxWaitMillis" value="15000"></property> <property name="minEvictableIdleTimeMillis" value="100"></property> <property name="numTestsPerEvictionRun" value="100"></property> <property name="timeBetweenEvictionRunsMillis" value="1000"></property> <property name="testOnBorrow" value="true"></property> <property name="testOnReturn" value="true"></property> <property name="testWhileIdle" value="true"></property> </bean> <!-- Redis连接 --> <bean id="jedisConnectionFactory" class="org.springframework.data.redis.connection.jedis.JedisConnectionFactory" destroy-method="destroy"> <property name="hostName" value="${redis.host}" /> <property name="port" value="${redis.port}" /> <!-- <property name="password" value="${redis.password}" /> --> <property name="timeout" value="15000" /> <property name="database" value="0" /> <property name="usePool" value="true" /> <property name="poolConfig" ref="jedisPoolConfig" /> </bean> <!-- 对string操作的封装 --> <bean id="redis" class="org.springframework.data.redis.core.StringRedisTemplate" p:connection-factory-ref="jedisConnectionFactory" p:enableTransactionSupport="false" > <property name="keySerializer"> <bean class="org.springframework.data.redis.serializer.StringRedisSerializer" /> </property> <property name="hashKeySerializer"> <bean class="org.springframework.data.redis.serializer.StringRedisSerializer" /> </property> <property name="valueSerializer"> <bean class="org.springframework.data.redis.serializer.StringRedisSerializer" /> </property> <property name="hashValueSerializer"> <bean class="org.springframework.data.redis.serializer.StringRedisSerializer" /> </property> </bean> <!-- 阿里 druid 数据库连接池 --> <bean id="druid_dataSource" class="com.alibaba.druid.pool.DruidDataSource" init-method="init" destroy-method="close"> <property name="url" value="${druid.url}" /> <property name="username" value="${druid.username}" /> <property name="password" value="${druid.password}" /> <property name="driverClassName" value="${druid.driverClassName}" /> <property name="initialSize" value="${druid.initialSize}" /> <property name="maxActive" value="${druid.maxActive}" /> <property name="minIdle" value="${druid.minIdle}" /> <property name="maxWait" value="${druid.maxWait}" /> <property name="useUnfairLock" value="${druid.useUnfairLock}"></property> <property name="timeBetweenEvictionRunsMillis" value="${druid.timeBetweenEvictionRunsMillis}" /> <property name="minEvictableIdleTimeMillis" value="${druid.minEvictableIdleTimeMillis}" /> <property name = "removeAbandoned" value = "${druid.removeAbandoned}" /> <property name = "removeAbandonedTimeout" value ="${druid.removeAbandonedTimeout}" /> <property name="filters" value="${druid.filters}" /> <property name = "validationQuery" value = "${druid.validationQuery}" /> <property name = "testWhileIdle" value = "${druid.testWhileIdle}" /> <property name = "testOnBorrow" value = "${druid.testOnBorrow}" /> <property name = "testOnReturn" value = "${druid.testOnReturn}" /> <property name = "maxOpenPreparedStatements" value ="${druid.maxOpenPreparedStatements}" /> <property name = "logAbandoned" value = "${druid.logAbandoned}" /> </bean> <!-- SessionFactory --> <bean id="sessionFactory" class="org.springframework.orm.hibernate4.LocalSessionFactoryBean"> <property name="dataSource" ref="druid_dataSource" /> <property name="packagesToScan" value="com.ant" /> <property name="hibernateProperties"> <props> <prop key="hibernate.dialect"> org.hibernate.dialect.MySQLDialect </prop> <prop key="hibernate.show_sql">false</prop> <prop key="hibernate.format_sql">false</prop> <!-- 自动建表 <prop key="hibernate.hbm2ddl.auto">update</prop> --> </props> </property> </bean> <bean id="transactionManager" class="org.springframework.orm.hibernate4.HibernateTransactionManager"> <property name="sessionFactory" ref="sessionFactory" /> </bean> <!--启动注解用注解来管理事务 --> <tx:annotation-driven transaction-manager="transactionManager" />
web.xml配置
<?xml version="1.0" encoding="UTF-8"?> <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" version="3.0"> <display-name>ocean</display-name> <welcome-file-list> <welcome-file>index.jsp</welcome-file> </welcome-file-list> <context-param> <param-name>contextConfigLocation</param-name> <param-value>classpath:applicationContext.xml</param-value> </context-param> <session-config> <session-timeout>-1</session-timeout> </session-config> <listener> <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> </listener> <servlet> <servlet-name>springMVC</servlet-name> <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> <init-param> <param-name>contextConfigLocation</param-name> <param-value>classpath:spring-mvc.xml</param-value> </init-param> <load-on-startup>1</load-on-startup> </servlet>
< <servlet-mapping> <servlet-name>springMVC</servlet-name> <url-pattern>*.action</url-pattern> </servlet-mapping> <servlet-mapping> <servlet-name>springMVC</servlet-name> <url-pattern>*.html</url-pattern> </servlet-mapping> <servlet> <description>FileUpload component</description> <display-name>FileUpload component</display-name> <servlet-name>UploadFileServlet</servlet-name> <servlet-class>com.ant.web.component.FileUploadServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>UploadFileServlet</servlet-name> <url-pattern>/file/upload.action</url-pattern> </servlet-mapping> <!-- <filter> <filter-name>SecurityServlet</filter-name> <filter-class>com.ant.web.fillter.SecurityServlet</filter-class> <init-param> <param-name>excludedPages</param-name> <param-value>/app/regist.html,/app/getSmsCode.action,/app/saveUser.action,/app/success.html,/app/notice/getNewsDetailById.html,/app/help/getHelp.html,/app/rate/getRate.html,/app/algorithm/getAlgorithm.html,/app/help/about.html,/test/index.html,/user/admin.action,/test/updateData.action,/test/checkData.action</param-value> </init-param> </filter> --> <!-- <filter-mapping> <filter-name>SecurityServlet</filter-name> <url-pattern>*.action</url-pattern> <url-pattern>*.html</url-pattern> </filter-mapping> --> <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> <init-param> <param-name>forceEncoding</param-name> <param-value>true</param-value> </init-param> </filter> <filter-mapping> <filter-name>encodingFilter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> <filter> <filter-name>openSession</filter-name> <filter-class>org.springframework.orm.hibernate4.support.OpenSessionInViewFilter</filter-class> </filter> <filter-mapping> <filter-name>openSession</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> </web-app>
druid.test.properties文件:
#59.110.173.126 | 172.17.196.134
druid.url=jdbc:mysql://localhost:3306/lvmeihe?useUnicode=true&characterEncoding=utf-8
druid.username=TJwEMVcaIsU=
druid.password=TJwEMVcaIsU=
#驱动器
druid.driverClassName=com.mysql.jdbc.Driver
#初始化连接
druid.initialSize=10
#最大连接池数量
druid.maxActive=500
#最小连接池数量
druid.minIdle=10
#获取连接时最大等待时间,单位毫秒。配置了maxWait之后,缺省启用公平锁,并发效率会有所下降,如果需要可以通过配置useUnfairLock属性为true使用非公平锁。
druid.maxWait=60000
#是否使用非公平锁
druid.useUnfairLock=true
#1) Destroy线程会检测连接的间隔时间2) testWhileIdle的判断依据,详细看testWhileIdle属性的说明
druid.timeBetweenEvictionRunsMillis=2000
#Destory线程中如果检测到当前连接的最后活跃时间和当前时间的差值大于minEvictableIdleTimeMillis,则关闭当前连接。
druid.minEvictableIdleTimeMillis=30000
#对于建立时间超过removeAbandonedTimeout的连接强制关闭
druid.removeAbandoned=true
#指定连接建立多长时间就需要被强制关闭
druid.removeAbandonedTimeout=1200
druid.filters=stat
druid.validationQuery=SELECT 'x'
druid.testWhileIdle=true
druid.testOnBorrow=false
druid.testOnReturn=false
druid.maxOpenPreparedStatements=20
druid.logAbandoned=true
redis.test.properties文件:
redis.host=172.16.1.15
redis.port=6379
redis.password=