【SSM学习笔记】SpringMVC中客户端跳转与Session传递数据

本文介绍如何在SpringMVC项目中实现客户端跳转,并演示了如何使用Session对象进行数据传递与处理,包括计数器的实现。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在开发Web项目的时候,访问jsp页面我们总是在浏览器上直接输入例如/index.jsp这样的地址来访问,无论是直接访问jsp还是通过视图定位(无.jsp后缀)来访问,都属于服务端访问,那么如果通过客户端访问应该怎么做呢?换句话说,例如输入/hello访问时会自动跳转到index.jsp页面。

一、关于客户端跳转

首先配置springmvc-servlet.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"
    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">
     
    <context:component-scan base-package="controller" />
    <bean id="irViewResolver"
        class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <property name="prefix" value="/WEB-INF/page/" />
        <property name="suffix" value=".jsp" />
    </bean>
</beans>
其中定义的
<bean id="irViewResolver"
        class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <property name="prefix" value="/WEB-INF/page/" />
        <property name="suffix" value=".jsp" />
    </bean>
是用来定义视图定位的方法的,即定义视图定位的前缀和后缀,要访问的是/WEB-INF/page目录下的jsp文件。

接着配置web.xml文件

<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee
http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
	<servlet>
		<servlet-name>springmvc</servlet-name>
		<servlet-class>
			org.springframework.web.servlet.DispatcherServlet
		</servlet-class>
		<load-on-startup>1</load-on-startup>
	</servlet>
	<servlet-mapping>
		<servlet-name>springmvc</servlet-name>
		<url-pattern>/</url-pattern>
	</servlet-mapping>
</web-app>
我们来定义一个IndexController
package controller;
 
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.servlet.ModelAndView;
 
@Controller
public class IndexController {
    //注释说明此方法为处理请求地址映射
    @RequestMapping("/index")
    //定义一个handelRequest方法映射/index访问
    public ModelAndView handleRequest(HttpServletRequest request, HttpServletResponse response) throws Exception {
    	//用index访问地址实例化一个ModelAndView对象
        ModelAndView mav = new ModelAndView("index");
        //注入信息
        mav.addObject("message", "Hello Spring MVC");
        return mav;
    } 
    
    @RequestMapping("/jump")
    public ModelAndView jump() {
    	//redirect:/index表示客户端跳转
        ModelAndView mav = new ModelAndView("redirect:/index");
        return mav;
    }      		
}
index.jsp内容如下,在浏览器上输出注入mav中的信息,将它放在/WEB-INF/page文件夹下

<%@ page language="java" contentType="text/html; charset=UTF-8"
	pageEncoding="UTF-8" isELIgnored="false"%>

<h1>${message}</h1>

将项目部署在tomcat服务器上,访问http://localhost:8080/springmvc/index,结果如下


接着访问http://localhost:8080/springmvc/jump,可以看到同样的结果,说明在访问jump的时候,发生了客户端跳转,跳转至页面index.jsp,并且浏览器地址栏中的内容变成了http://localhost:8080/springmvc/index


二、关于session中的数据传递与处理

在计算机中,尤其是在网络应用中,Session被称为“会话控制”。Session 对象存储特定用户会话所需的属性及配置信息。这样,当用户在应用程序的 Web 页之间跳转时,存储在 Session 对象中的变量将不会丢失,而是在整个用户会话中一直存在下去。当用户请求来自应用程序的 Web 页时,如果该用户还没有会话,则 Web 服务器将自动创建一个 Session 对象。当会话过期或被放弃后,服务器将终止该会话。Session 对象最常见的一个用法就是存储用户的首选项。例如,如果用户指明不喜欢查看图形,就可以将该信息存储在 Session 对象中。有关使用 Session 对象的详细信息,请参阅“ASP 应用程序”部分的“管理会话”。注意 会话状态仅在支持 cookie 的浏览器中保留。

继续在IndexController类中添加如下代码

@RequestMapping("/check")
    //"/check"的访问映射方法需要接受一个HttpSession类的参数
    public ModelAndView check(HttpSession session) {
    	    //i的值等于session中count变量的值
    	    Integer i = (Integer)session.getAttribute("count");
    	    if(i==null)
    	    	i=0;
    	    	i++;
    	    //将自增后的i重新赋值给count
    	    session.setAttribute("count", i);
    	    
    	    ModelAndView mav = new ModelAndView("check");
    	    return mav;
    }
    
    @RequestMapping("/clear")
    public ModelAndView clear(HttpSession session) {
        if((Integer)session.getAttribute("count")!=0)
            //若session中的count值不为0,则清空count
    	    session.setAttribute("count", 0);
        //客户端跳转重新定位至/check页面
        ModelAndView mav = new ModelAndView("redirect:/check");
    	    return mav;
    }



用来操作session中的数据,即显示访问该地址的次数,每访问一次count自增。

创建check.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
session被访问的次数为:${count}

访问http://localhost:8080/springmvc/check,并且不断刷新,可以看到屏幕上显示访问次数再逐次增加


访问http://localhost:8080/springmvc/clear后,访问次数清空,并且跳转回/check,访问次数变为1



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值