整理日志3-Servlet和JSP服务器端的重定向

Java Web开发实战:基于Servlet/JSP构建人员信息管理系统 在软件开发领域,Web应用开发是连接用户与数据服务的核心环节。其基本原理是通过HTTP协议实现客户端与服务器的通信,由服务器端处理业务逻辑并响应请求。这一技术价值在于能够构建集中化、可远程访问的信息管理平台,有效解决传统文件共享方式存在的数据不一致、权限混乱与安全风险问题。在众多企业级应用场景中,人员信息管理是一个典型需求,它要求系统实现数据的规范化增删改查(CRUD)操作。本文以这一具体场景为切入点,详细阐述了如何使用经典的Java Web技术栈——包括Servlet、JSP、JDBC与MySQL——从零 阅读详情

 

重定向技术可以分为两类,一类是客户端重定向,一类是服务器端重定向。客户端重定向可以通过设置特定的HTTP头,或者写JavaScript脚本实现。本文主要探讨服务器端重定向技术的实现。
服务器端的重定向相关类

服务器端的重定向技术涉及到javax.servlet.ServletContext、javax.servlet.RequestDispatcher、javax.servlet.http.ServletRequest、javax.servlet.http.ServletResponse等几个接口。

服务器端的重定向方式


服务器端的重定向可以有两种方式,一是使用HttpServletResponse的sendRedirect()方法,一是使用RequestDispatcher的forward()方法。下面对这两种方式进行介绍。

HttpServletResponse.sendRedirect()方法

HttpServletResponse接口定义了可用于转向的sendRedirect()方法。代码如下:

public void sendRedirect(java.lang.String location)throws .io.IOException

这个方法将响应定向到参数location指定的、新的URL。location可以是一个绝对的URL,如response.sendRedirect("http://java.sun.com")也可以使用相对的URL。如果location以“/”开头,则容器认为相对于当前Web应用的根,否则,容器将解析为相对于当前请求的URL。这种重定向的方法,将导致客户端浏览器的请求URL跳转。从浏览器中的地址栏中可以看到新的URL地址,作用类似于上面设置HTTP响应头信息的实现。
RequestDispatcher.forward()方法

RequestDispatcher是一个Web资源的包装器,可以用来把当前request传递到该资源,或者把新的资源包括到当前响应中。RequestDispatcher接口中定义了两个方法,参见如下代码:

public interface RequestDispatcher {
void forward(ServletRequest request, ServletResponse response);
void include(ServletRequest request, ServletResponse response);
}
forward()方法将当前的request和response重定向到该RequestDispacher指定的资源。这在实际项目中大量使用,因为完成一个业务操作往往需要跨越多个步骤,每一步骤完成相应的处理后,转向到下一个步骤。比如,通常业务处理在Servlet中处理,处理的结果转向到一个JSP页面进行显示。这样看起来类似于Servlet链的功能,但是还有一些区别。一个RequestDispatcher对象可以把请求发送到任意一个服务器资源,而不仅仅是另外一个Servlet。 include()方法将把Request Dispatcher资源的输出包含到当前输出中。
注意,只有在尚未向客户端输出响应时才可以调用forward()方法,如果页面缓存不为空,在重定向前将自动清除缓存。否则将抛出一个IllegalStateException异常。

如何得到RequestDispatcher

有三种方法可以得到Request Dispatcher对象。
1.javax.servlet. ServletRequest的getRequestDispatcher(String path)方法,其中path可以是相对路径,但不能越出当前Servlet上下文。如果path以“/”开头,则解析为相对于当前上下文的根。

2.javax.servlet. ServletContext的getRequestDispatcher(String path)方法,其中path必须以“/”开头,路径相对于当前的Servlet上下文。可以调用ServletContext的getContext(String uripath)得到另一个Servlet上下文,并可以转向到外部上下文的一个服务器资源链接。

3.使用javax.servlet. ServletContext的getNamedDispatcher(String name)得到名为name的一个Web资源,包括Servlet和JSP页面。这个资源的名字在Web应用部署描述文件web.xml中指定。

这三种方法的使用有细微的差别。比如,下面是一个应用的配置文件web.xml:

<?xml version="1.0" ?>
<!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.2//EN"
"http://java.sun.com/j2ee/dtds/web-app_2_2.dtd">
<web-app>
<servlet>
<servlet-name>FirstServlet</servlet-name>
<servlet-class>org. javaresearch.redirecttest.ServletOne</servlet-class>
</servlet>
<servlet>
<servlet-name>SecondServlet</servlet-name>
<servlet-class>org.javaresearch. redirecttest.ServletTwo</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>FirstServlet</servlet-name>
<url-pattern>/servlet/firstservlet/</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>SecondServlet</servlet-name>
<url-pattern>/servlet/secondservlet/</url-pattern>
</servlet-mapping>
</web-app>

