Jsp学习笔记(2)——页面导航、表单、EL表达式
页面导航
有两种跳转页面的方法。重定向和请求转发
两者区别:
| 请求转发(forward) | 重定向(rerect) | |
|---|---|---|
| 请求服务次数 | 1 | 2 |
| 是否保留第一次请求request范围的属性 | 保留 | 不保留 |
| 地址栏的请求URL是否改变 | 不变 | 改变,相当于在地址栏重新输入URL按下回车键 |
说明的例子:
- 请求转发:张三去银行办理业务,在窗口A办理,窗口A的业务员发现自己无权操作,便把张三的业务交给其他人去完成
- 重定向: 张三去银行办理业务,在窗口A办理,窗口A的业务员发现自己无权操作,提示张三去窗口B办理
重定向
重定向,客户端实际上进行了两次请求,在第一次请求,获得到了一个特殊的response,没有任何内容,客户端接收到此请求,会修改location,向新的location再次发送请求
重定向(response),会丢失request的数据,而sension里面的数据不会丢失
应用程序的根目录(上下文) request.getContentPath()
// "/" 是tomcat的根目录 (http://localhost:8080/)
response.sendRedirect("url")
// 应该这样写:
respones.sendRedirect(request.getContentPath()+"/dologin.jsp");
请求转发
// url中的“/”是web根目录(就是web文件夹)
request.getRequestDispatcher("url").forward(request,resopnes)
请求转发前后的request是同一个对象
表单
在form标签里面存在着表单元素,form设置action,表示,当点击提交按钮,就会跳转到的jsp页面(重定向)
<form method="post" action="login.jsp">
<input name="username" type="text"/>
<input name="password" type="password"/>
<input type="submit" value="login"/>
</form>
上面的代码块,点击按钮的时候,就会跳转到login.jsp,同时带上了参数 username和password
实际上,相当于发送了一条这样的请求 login.jsp?username=xx&password=xx
之后,就可以通过request.getParameter("username")这样的方式来获得传过来的数值
如果某个标签有disable,即使该标签有name属性,但请求的参数是无法获得name的对应的值
客户端(js,html)中 “/”表示localhost:8080
jsp/servlet 在请求转发就是web根目录(应用程序上下文)
EL表达式
EL表达式就是一种简单的写法,主要用来从request、response、session、pageContext等内置对象取出数据。
例如,使用jsp表达式取出请求参数:
<h1><%=request.getParameter("name")%></h1>
可以这样写:
<h1>${param.name}</h1>
如果是setAttribute存入的数据:
<h1><%=request.getAttribute("name")%></h1>
EL表达式得这样写:
<h1>${requestScope.name}</h1>
如果存入了一个对象,想要获得对象的某个属性值
<h1><%=request.getAttribute("employee").getName()%></h1>
EL表达式:
<h1>${requestScope.employee.name}</h1>
请求参数对象:
| 对象 | 说明 |
|---|---|
| param | 与request.getParameter()方法一样 |
| paramValues | 与request.getParameterMap()方法一样 |
作用域对象:
| JSP隐式对象 | 存储数据示例 | EL隐式对象 | EL示例 | |
|---|---|---|---|---|
| 页面作用域 | pageContext | pageContext | .setAttribute(“name”, 对象); | pageScope |
| 请求作用域 | request | request | .setAttribute(“name”, 对象); | requestScope |
| 会话作用域 | session | session | .setAttribute(“name”, 对象); | sessionScope |
| 应用程序作用域 | application | application | .setAttribute(“name”, 对象); | applicationScope |
EL表达式中,可以不写前面的那个作用域,EL表达式就会默认按作用域范围大小从大到小查找
//pagecontext ->request ->session-> application
<h1>${employee.name}</h1>
访问数组、集合或者Map
<h1>${array[2]}</h1>
<h1>${list[1]}</h1>
//相当于map.get("red")
<h1>${map["red"]}</h1>
<h1>${map.red}</h1>
新增,删除,更新操作使用重定向
Jsp学习笔记(2)——页面导航、表单、EL表达式的更多相关文章
- Django学习笔记(五)—— 表单
疯狂的暑假学习之 Django学习笔记(五)-- 表单 參考:<The Django Book> 第7章 1. HttpRequest对象的信息 request.path ...
- Flutter学习笔记(13)--表单组件
如需转载,请注明出处:Flutter学习笔记(13)--表单组件 表单组件是个包含表单元素的区域,表单元素允许用户输入内容,比如:文本区域,下拉表单,单选框.复选框等,常见的应用场景有:登陆.注册.输 ...
- ng2 学习笔记(二)表单及表单验证
在上一篇文章中提到了表单,只说了表单的数据绑定,这一篇文章主要讲一下表单验证,为什么把表单单独拿出来学习,主要是因为,表单是商业应用的支柱,我们用它来执行登录.求助.下单.预订机票.安排会议,以及不计 ...
- SpringMVC:学习笔记(5)——数据绑定及表单标签
SpringMVC——数据绑定及表单标签 理解数据绑定 为什么要使用数据绑定 基于HTTP特性,所有的用户输入的请求参数类型都是String,比如下面表单: 按照我们以往所学,如果要获取请求的所有参数 ...
- HTML&CSS基础学习笔记1.26-input重置表单
重置表单 <input>的[type]属性值为"button"的时候表示一个普通的按钮,相当于一个<button>标签. <input>的[ty ...
- Django学习笔记(3)——表单,测试和模板语法的学习
一,表单form 为了接收用户的投票选择,我们需要在前段页面显示一个投票界面,让我们重写之前的polls/detail.html文件,代码如下: <h1>{{ question.quest ...
- 【Spring学习笔记-MVC-11--】Spring MVC之表单标签
一.使用方法 1.要使用Spring MVC提供的表单标签,首先需要在视图页面添加: <%@ taglib prefix="form" uri="http://ww ...
- jquery-mobile 学习笔记之二(表单创建)
绪上 一.注意事项 1. <form> 元素必须设置 method 和 action 属性 2. 每一个表单元素必须设置唯一的 "id" 属性. 该 id 在网站的页面 ...
- html+css学习笔记 5[表格、表单]
表格 -- 默认样式重置 表格标签: table 表格 thead 表格头 tbody 表格主体 tfoot 表格尾 tr 表格行 th 元素定义表头 ...
- HTML之学习笔记(十)表单元素
html表单元素的基本格式为(必须包含在form标签中)
随机推荐
- js调用网络摄像头
不支持IE浏览器(需要使用flash插件), 支持移动端, 未经过完全测试 PC端使用的时候, HTML页面需要预留video标签, canvas标签 移动端使用的时候, HTML页面需要预留file ...
- ASP.NET Core 2.2 WebApi 系列【三】AutoFac 仓储接口的依赖注入
一.准备工作 通过程序包管理器控制台安装AutoFac: Install-Package Autofac.Extensions.DependencyInjection 创建新类库(.NetCore 2 ...
- Spring MVC的注解二
概述 Spring从2.5版本开始引入注解,虽然版本不断变化,但是注解的特性一直被延续下来并不断进行扩展,这里就来记录一下Spring MVC中常用的注解,本文承接前文继续记录@PathVariabl ...
- http请求post,文件导出兼容IE10+
1.post的方法里要加responseType: 'blob'参数,不然下载的excel会乱码 2.使用{type: "application/vnd.ms-excel"}的写法 ...
- 网络编程~~~osi五层协议
物理层 / 数据链路层 / 网络层 / 传输层 / 应用层(表示层/会话层) 一 物理层 物理层指的就是网线,光纤, 双绞线等物理传输介质 物理层发送的是数据(比特流) 二 数据链路层 数据链路层对数 ...
- CSS新特性之动画
动画是CSS3中具有颠覆性的特征之一,可以通过设置多个节点来精确控制一个或者一组动画,常常用来实现复杂的动画效果.相比较过度,动画可以实现更多变化,更多控制,连续自动(不需要鼠标经过和鼠标离开来控制) ...
- nginx学习(三):nginx的进程模型
概述 nginx 进程分为 master进程和work进程 1.打开配置文件查看,这里我修改为2 [root@xxx conf]# vim nginx.conf #user nobody; worke ...
- rabbit mq 手动重试机制
消息手动确认模式的几点说明 监听的方法内部必须使用channel进行消息确认,包括消费成功或消费失败 如果不手动确认,也不抛出异常,消息不会自动重新推送(包括其他消费者),因为对于rabbitmq来说 ...
- 乘积量化(Product Quantization)
乘积量化 1.简介 乘积量化(PQ)算法是和VLAD算法是由法国INRIA实验室一同提出来的,为的是加快图像的检索速度,所以它是一种检索算法,在矢量量化(Vector Quantization,VQ) ...
- 【转】 java常量池
理论 jvm虚拟内存分布: 程序计数器是jvm执行程序的流水线,存放一些跳转指令. 本地方法栈是jvm调用操作系统方法所使用的栈. 虚拟机栈是jvm执行java代码所使用 ...