servlet-request(请求)-请求转发

request请求

  • request 请求
  • index.jsp
  • login.jsp
  • success.jsp
  • LoginServlet
  • SuccessServlet
  • 响应写入用户名和密码测试
  • 请求转发success.jsp页面测试
  • 请求转发SuccessServlet 页面测试
  • 重定向SuccessServlet 页面测试

request 请求

作用:获取浏览器发送过来的数据
组成部分:请求行 请求头 请求体
操作请求行:

格式:
请求方式 请求资源 协议/版本
GET /xxxweb/row?username=dyj&password=111 HTTP/1.1
常用方法:HttpServletRequest
掌握:
String getMethod():获取请求方式
String getRemoteAddr():获取ip地址
String getContextPath() :获取当前web项目名称(如:/loginweb)
了解:
getRequestURI():获取从项目名到参数之前的内容 /xxxweb/login
getRequestURL():获取带协议的完整路径 http://localhost/xxxweb/login
String getQueryString():get请求的所有参数 username=djy&password=123
String getProtocol():获取协议和版本

操作请求头(了解):

格式:key/value( value 可以是多个值)
方法:
了解:
String getHeader(String key):通过 key 获取指定的 value (一个)
通过 getHeaders(String name):通过 key 获取指定的 value (多个)
通过 request.getHeaderNames() :获取所有的请求头的名称(先 request 设置响应头)
int getIntHeader(String key):获取整型的请求头
long getDateHeader(String key):获取时间的请求头
请求头:
user-agent:浏览器内核 msie firefox chrome
referer:页面从那里来(防盗链)

操作请求参数(掌握):

username=djy&password=123&hobby=eat
常用方法:
String getParameter(String key):获取一个值(掌握)
String[] getParameterValues(String key):通过一个 key 获取多个值(了解)
Map<String,String[]> getParameterMap():获取所有的参数名称和值(了解)

请求的中文乱码:

request.setCharacterEncoding(“utf-8”);

index.jsp

 <a href="login.jsp">登录</a>

在这里插入图片描述

login.jsp

    <form action="<%=request.getContextPath()%>/login" method="post"><label>用户名:</label><input type="text" name="userName"><br><label>密码:</label><input type="password" name="password"><br><button type="submit">提交</button><label>||</label><button type="reset">重置</button></form>

在这里插入图片描述

success.jsp

    <h1>登录成功</h1><h2>请求域数据对象,从Java代码中拿到</h2><hr>登录名:<%=request.getAttribute("user")%><br>ip: <%=request.getAttribute("ip")%>

LoginServlet