其中定义了两个Servlet,名字分别为FirstServlet和SecondServlet,对应的类分别为org.javaresearch. redirecttest.ServletOne和org. javaresearch.redirecttest.ServletTwo。可以在浏览器中通过类似于下面的链接访问:
http://localhost:8080/servlet/firstservlet/
使用1中方法,例如在firstservlet可以写入下面的代码:
RequestDispatcher rd = request.getRequestDispatcher("secondservlet");
rd.forward(request, response);
此时控制权将转向到第二个Servlet了。

使用2中的方法,可以从Servlet Context中得到RequestDispatcher代码如下:

RequestDispatcher rd = getServletContext().getRequestDispatcher("/servlet/secondservlet");
rd.forward(request, response);

使用3中的方法,从上面的web. xml配置文件可以看到定义了两个Servlet,名字分别为FirstServlet和SecondServlet,所以可以得到命名的Dispatcher:

RequestDispatcher rd = getServletContext().getNamedDispatcher("SecondServlet");
rd.forward(request, response);

这样也可以重定向到SecondServlet了。
JSP页面中的重定向

JSP在解析后编译为一个Servlet运行,所以在JSP中也可以使用上面的重定向代码,并且,JSP还提供了更便利的操作,如下:
<jsp:forward page= "nextpage.jsp"/>
JSP页面执行到这儿,将终止当前的处理,将控制权交由nextpage.jsp。
如何选择
RequestDispatcher.forward()方法和HttpServletResponse.sendRedirect()方法的区别是:前者仅是容器中控制权的转向,在客户端浏览器地址栏中不会显示出转向后的地址;后者则是完全的跳转,浏览器将会得到跳转的地址,并重新发送请求链接。这样,从浏览器的地址栏中可以看到跳转后的链接地址。所以,前者更加高效,在前者可以满足需要时,尽量使用Request Dispatcher.forward()方法,并且,这样也有助于隐藏实际的链接。在有些情况下,比如,需要跳转到一个其它服务器上的资源,则必须使用HttpServletResponse.sendRequest()方法。

ASP服务器端脚本技术深度解析:从历史遗产到现代Web开发思维映射 服务器端脚本技术是Web开发演进中的重要基石,它通过在服务器端执行脚本逻辑来动态生成HTML内容,实现了早期动态网页的核心功能。其工作原理基于请求-响应模型,服务器接收客户端请求后,解析并执行嵌入在HTML中的脚本代码,再将纯HTML结果返回给浏览器。这项技术的核心价值在于极大地降低了动态网页开发的门槛,实现了服务器端渲染,为后续Web应用框架的发展奠定了基础。在应用场景上,它曾是构建企业内部管理系统、信息发布网站和快速原型的利器。本文聚焦于ASP这一经典服务器端脚本环境,深入剖析其内置的Request、R 阅读详情

相关推荐

JavaWeb实战学习地图:从Servlet到MVC架构与数据库连接池详解

JavaWeb开发是构建企业级Web应用的核心技术栈,其基础建立在Servlet规范之上,通过处理HTTP请求与响应实现动态内容交互。理解Servlet的生命周期、线程安全模型及请求转发与重定向的原理,是掌握Web开发的关键。这一技术价值在于能够构建稳定、可扩展的后端服务,广泛应用于电商、金融、社交等各类互联网平台。在实际开发中,采用MVC设计模式进行职责分离,并结合数据库连接池技术优化性能,是提升工程实践能力的必经之路。本文基于JavaWeb学习笔记,深入解析Servlet核心机制、MVC分层架构的实现,

weixin_34284188的博客 460

eclipse内置tomcat环境,Servlet重定向跳转失败页面加载无反应

仅适用于不修改xml文件,直接使用eclipse配置tomcat

wananzss的博客 2380

Apache Shiro CVE-2020-1957认证绕过漏洞:原理、复现与修复

