Jsp学习笔记(2)——页面导航、表单、EL表达式
本文为作者原创,允许转载,不过请在文章开头明显处注明链接和出处!!! 谢谢配合~
作者:stars-one
链接:https://www.cnblogs.com/stars-one/p/11439504.html
本篇大约有2376个字,阅读预计需要2.97分钟
页面导航
有两种跳转页面的方法。重定向和请求转发
两者区别:
请求转发(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>
新增,删除,更新操作使用重定向
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· [.NET]调用本地 Deepseek 模型
· 一个费力不讨好的项目,让我损失了近一半的绩效!
· .NET Core 托管堆内存泄露/CPU异常的常见思路
· PostgreSQL 和 SQL Server 在统计信息维护中的关键差异
· C++代码改造为UTF-8编码问题的总结
· 【.NET】调用本地 Deepseek 模型
· CSnakes vs Python.NET:高效嵌入与灵活互通的跨语言方案对比
· DeepSeek “源神”启动!「GitHub 热点速览」
· 我与微信审核的“相爱相杀”看个人小程序副业
· Plotly.NET 一个为 .NET 打造的强大开源交互式图表库