@WebServlet(name = "login", value = "/login")
public class LoginServlet extends HttpServlet {@Overrideprotected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {//设置请求响应编码格式为utf-8request.setCharacterEncoding("utf-8");response.setContentType("text/html;charset=UTF-8");//请求拿到用户名和密码String userName = request.getParameter("userName");String password = request.getParameter("password");//请求ip地址//String remoteAddr = request.getRemoteAddr();String localAddr = request.getLocalAddr();//请求协议和版本String protocol = request.getProtocol();//响应写入用户名和密码(把下面代码注释显示数据)response.getWriter().append("用户名:" + userName).append("<br>").append("密码:" + password).append("<br>").append("ip地址:" + localAddr).append("<br>").append("协议和版本:" + protocol);//设置域对象(给success页面中传递数据)request.setAttribute("user",userName);request.setAttribute("ip",localAddr);//请求转发//请求转发(地址不改变,只显示,域对象值可传递)//request.getRequestDispatcher("success.jsp").forward(request,response);//跳转到success.jsp页面request.getRequestDispatcher("success").forward(request,response);//跳转到sucess Servlet页面//重定向//重定向(两次url地址,地址改变,域对象值无法传递)(拿到的值为null)//response.sendRedirect(request.getContextPath()+"/success");}@Overrideprotected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {doGet(request,response);}
}

SuccessServlet

@WebServlet(name = "success", value = "/success")
public class SuccessServlet extends HttpServlet {@Overrideprotected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {//设置请求响应编码格式为utf-8request.setCharacterEncoding("utf-8");response.setContentType("text/html;charset=UTF-8");//获取LoginServlet 传递下来的数据String user = (String)request.getAttribute("user");String ip = (String)request.getAttribute("ip");response.getWriter().append("用户名:" + user).append("<br>").append("ip:" + ip);}@Overrideprotected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {doGet(request,response);}
}

响应写入用户名和密码测试

在这里插入图片描述

请求转发success.jsp页面测试

在这里插入图片描述

请求转发SuccessServlet 页面测试

在这里插入图片描述

重定向SuccessServlet 页面测试

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/7179.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【数据结构初阶】希尔排序

鼠鼠最近学习了希尔排序&#xff0c;做个笔记&#xff01; 希尔排序也是插入排序的一种捏&#xff01;本篇博客也是用排升序来举例捏&#xff01; 希尔排序是基于直接插入排序的&#xff0c;是由大佬D.L.Shell提出的。 目录 1.希尔排序 1.1.预排序 1.2.直接插入排序 2.希…

自动化运维工具---Ansible

一 Puppet Puppet是历史悠久的运维工具之一。它是一种基础架构即代码(laC)工具&#xff0c;使用户可以定义其基础 架构所需的状态&#xff0c;并使系统自动化以实现相同状态。 Puppet可监视用户的所有系统&#xff0c;并防止任何偏离已定义状态的情况。从简单的工作流程自动…

2023年广东省大学生程序设计竞赛题解

比赛链接&#xff1a;The 2023 Guangdong Provincial Collegiate Programming Contest 文章目录 A. Programming Contest&#xff08;签到&#xff09;B. Base Station Construction&#xff08;单调队列优化dp&#xff09;C. Trading&#xff08;排序&#xff09;D. New House…

代码本地化

目的 代码本地化&#xff08;Localization&#xff09;是指将软件应用程序中的文本、图形、声音和其他内容翻译成特定语言的过程&#xff0c;同时确保这些内容在目标文化中适当地呈现。本地化不仅仅是对文本进行翻译&#xff0c;还包括对日期、时间、数字、货币、排序顺序、文本…

04-19 周四 GitHub CI 方案设计

04-19 周四 GitHub CI 方案设计 时间版本修改人描述2024年4月19日14:44:23V0.1宋全恒新建文档2024年4月19日17:22:57V1.0宋全恒完成部署拓扑结构的绘制和文档撰写 简介 需求 由于团队最近把代码托管在GitHub上&#xff0c;为解决推理、应用的自动化CI的需要&#xff0c;调研了…

最近惊爆谷歌裁员

Python团队还没解散完&#xff0c;谷歌又对Flutter、Dart动手了。 什么原因呢&#xff0c;猜测啊。 谷歌裁员Python的具体原因可能是因为公司在进行技术栈的调整和优化。Python作为一种脚本语言&#xff0c;在某些情况下可能无法提供足够的性能或者扩展性&#xff0c;尤其是在…

leetcode_49.字母异位词分组

49. 字母异位词分组 题目描述&#xff1a;给你一个字符串数组&#xff0c;请你将 字母异位词 组合在一起。可以按任意顺序返回结果列表。 字母异位词 是由重新排列源单词的所有字母得到的一个新单词。 示例 1: 输入: strs ["eat", "tea", "tan"…

MMC设备

MMC&#xff08;MultiMediaCard&#xff09;是一种闪存卡标准&#xff0c;用于作为便携式设备上的存储媒介&#xff0c;例如数码相机、智能手机、平板电脑、个人数字助理&#xff08;PDA&#xff09;以及其他便携式设备。MMC卡最初是由SanDisk和Siemens AG开发的&#xff0c;并…

2、​​​​​​​FreeCAD模块与核心架构总结

FreeCAD作为一个开源的3D建模软件&#xff0c;其内部架构由多个模块组成&#xff0c;这些模块共同协作以支持软件的各种功能。本总结将基于提供的参考文档&#xff0c;对FreeCAD的核心模块、架构特性以及启动过程进行翻译和详细阐述。 核心模块概览 FreeCAD的核心模块主要包括…

分析:Palo Alto在从SASE向SASO演进中定位不佳

摘要 我们通过上一篇文章&#xff08;Fortinet的愿景——超越SASE&#xff09;中应用于Fortinet的相同框架来回顾Palo Alto Network在网络和网络安全方面的前景。 SASE涉及数据传输的第一英里。不过&#xff0c;随着SASE的发展&#xff0c;投资者还需要考虑中间和最后一英里。…

02——线性表

线性表 基本操作 Initlist(&L):初始化表 Length(L):求表长 LocateElem(L,e):按值查找操作 GetElem(L,i):按位查找操作 ListInsert(&L,i,e):插入操作 ListDelete(&L,i,&e):删除操作 PrintList(L):输出操作 Empty(L):判空操作 DestroyList(&L):销毁操作 顺序…

【JavaScript】数据类型转换

JavaScript 中的数据类型转换主要包括两种&#xff1a;隐式类型转换&#xff08;Implicit Type Conversion&#xff09;和显式类型转换&#xff08;Explicit Type Conversion&#xff09;。 1. 隐式类型转换&#xff08;自动转换&#xff09;&#xff1a; js 是动态语言&…

Docker搭建LNMP+Wordpress的实验

目录 一、项目的介绍 1、项目需求 2、服务器环境 3、任务需求 二、Linux系统基础镜像 三、部署Nginx 1、建立工作目录 2、编写Dockerfile 3、准备nginx.conf配置文件 4、设置自定义网段和创建镜像和容器 5、启动镜像容器 6、验证nginx 三、Mysql 1、建立工作目录…

Kalign 3:大型数据集的多序列比对

之前一直用的是muscle&#xff0c;看到一个文章使用了Kalign&#xff0c;尝试一下吧 安装 wget -c https://github.com/TimoLassmann/kalign/archive/refs/tags/v3.4.0.tar.gz tar -zxvf v3.4.0.tar.gz cd kalign-3.4.0 mkdir build cd build cmake .. make make test su…

C++ 中 shared_from_this()的原理与使用

什么是shared_from_this()&#xff1f; 它是一个模板类&#xff0c;定义在头文件 <memory>&#xff0c;其原型为&#xff1a; template< class T > class enable_shared_from_this;std::enable_shared_from_this能让其一个对象&#xff08;假设其名为 t &#xf…

【数据结构与算法】之五道链表进阶面试题详解!

目录 1、链表的回文结构 2、相交链表 3、随机链表的复制 4、环形链表 5、环形链表&#xff08;||&#xff09; 6、完结散花 个人主页&#xff1a;秋风起&#xff0c;再归来~ 数据结构与算法 个人格言&#xff1a;悟已往之不谏&#xff0c;知…

【48天笔试强训】day18

题目1 描述 有一种兔子&#xff0c;从出生后第3个月起每个月都生一只兔子&#xff0c;小兔子长到第三个月后每个月又生一只兔子。 例子&#xff1a;假设一只兔子第3个月出生&#xff0c;那么它第5个月开始会每个月生一只兔子。 一月的时候有一只兔子&#xff0c;假如兔子都…

力扣数据库题库学习(5.6日)--1729. 求关注者的数量

1729. 求关注者的数量 问题链接 思路分析 编写解决方案&#xff0c;对于每一个用户&#xff0c;返回该用户的关注者数量。 按 user_id 的顺序返回结果表。示例 1&#xff1a;输入&#xff1a; Followers 表&#xff1a; ---------------------- | user_id | follower_id | -…

【搜索技能】外链

文章目录 前言一、外链是什么&#xff1f;二、如何进行外链调查&#xff1f;总结 前言 今儿因为在搜索一个很感兴趣的软件&#xff0c;但是软件信息所在的网址非常有限。因此产生了一个念头&#xff1a;我能不能找到所有的包含了或者是引用了这个网站的网站呢? 调查之下&…

C语言面试重点问题

1. 冒泡排序法 2. strlen、strcpy、strcat、strcmp的用法和原理 3. 大小端的区分 3.1 主函数区分大小端 #include <stdio.h>int main(void) {int num 0x11223344;char *p (char *)&num;if (0x11 *p){printf("大端!\n");}else if (0x44 *p){printf(…