在Web应用安全领域,认证与授权是保障系统安全的核心机制,其实现依赖于安全框架对请求路径的精确解析与匹配。Apache Shiro作为Java生态中广泛使用的安全框架,通过Ant风格路径模式定义访问控制规则。然而,当Shiro与Spring MVC协同工作时,两者对URL路径的解析逻辑差异可能引发严重的安全问题。具体而言,Shiro的路径匹配器在处理包含分号的路径时可能出现偏差,而Spring MVC默认会截断分号后的内容用于支持矩阵变量。这种解析不一致性导致了认证绕过漏洞,攻击者可构造特殊路径(如`/se

weixin_30788619的博客 348

解决servlet请求转发、响应重定向无法实现页面跳转问题

问题:login.html能正常运行,但当用户名和密码正确后,点击登录按钮,通过html页面的action属性值和servlet页面的urlPatterns属性值,实现servlet请求转发,无法实现页面跳转。 项目创建的目录 login.html页面代码 对应的应实现跳转页面的servlet代码 关注点: 1、资源放置在目录下的位置是否正确(html、css、js、img放在webapp下)。 2、html页面的action属性值和servlet页面的urlPatterns属性值...

qq_45947664的博客 7950

JavaWeb校园订餐系统实战:从Servlet到MVC的完整项目构建

JavaWeb开发是构建动态网站和Web应用的基础技术栈,其核心在于理解HTTP请求-响应模型与服务器端逻辑处理。通过经典的Servlet、JSP和JDBC技术组合,开发者能够掌握Web应用从数据持久化到页面渲染的全流程。这种基于MVC(Model-View-Controller)模式的设计,对于理解业务逻辑分层、数据流转和前后端交互具有重要价值,是学习企业级Java开发的必经之路。在电商、OA、校园管理等实际应用场景中,掌握会话管理、数据库连接池和事务控制等关键技术,能有效提升系统性能和安全性。本文以校园

weixin_29268385的博客 281

Java Web图书管理系统实战:MVC架构、数据库设计与Servlet/JSP实现

在Java Web开发领域,MVC(Model-View-Controller)架构模式是构建可维护、可扩展应用程序的核心设计思想。其原理在于将业务逻辑、数据展示和用户交互分离,通过模型层管理数据与业务规则,视图层负责界面呈现,控制器层协调用户请求与响应。这种分层架构的技术价值在于提升了代码的可读性、可测试性和团队协作效率,是理解现代Web框架(如Spring MVC)的基础。在典型的应用场景如内容管理系统、电商平台和企业内部系统中,MVC模式被广泛采用。本文以图书管理系统为例,深入探讨如何运用Servle

weixin_34127717的博客 305

Servlet 跳转页面两种方式与不跳转页面方式

请求转发:     //(1) 使用requestDispatcher对象:       转发格式:request.getRequestDispatcher("path").forward(response,request)     //(2) 使用jsp动作元素:       <jsp:forward page=""/> 2. 请求重定向:使用response...

weixin_45335305的博客 2632

基于SSM+JSP+MySQL的羽毛球交流平台系统设计与实现

Java Web开发是构建动态网站和Web应用的核心技术,其核心在于理解MVC(Model-View-Controller)架构模式,该模式将业务逻辑、数据与界面显示分离,提升了代码的可维护性和可扩展性。其实现原理通常依赖于成熟的框架组合,例如经典的SSM(Spring + Spring MVC + MyBatis)框架,它们分别负责依赖注入与事务管理、Web请求分发以及数据库对象关系映射。这种技术栈的价值在于为开发者提供了一套标准化、高效率的企业级开发解决方案,广泛应用于内容管理系统、电商平台及各类社区论

372

servlet无法跳转_第七章 Servlet高级编程

1.在 Servlet 内实现跳转在前面的章节中已经提到,Servlet 是充当控制者(Controller)的角色的,可以用来处理来自 JSP 页面的输入参数,以及从 JavaBean 中读取来自数据库的数据,最后跳转到目标页面。因此,Servlet 为了实现控制者的这一角色,必须要能够实现跳转2.常用的 Servlet 内跳转有 2 种(1) 重定向(对应 JSP 内置对象中的 sendRed...

weixin_30707165的博客 857

JavaWeb校园订餐系统:从源码解析到项目实战与二次开发

JavaWeb开发是构建企业级Web应用的基础技术栈,其核心在于理解HTTP请求-响应模型、服务器端动态页面生成以及数据库交互原理。通过经典的Servlet、JSP与JDBC组合,开发者可以深入掌握MVC设计模式与分层架构思想,这对于构建可维护、可扩展的应用至关重要。在工程实践中,数据库设计、事务管理、会话控制与安全编码是保障系统稳定与数据一致性的关键。以贴近生活的校园订餐系统为例,这类项目涵盖了用户认证、购物车、订单处理等典型业务场景,是学习业务建模与功能模块实现的优质载体。本文基于JavaWeb项目实战

weixin_42525385的博客 232

SSM框架实战:场馆预约系统核心设计与时间冲突检测实现

在Java Web开发领域,SSM(Spring+SpringMVC+MyBatis)框架组合是构建企业级应用的主流技术选型,它通过清晰的MVC分层架构实现了业务逻辑、数据持久化和Web请求处理的解耦。其核心原理在于Spring的IoC容器管理对象依赖和声明式事务控制,SpringMVC负责请求分发,MyBatis则提供了灵活的SQL映射能力,这种架构确保了系统的高内聚、低耦合和可维护性。从技术价值看,SSM框架特别适合需要复杂业务规则和严格数据一致性的管理系统开发,例如资源调度类应用。本文以典型的场馆预约

weixin_34288121的博客 393

Servlet中,页面跳转response.sendRedirect(),无法进行跳转

解决办法:把 response.sendRedirect()放到doget中即可解决问题(暂时不知道原因)

weixin_46388053的博客 2377

Pytorch(一) Pytorch 的安装

安装步骤 1.检查是否有合适的GPU, 若有安装Cuda与CuDNN 2.下载pytorch安装文件,进行pytorch的安装 检查电脑是否有合适的GPU 在桌面上右击如果能找到NVIDA控制面板,则说明该电脑有GPU。控制面板如下,并通过查看系统信息获取支持的Cuda版本 点击 帮助->点击 系统信息 弹出下面的对话框,在驱动程序版本那一栏就能看到该计算机使用的驱动版本。 ...

开开心心 25万+

Servlet简单整理(javaWeb)

一、Servlet 1.什么是Servlet 2、servlet生命周期是什么 (1)服务器启动时创建 (2)初始化 (3)提供服务器 (4)关闭 3.get和post请求的区别是什么 4.什么是请求转发和重定向 (1)请求转发request (2)重定向response (3)请求转发和重定向的区别 二、JSP 1.jsp和servlet的联系与区别 2.说一说静态包含和动态包含的区别 3.九大内置对象是什么? 4.Session (1)什么是Session对象? (2)session对象的原理是什么?

qq_48976048的博客 181

AWR射频仿真基本操作(一)

这里只讲述一个基本的操作: 软件是AWR 14版本

钢丝 2万+

高速设计注意事项总结——MDI篇

在以太网高速通信系统中,MDI(Medium Dependent Interface,介质相关接口)是连接物理层芯片(PHY)与传输介质(如网线)的关键接口,其设计直接影响信号完整性、传输速率和抗干扰能力。本文围绕 MDI 及 RJ45 接口电路、关键参数、设计与布线要点展开,为高速以太网设计提供参考。本文包含MDI 及 RJ45 接口电路组成、电路设计注意事项、布局布线要求等内容

qq_16237389的博客 1445

日志整理6-JSP学习经验总结.

一、JSP工作原理 在一个JSP文件第一次被请求时,JSP引擎把该JSP文件转换成为一个servlet。而这个引擎本身也是一个servlet,在JSWDK或WEBLOGIC中,它就是JspServlet。 JSP引擎先把该JSP文件转换成一个Java源文件,在转换时如果发现jsp文件有任何语法错误,转换过程将中断,并向服务端和客户端输出出错信息;如果转换成功, JSP引擎用javac把该Jav

1022

第33次CCF-CSP认证考试 第一题 词频统计 满分题解

本人小白一枚,抱着学习的态度想到网上找一些csp的参考答案,但由于实力有限,大佬的代码大都看不太懂,于是萌生了想用一些简单,基础的语句完成csp前两题的想法并公开,以便与像我这样实力不强的同学交流学习,如有更好的建议,还请斧正,感谢!

qq_75242106的博客 1869

Javaweb/jsp知识总结整理

第一章: 1.动态网站的概念与特征: 动态网站是指可以和用户产生交互,并能够根据用户输入的信息产生对应响应的网站,动态网站是靠动态网站技术实现的。 特征:交互性,自动更新,多样性 2.重要的动态网站技术: CGI,ASP,ASP.NET,PHP,Servlet,JSP 3.目前流行的应用架构模式: C/S,B/S 客户端服务器,浏览器服务器 4.Java Web应用优势: 平台无关性,效率,访问...

前端啤酒屋 776

搭建Dzzoffice 教程

通过以上步骤,您已经成功配置了WEB环境,安装了DzzOffice,并完成了系统设置和应用安装。1.安装包的设置默认是系统盘之外的第二个盘,没有其他盘符的时候则安装在C盘,当主机盘符只有C盘可用的时候,安装时不要使用U盘,否则可能误装到U盘当中。4.如果之前已经安装,再次安装时请确保上次安装已经卸载或者所有文件可读,否则请备份文件,卸载之后再安装。在其他安装环境中,我没有相关的使用经验。3. 保证安装路径是纯净的,安装路径下不能有已安装的V8版本,若重新安装,请选择其它路径。

小胡的博客 4950

LwIP TCP Client 解决长数据发送的困扰

问题描述 LWIP 的 TCP Client 发送数据可以调用 tcp_write() 函数,将数据储存在缓冲区里面,然后等待超时自动发送或者调用tcp_output()函数进行发送。 然而 tcp_write() 函数 需要发送的数据过长时,将无法发送,并返回 ERR_MEM。 tcp_write()函数解析 tcp_write()的函数代码很多,就不细看代码了, 先看tcp_write()的完整函数: err_t tcp_write(struct tcp_pcb *pcb, const void

tiantangmoke的博客 1万+

2024年最新Javaweb jsp知识总结整理_java web优势,2024年最新面试了7家公司都失败,是我不适合吗

更重要的是,技术面试是一个双向了解的过程,要让对方发现你的闪光点,同时也要 试图去找到对方的闪光点,因为他以后可能就是你的同事或者领导,所以,面试官问你有什么问题的时候,不要说没有了,要去试图了解他的工作内容、了解这个团队的氛围。更重要的是,技术面试是一个双向了解的过程,要让对方发现你的闪光点,同时也要 试图去找到对方的闪光点,因为他以后可能就是你的同事或者领导,所以,面试官问你有什么问题的时候,不要说没有了,要去试图了解他的工作内容、了解这个团队的氛围。

2401_84411323的博客 906

用Scratch实现凯撒密码:图形化编程与古典密码学的趣味结合

字符编码与移位运算是计算机处理文本数据的基础原理之一,它通过将字母映射为数字实现信息转换。在密码学领域,凯撒密码作为最经典的替换密码,直观地展示了基于规则字符替换的加密思想,其核心价值在于通过简单算法揭示加密解密的基本框架。这种原理在编程教育中尤为重要,能够帮助初学者理解循环、变量和字符串处理等核心概念。结合Scratch图形化编程环境,学习者可以通过拖拽积木可视化构建加密算法,将抽象的移位操作转化为交互式游戏。本项目以凯撒密码为例,通过实时密钥调整和动态字母表映射,生动演示加密过程,并自然融入暴力破解和密

weixin_32428571的博客 310

java学习回顾

自从自己开博客已经很久了,还没开始写过一些所谓的技术博客。最近时间感觉自己的学习已经到了瓶颈。静下心来把自己曾经看过的,写过的东西整理以下。 java基础在这里就不一一追述了,主要写点自己在web开发过程中记录的一点东西。   内存泄漏:一个对象不再被使用,但它一直咱有内存,没有被释放。 java日志管理:java.util.logging FileHadnler java集合:List...

qq940043871的专栏 256

渗透测试面试题

渗透测试面试题 一.思路流程 1.信息收集 服务器的相关信息(真实ip,系统类型,版本,开放端口,WAF等) 网站指纹识别(包括,cms,cdn,证书等),dns记录 whois信息,姓名,备案,邮箱,电话反查(邮箱丢社工库,社工准备等) 子域名收集,旁站,C段等 google hacking针对化搜索,pdf文件,中间件版本,弱口令扫描等 扫描网站目录结构,爆后台,网站banner,测试文件,...

千寻的博客 12万+

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

全网最强JavaWeb笔记 | 万字长文爆肝JavaWeb开发——day04_SpringBootWeb入门

万字长文爆肝黑马程序员2023最新版JavaWeb教程。这套教程打破常规,不再局限于过时的老套JavaWeb技术,而是与时俱进,运用的都是企业中流行的前沿技术。笔者认真跟着这个教程,再一次认真学习一遍JavaWeb教程,温故而知新,对JavaWeb开发也有了更加深入细致的了解。因此笔者做了全网最全面详细的学习笔记,通篇图文并茂,

qq_45832461的博客 1492

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

上一篇: AJAX基础教程(转贴)
下一篇: 日志整理4-PreparedStatement的优点
dwarson
博客等级 码龄22年 1粉丝 8原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值