β

spring-session-redis共享的配置

lenglingx的个人页面 44 阅读

spring-session-redis共享的配置,为了复制方便特意做到这里。

一、 maven web项目的依赖

pom.xml中添加properties

	<properties>
		<!-- 文件拷贝时的编码 -->
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
        <!-- 编译时的编码 -->
        <maven.compiler.encoding>UTF-8</maven.compiler.encoding>
        <!-- spring版本号 -->
		<spring.version>4.3.10.RELEASE</spring.version>
	</properties>

pom.xml添加web项目和spring的依赖

        <!-- servlet -->
		<dependency>
			<groupId>javax.servlet</groupId>
			<artifactId>javax.servlet-api</artifactId>
			<version>3.1.0</version>
			<scope>provided</scope>
		</dependency>
		<!-- jsp -->
		<dependency>
			<groupId>javax.servlet.jsp</groupId>
			<artifactId>javax.servlet.jsp-api</artifactId>
			<version>2.3.1</version>
			<scope>provided</scope>
		</dependency>
		<!-- jstl -->
		<dependency>
			<groupId>javax.servlet.jsp.jstl</groupId>
			<artifactId>javax.servlet.jsp.jstl-api</artifactId>
			<version>1.2.1</version>
			<scope>provided</scope>
		</dependency>

		<!-- taglibs-standard-spec -->
		<dependency>
			<groupId>org.apache.taglibs</groupId>
			<artifactId>taglibs-standard-spec</artifactId>
			<version>1.2.5</version>
		</dependency>
		<!-- taglibs-standard-impl -->
		<dependency>
			<groupId>org.apache.taglibs</groupId>
			<artifactId>taglibs-standard-impl</artifactId>
			<version>1.2.5</version>
		</dependency>

		<!-- commons-logging -->
		<dependency>
			<groupId>commons-logging</groupId>
			<artifactId>commons-logging</artifactId>
			<version>1.2</version>
		</dependency>
		<!-- log4j -->
		<dependency>
			<groupId>log4j</groupId>
			<artifactId>log4j</artifactId>
			<version>1.2.17</version>
		</dependency>
		
		<!-- spring -->
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-core</artifactId>
			<version>${spring.version}</version>
		</dependency>
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-context</artifactId>
			<version>${spring.version}</version>
		</dependency>
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-beans</artifactId>
			<version>${spring.version}</version>
		</dependency>
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-aop</artifactId>
			<version>${spring.version}</version>
		</dependency>
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-expression</artifactId>
			<version>${spring.version}</version>
		</dependency>
			
		<!-- spring-context-support -->
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-context-support</artifactId>
			<version>${spring.version}</version>
		</dependency>
		
		<!-- spring-mvc -->
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-web</artifactId>
			<version>${spring.version}</version>
		</dependency>
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-webmvc</artifactId>
			<version>${spring.version}</version>
		</dependency>
		
		<!-- spring-jdbc -->
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-jdbc</artifactId>
			<version>${spring.version}</version>
		</dependency>
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-tx</artifactId>
			<version>${spring.version}</version>
		</dependency>
		
		<!-- spring-orm -->
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-orm</artifactId>
			<version>${spring.version}</version>
		</dependency>
		<!-- spring-oxm -->
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-oxm</artifactId>
			<version>${spring.version}</version>
		</dependency>
		<!-- spring-jms -->
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-jms</artifactId>
			<version>${spring.version}</version>
		</dependency>

		<!-- spring-aspects -->
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-aspects</artifactId>
			<version>${spring.version}</version>
		</dependency>

		<!-- spring-test -->
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-test</artifactId>
			<version>${spring.version}</version>
		</dependency>

pom.xml添加spring-session-redis的依赖

        <!-- spring-session-data-redis -->
		<dependency>
			<groupId>org.springframework.session</groupId>
			<artifactId>spring-session-data-redis</artifactId>
			<version>1.3.1.RELEASE</version>
		</dependency>

