【javaWeb】jsp的前后台数据传输、跳转的方式

本文详细介绍了在多页面环境中如何进行数据传递,包括页面跳转、重定向、参数传递的各种方法,如使用request、session对象,隐藏域及超链接传递数据,以及JSP与servlet之间的交互。

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

将用到的不同思路在此记录,不时更新。

涉及页面跳转、页面重定向、参数传递。

19.1.7 感谢大佬博客:@ssy_shandong地址链接

————————————————————————————————————————————————

提醒:

这些方法仅适用于多页面的传递,即【前台1-后台2-前台3】这种。

如果想要实现【前台1-后台2-前台1】这种单页面的传递,可以使用ajax等技术。

ajax的前后端数值传递在另一篇博客写出。

————————————————————————————————————————————————

目录

servlet页之间:

JSP到JSP:

页面跳转:

参数传递:

  (1)使用request对象获取客户端提交的信息(以两个页面传递为例)

(2)使用session对象获取从客户端提交的信息(以三个页面传递为例)

  (3)利用隐藏域传递数据

(4)通过超链接传递数据

JSP到servlet:

(1)使用request对象接收参数

  (2)使用session对象,url,form表单传递参数

servlet到JSP:


———————————————————————————————————————

servlet页之间:

常用:

request.getRequestDispatcher("目标页").forward(request, response);

常用:

setAttribute()和getAttribute()方法传递参数

 

JSP到JSP:

页面跳转:

//常用于servlet,但是JSP也可以用 
(1)RequestDispatcher.forward()
重定向后浏览器地址栏URL不变。【原来地址】
forward()无法再后面带参数传递,比如servlet?name=tom。
可以通过response.setAttribute("name",name)传递。
通常用于servlet。


 (2)response.sendRedirect()
重定向后在浏览器地址栏上会出现重定向页面的URL。
sengRedirect()可以带参数传递,比如servlet?name=tom传至下个页面
可以在不同服务器间使用。

//纯JSP
(3)jsp:forward 方法,本质是RequestDispatcher.forward()
<jsp:forward page=""/>
    带参数:<jsp:param value="list" name="action" />
</jsp:forward>

(4)修改HTTP header的Location属性来重定向,没用过,记录
String newLocn = "2.jsp";
response.setHeader("Location",newLocn);
使用后会直接重定向到新的页面,暂时感觉没用

(5)JSP中实现在某页面停留若干秒后,自动重定向到另一页面
<meta http-equiv="refresh" content="5; url=目标.jsp">
延申:可以通过setHeader来实现某页面停留若干秒后,自动重定向到另一页面。
String content = "5; url=5_2.jsp";
response.setHeader("REFRESH",content);

方法2:JS跳转,两秒后跳转新页面 
window.setTimeout("window.location='index.shtml'",2000); 

参数传递:

(1)使用request对象获取客户端提交的信息(以两个页面传递为例)

JSP 1:
//通过一个form表单,发送
<form action="b.jsp">
    <input type="text" name="name">
    <input type="submit" value="Enter" name="submit">
</form>


JSP 2:
//通过request对象获取输入的名字,可以获取任何具有NAME值的对象值
<%
    String textContent = request.getParameter("name");
%>

(2)使用session对象获取从客户端提交的信息(以三个页面传递为例)

JSP 1
//页面1将数据通过form提供给页面2
<form action="session2.jsp" method="post">
    请输入您的姓名:
    <input type="text" name="jsp1">
    <input type="submit" value="submit">
</form>

JSP 2
//页面2得到数据,并储存到session中给页面3
<%			
    String name = request.getParameter("jsp1");			
    session.setAttribute("jsp2",name);		 
%>
	 
    您的姓名是:<%=name%>		 

<form action="session3.jsp" method="post">			
    您喜欢吃什么?			
    <input type="text" name="food"/>					
    <input type="submit" value="submit">		
</form>

JSP 3
//页面3读取来自页面2的session
<%			
    String food = request.getParameter("food");			
    String name = (String)session.getAttribute("thename");			
    String pwd = request.getParameter("pwd");		 
%>		 
    您的姓名是:<%=name%>		 		 
    您喜欢吃:<%=food%>		 		 
    您的密码是:<%=pwd%>

(3)利用隐藏域传递数据

类似于上两种方法,只不过是通过隐藏框来传递

<!-- 隐藏字段,系统时间,并转换为毫秒数 -->
<input type="hidden" name="time" value="<%=new java.util.Date()%>">

(4)通过超链接传递数据

