为何有的网站打不开,建设网站最好的,旅游开发 网站建设,重庆市建设工程信息网质量监督目录
前言
request概述
request的使用
获取前端传递的数据
实例
请求转发
特点
语法
实例
实例1
实例2 【关联实例1】
域对象
组成
作用范围#xff1a;
生命周期#xff1a;
使用场景#xff1a;
使用步骤
存储数据对象
获得数据对象
移除域中的键值…目录
前言
request概述
request的使用
获取前端传递的数据
实例
请求转发
特点
语法
实例
实例1
实例2 【关联实例1】
域对象
组成
作用范围
生命周期
使用场景
使用步骤
存储数据对象
获得数据对象
移除域中的键值对【数据对象】 前言
在之前我们学习到真正处理前后端交互是重写 doGet方法和doPost()方法。我们有注意到这些方法都有一个共同的参数列表
HttpServletRequest req, HttpServletResponse resp
request概述 request是Servlet.service()方法的一个参数【在上面指的是req 】类型为javax.servlet.http.HttpServletRequest。在客户端发出每个请求时服务器都会创建一个request对象并把请求数据封装到request中然后在调用Servlet.service()方法时传递给service()方法这说明在service()方法中可以通过request对象来获取请求数据。 因此我后面讲的request 对象 就是指 req 对象
如下图所示 request的使用 封装了请求头数据 封装了请求正文数据如果是GET请求那么就没有正文 request是一个域对象可以把它当成Map来添加获取数据 request提供了请求转发和请求包含功能。\
接下来我将针对 如何获得前端数据 域对象请求转发进行详细叙述
获取前端传递的数据
使用getParameter()方法获得前端界面传递给服务器的数据 getParameter()方法 是 HttpServletRequest 的继承父类 ServletRequest 的方法 我们注意以下的方法 // 参数为key ,在前端一般是 name 属性值 返回值一般是我们输入的值String getParameter(String var1);
// 获得所有存储 key 的集合 EnumerationEnumerationString getParameterNames();
//通过传递的key 值 返回的是一个String类型的数组String[] getParameterValues(String var1); 注意第三个方法常用于复选框 typecheckbox 时这种情况下 name(key值都是相同的 重点是 掌握第一个方法的使用 实例 前端写一个简单的用户登录表单使用getParameter() 获得你输入的内容 请求转发 首先我先提一下 “ 资源跳转” 我们可以理解为网页的切换。在前端HTML网页我们使用超链接 a href目标网页/a来实现跳转。 在后端我们有两种方式完成的网页的切换资源跳转 资源跳转有两种形式 请求转发重定向 本篇博客我介绍的请求转发的具有应用 特点 1 不能访问外部资源2浏览器中的urL 是不变的一直是同一个请求在浏览器看来 语法 1 创建一个 RequestDispatcher 类型的对象 通过请request对象 调用getRequestDispatcher(url) RequestDispatcher rd request.getRequestDispatcher(/BServlet); 2 调用该对象的forword方法 rd.forward(request, response); 为了方便我们也可以合并写这个大家都懂 实例 实例1 刚刚举例 说使用 请求转发无法访问外部资源。我现在通过请求转发的形式来访问百度试一下 前端代码一个简单的表单 !DOCTYPE html
html langen
headmeta charsetUTF-8meta nameviewport contentwidthdevice-width, initial-scale1, shrink-to-fitnotitle第一个web项目/titlelink relstylesheet hrefhttps://cdn.jsdelivr.net/npm/bootstrap4.6.2/dist/css/bootstrap.min.css integritysha384-xOolHFLEh07PJGoPkLv1IbcEPTNtaed2xpHsD9ESMhqIYd0nLMwNLD69Npy4HIN crossoriginanonymous
/head
body
div classcontainer!-- Content here --form action/login methodpostdiv classform-group label forexampleInputEmail1 用户账户/labelinput typetext classform-control idexampleInputEmail1 nameusername aria-describedbyemailHelpsmall idemailHelp classform-text text-mutedWell never share your email with anyone else./small/divdiv classform-grouplabel forexampleInputPassword1用户密码/labelinput typepassword classform-control idexampleInputPassword1 namepassword/divbutton typesubmit classbtn btn-primarySubmit/button
/form
/div/body
/html 后端 重写 doPost方法 WebServlet(/login) Overrideprotected void doPost(HttpServletRequest req, HttpServletResponse resp) throws IOException, ServletException {System.out.println(欢迎使用post请求方式查询);req.getRequestDispatcher(https://www.baidu.com/).forward(req, resp);//resp.sendRedirect(https://www.baidu.com/);} 启动服务器浏览器手动访问 该Servlet 不管提交的表单是否符合条件观察是否会跳转到百度 但如果访问本机资源如BServlet. 是可以的 BServlet 发现 跳转成功 实例2 【关联实例1】 同时我们也应该注意到浏览器的搜索栏一直都没有变化 即使在后面使用请求转发跳转到BServlet,也是如此 域对象 组成 PageContext ServletRequest HttpSession ServletContext 注意 所有域对象都有存取数据的功能因为域对象内部有一个Map用来存储数据 这里的域对象我只说ServletRequest类型的request 域对象同时我们也知道request对象 是 访问Servlet 时自动创建的。其他的域对象当具体使用时再添加到博客中。 特点 可以作为一个仓库存储数据当我们要使用时再从中获取相关数据 作用范围 HttpServletRequest 对象的作用范围是单个 HTTP 请求。数据只能在同一个请求的生命周期内共享即从客户端发送请求到服务器处理完请求并返回响应的这段时间内有效。 生命周期 每次新的请求都会创建一个新的 HttpServletRequest 对象。 当请求处理完毕后该对象会被销毁。 使用场景 适用于在同一个请求的不同处理阶段之间传递数据。 例如在一个请求处理过程中前端控制器将数据传递给业务逻辑层或视图层。 使用步骤 存储数据对象 调用setAttribute(String name, Object value)方法存储key-value 键值对形式的对象 void setAttribute(String name, Object value)用来存储一个对象也可以称之为存储一个域属性 获得数据对象 Object getAttribute(String name)用来获取request中的数据当前在获取之前需要先去存储才行例如String value (String)request.getAttribute(“xxx”);获取名为xxx的域属性 移除域中的键值对【数据对象】 void removeAttribute(String name)用来移除request中的域属性如果参数name指定的域属性不存在那么本方法什么都不做