二、 修改web.xml

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee" xmlns:web="http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
	version="3.1" xmlns="http://xmlns.jcp.org/xml/ns/javaee">

	<welcome-file-list>
		<welcome-file>index.jsp</welcome-file>
		<welcome-file>index.html</welcome-file>
	</welcome-file-list>

	<context-param>
		<param-name>contextConfigLocation</param-name>
		<param-value>classpath:applicationContext.xml</param-value>
	</context-param>
	<context-param>
		<param-name>log4jConfigLocation</param-name>
		<param-value>classpath:log4j.properties</param-value>
	</context-param>

	<listener>
		<listener-class>org.springframework.web.util.Log4jConfigListener</listener-class>
	</listener>
	<listener>
		<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
	</listener>
	<listener>
	  <listener-class>org.springframework.web.context.request.RequestContextListener</listener-class>
	</listener>

	
	<filter>
		<filter-name>springSessionRepositoryFilter</filter-name>
		<filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class>
	</filter>
	<filter-mapping>
		<filter-name>springSessionRepositoryFilter</filter-name>
		<url-pattern>/*</url-pattern>
	</filter-mapping>
	
	<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:springmvc-servlet.xml</param-value>
		</init-param>
		<load-on-startup>1</load-on-startup>
	</servlet>
	<servlet-mapping>
		<servlet-name>springmvc</servlet-name>
		<url-pattern>*.do</url-pattern>
	</servlet-mapping>
	
	<session-config>
		<session-timeout>2</session-timeout>
	</session-config>

</web-app>

在web.xml中添加了spring的配置,spring-mvc的配置,已经ContLoaderListener和RequestContextListener的监听。

附带提下ContextLoaderListener与RequestContextListener的区别

ContextLoaderListener extends ContextLoader implements ServletContextListener
RequestContextListener implements ServletRequestListener

ServletContextListener extends EventListener。
ServletContextListener只负责监听Web容器的启动和关闭的事件。
ContextLoaderListener(或ContextLoaderServlet)将Web容器与spring容器进行整合。

  <listener>
    <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
  </listener> 
<context-param>
  <param-name>contextConfigLocation</param-name>
  <param-value>classpath:applicationContext.xml</param-value>
</context-param>

如果没有显式声明,则 系统默认 在WEB-INF/applicationContext.xml,多个文件可以使用逗号分开。

ServletRequestListener extends EventListener。
ServletRequestListener监听HTTP请求事件,Web服务器接收的每次请求都会通知该监听器。
RequestContextListener将Spring容器与Web容器结合的更加密切。这是可选配置,并且后者与scope=”request”搭配使用。

<listener>
  <listener-class>org.springframework.web.context.request.RequestContextListener</listener-class>
</listener>

三、 配置下applicationContext.xml和springmvc-servlet.xml

applicationContext.xml配置


	<!-- spring 扫描基础包,但最好不扫描controller的包 -->
	<context:component-scan base-package="com.imddy.tsession">
		<!-- <context:exclude-filter> -->
		<!-- 指定不扫描的 -->
		<!-- <context:include-filter> -->
		<!-- 指定需要扫描的 -->
		<context:exclude-filter type="annotation" expression="org.springframework.stereotype.Controller"/> 
	</context:component-scan>


	<bean id="jedisPoolConfig" class="redis.clients.jedis.JedisPoolConfig">
		<property name="maxTotal" value="30" />
		<property name="maxIdle" value="10" />
		<property name="minIdle" value="1" />
		<property name="maxWaitMillis" value="30000" />
		<property name="testOnBorrow" value="true" />
		<property name="testOnReturn" value="false" />
		<property name="testWhileIdle" value="false" />
	</bean>

	<context:annotation-config />

	<bean id="redisHttpSessionConfiguration"
		class="org.springframework.session.data.redis.config.annotation.web.http.RedisHttpSessionConfiguration">
		<property name="maxInactiveIntervalInSeconds" value="600" />
	</bean>

	<bean id="jedisConnectionFactory"
		class="org.springframework.data.redis.connection.jedis.JedisConnectionFactory"
		destroy-method="destroy">
		<property name="hostName" value="127.0.0.1" />
		<property name="port" value="6379" />
		<property name="timeout" value="3000" />
		<property name="usePool" value="true" />
		<property name="poolConfig" ref="jedisPoolConfig" />
	</bean>

	<bean id="redisTemplate" class="org.springframework.data.redis.core.RedisTemplate">
		<property name="connectionFactory" ref="jedisConnectionFactory" />
	</bean>

springmvc-serlvet.xml配置

	<!-- spring-mvc 扫描controller的包 -->
	<context:component-scan base-package="com.imddy.tsession.controller" />
	
	<!-- 这个要放在扫描的后面  -->
	<!-- spring-mvc 驱动注解 -->
	<mvc:annotation-driven />

	<!-- 启用spring mvc 注解 -->
	<context:annotation-config />
	
	<!-- 静态资源 -->
	<mvc:resources mapping="/js/**" location="/js/" />
	<mvc:resources mapping="/css/**" location="/css/" />
	<mvc:resources mapping="/images/**" location="/images/" />
	<mvc:resources mapping="/jslib/**" location="/jslib/" />

	

	<!-- spring-mvc 解析器的配置 -->
	<!-- ViewResolver -->  
	<bean id="internalResourceViewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
	    <property name="viewClass" value="org.springframework.web.servlet.view.JstlView"/>
	    <!-- <property name="prefix" value="/WEB-INF/jsp/"/> -->
	    <property name="suffix" value=".jsp"/>
	</bean>

	<!-- 开启默认处理 -->
	<!-- 这样静态资源就可以访问了 -->
	<mvc:default-servlet-handler />
	
<!-- 	<bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">  
        <property name="defaultEncoding" value="utf-8"></property>   
        <property name="maxUploadSize" value="10485760000"></property>  
        <property name="maxInMemorySize" value="40960"></property>  
    </bean> -->

log4j的配置就不贴了。

四、 测试对应的controller和jsp页面

login.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
	pageEncoding="UTF-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1">
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">

<link href="https://my.oschina.net/lenglingx/blog/jslib/bootstrap/css/bootstrap-theme.min.css" rel="stylesheet">
<link href="https://my.oschina.net/lenglingx/blog/jslib/bootstrap/css/bootstrap.min.css" rel="stylesheet">


<script src="/imgr?src=https%3A%2F%2Fmy.oschina.net%2Flenglingx%2Fblog%2Fjslib%2Fjquery%2F1.12.4%2Fjquery.min.js&r=https%3A%2F%2Fmy.oschina.net%2Flenglingx%2Fblog%2F1609001"></script>
<script src="/imgr?src=https%3A%2F%2Fmy.oschina.net%2Flenglingx%2Fblog%2Fjslib%2Fbootstrap%2Fjs%2Fbootstrap.min.js&r=https%3A%2F%2Fmy.oschina.net%2Flenglingx%2Fblog%2F1609001"></script>


<script type="text/javascript">


</script>


<title>login.jsp</title>
</head>
<body>


	<form role="form" action="loginPost.do">
		<input type="text" name="username" class="form-control" placeholder="请输入用户名" required autofocus>
		<input type="password" name="password" class="form-control" placeholder="请输入密码" required>
		<button class="btn btn-lg btn-primary btn-block" type="submit">登陆</button>
	</form>


</body>
</html>

sessioninfo.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
	pageEncoding="UTF-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1">
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">

<link href="https://cdn.bootcss.com/bootstrap/3.3.5/css/bootstrap-theme.min.css" rel="stylesheet">
<link href="https://cdn.bootcss.com/bootstrap/3.3.5/css/bootstrap.min.css" rel="stylesheet">


<script src="/imgr?src=https%3A%2F%2Fcdn.bootcss.com%2Fjquery%2F1.12.4%2Fjquery.min.js&r=https%3A%2F%2Fmy.oschina.net%2Flenglingx%2Fblog%2F1609001"></script>
<script src="/imgr?src=https%3A%2F%2Fcdn.bootcss.com%2Fbootstrap%2F3.3.5%2Fjs%2Fbootstrap.min.js&r=https%3A%2F%2Fmy.oschina.net%2Flenglingx%2Fblog%2F1609001"></script>


<script type="text/javascript">


</script>


<title>sessioninfo.jsp</title>
</head>
<body>


	<%String s = session.getId(); //获取session ID号  %>
	<%=s %>
	
	<%String username = (String)session.getAttribute("username"); //获取session ID号  %>
	<br/>
	<%=username %>

</body>
</html>

TestController

package com.imddy.tsession.controller;

import javax.servlet.http.HttpServletRequest;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;

@Controller
public class TestController {
	
	private static Log log = LogFactory.getLog(TestController.class);
	
	@RequestMapping("/loginGet")
    public String loginGet(){
		log.info("do loginGet ...");
        return "/login";
    }
	
	@RequestMapping("/loginPost")
    public String loginPost(HttpServletRequest request){
		log.info("do loginPost ...");
		String username = request.getParameter("username");
		request.getSession().setAttribute("username", username);
        return "redirect:/sessioninfo.do";
    }
	
	@RequestMapping("/sessioninfo")
    public String sessioninfo(){
		return "/sessioninfo";
	}
	
}

测试到2个不通的tomcat中一个端口是8080,另一个端口是8090,测试结果如下图:

作者:lenglingx的个人页面
独钓渔的博客
原文地址:spring-session-redis共享的配置, 感谢原作者分享。

发表评论