//直接给定固定值
<a href=目标.jsp?参数1=<%=固定值%>>到指定的页面</a>
//传递动态值
<a href=目标.jsp?参数1=<%=你的变量%>>到指定的页面</a>

 

JSP到servlet:

(1)使用request对象接收参数

//JSP页面 1
//通过FORM表单提交

//servlet 1中:
request.getRequestDispatcher("JSP页面2.jsp").forward(request, response);

//JSP页面 2
实验<%=request.getParameter("JSP 1 提交的某个参数") %>,登录成功!

//
这个过程中,JSP页面 1 提交的值分别在servlet和JSP 2 中读取了一次。
但是并非直接由JSP 1 到JSP 2。

然是通过servlet的请求转发:getRequestDispatcher,将request, response转发到JSP 2.

(2)使用session对象,url,form表单传递参数

//JSP中
<%		
    session.setAttribute("testSession","Hello session");		
    request.setAttribute("testRequest","Hello request");		
%>		
<a href="目标页面">单击此处</a>	
<form action="某个servlet?action=某个自定方法" method="post" name="form1">
    <input type="text" name="username"/>			
    <input type="submit" value="submit"/>		
</form>

//servlet
String strSession = (String)request.getSession().getAttribute("testSession"); 	
String strRequest = (String)request.getAttribute("testRequest");
String username = request.getParameter("username");


servlet到JSP:

从servlet到jsp页面传递参数,可以使用URL,request对象,session对象。

方法类似于上述几种。

//servlet
String strRequest = "request传值";		
String strSession = "session传值";		
request.setAttribute("strRequest", strRequest);		
request.getSession().setAttribute("strSession", strSession);


//JSP
<%			
    String strRequest = (String)request.getAttribute("strRequest");		
    String strSession = (String)request.getSession().getAttribute("strSession");
%>

 

### JavaWeb 期末项目 示例:后台管理系统 #### 源码结构与技术栈介绍 在构建JavaWeb项目的后台管理系统时,通常会采用Servlet和JSP作为核心技术[^1]。为了提高开发效率并保持良好的可维护性,合理规划源码文件夹结构至关重要。常见的目录布局如下: - **src**:存放所有的Java源代码,包括控制器、服务层和服务实现类等。 - **resources**:包含配置文件、数据库脚本和其他静态资源。 - **test**:用于放置单元测试和集成测试的相关代码。 - **lib**:存储项目所需的第三方库文件。 这种分层式的组织方式不仅便于团队协作,也有助于后期的扩展和支持[^2]。 #### 数据库连接设置 对于大多数企业级应用而言,MySQL是一个非常流行的选择。建立稳定可靠的数据库链接是确保应用程序正常运行的基础之一。下面是一段简单的`db.properties`示例,位于`resources`文件夹下: ```properties jdbc.driver=com.mysql.jdbc.Driver jdbc.url=jdbc:mysql://localhost:3306/javaweb_project?useSSL=false&serverTimezone=UTC jdbc.username=root jdbc.password=password ``` 这段配置指定了驱动程序名称、URL地址以及登录凭证信息,方便后续通过工具类读取这些参数来初始化数据源对象。 #### 用户认证模块设计 安全性和用户体验往往相辅相成,在实际开发过程中应当重视用户身份验证环节的设计。这里给出一个基于Session机制的身份校验方案概述: 当用户提交表单后端接收到请求时,先检查session中是否存在已登录标记;如果不存在,则重定向至登录页面让用户输入账号密码完成注册/登陆操作;反之则允许访问受保护的内容区域。具体逻辑可以通过拦截器或者过滤器的形式加以实现[^3]。 #### 页面跳转控制 为了让前后端分离更加彻底,可以考虑引入模板引擎(如Thymeleaf),它能够在不改变原有HTML语法的前提下增强视图渲染能力。例如定义好路径映射规则之后,就可以轻松地让不同类型的HTTP请求对应特定的功能处理方法,并最终返回相应的响应结果给客户端展示出来。 ```java @RequestMapping("/login") public String showLoginForm() { return "login"; } @PostMapping("/doLogin") public ModelAndView doLogin(@RequestParam String username, @RequestParam String password) { // 验证用户名密码... if (success) { HttpSession session = request.getSession(); session.setAttribute("user", user); return new ModelAndView("redirect:/dashboard"); } else { Map<String, Object> model = new HashMap<>(); model.put("error", "Invalid credentials."); return new ModelAndView("login", model); } } ``` 上述代码片段展示了如何利用Spring MVC框架简化路由管理和业务逻辑编写工作流,同时也体现了面向接口编程的思想优势所在。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值