个人整理的jsp、EL表达式、JSTL标签库的笔记,少概念多实用,需要的留下邮箱,会第一时间分享原稿PDF给大家!
jsp
第一章 jsp介绍及对比servlet
作用:
动态网页技术,动态的从数据库获取数据
jsp和servlet的优缺点:
jsp优点:页面表现方便,利于写html代码
jsp缺点:业务逻辑处理麻烦,不利于写Java代码
servlet优点:业务逻辑处理方便,适合写Java代码
servlet缺点:页面表现麻烦,不利于写html代码
第二章 jsp编译器指定
一:指定编程语言及编码格式
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
二:处理500错误
作用:当页面出现500指定错误时,引用另一个页面,来处理代码错误,只能处理运行时错误,不能处理编译期错误
<%@ page errorPage="error.jsp" %>
三:处理400错误,是在web.xml 中进行配置
<error-page> <error-code>404</error-code> <location>/404.jsp</location> </error-page>
第三章 动态导入和静态导入
注:看不懂动态导入和静态导入机制的,可以先学习第五章:jsp的执行过程
动态导入:
(1)可以将不同的页面分别编写成Java文件,再编译成class文件,每个文件互不影响
(2)每个文件中可以有同名的变量
(3)如果页面中的Java代码较多,建议动态导入
(4)效率相对较低,耦合度也较低
<jsp:include page="include.jsp"></jsp:include>
静态导入:
(1)将不同的jsp页面合成一个Java文件,再编译成class文件
(2)每个jsp文件不可以有同名的变量
(3)如果java代码比较少或者没有Java代码,建议使用静态导入
(4)效率相对较高,耦合性也较高
<%@ include file="include.jsp"%>
第四章 jsp页面注释
(1)脚本段
<% int a = 100; %>
(2)表达式
<%=a %>
(3)声明成员变量:但是不建议使用,servlet中不能使用成员变量,造成数据不安全
<%! int b = 100; %>
第五章 jsp的执行过程
jsp的执行过程:
1:客户端发送一个以.jsp结尾的请求,被tomcat进行拦截(web.xml)
2: tomcat将这个jsp文件先编写成java文件,再编译成class文件
3:tomcat引擎会调用class文件生成html,然后返回给客户端
为什么说jsp也是servlet?
当客户端第一访问jsp页面时,tomcat引擎会拿到jsp文件编写成java文件,承这个java文件里面类继承HttpJspBase类,HttpJspBase类又继承HttpServlet,所以可以认为jsp也是servlet
第六章 九大内置对象
九大内置对象:
四个作用域:pageContext、request、session、Application
两个输出:response、out
三个不常用:config、page、exception
内置对象的作用:
(1)pageContext
作用:取得任何范围参数,通过它可以获取其他八个内置对象,创建和初始化都由容器完成,在jsp页面可以直接使用
范围:在jsp页面可直接使用,仅限于本jsp页面
(2)request
作用:客户端的请求信息(请求头、请求行、参数)
范围:一次请求之间
(3)session
作用:由服务器自动创建的与用户请求相关的对象。用于保存用户信息、跟踪用户的操作状态。内部使用map来保存数据
范围:一次会话之间
(4)Application
作用:将信息保存在服务器,直到服务器关闭,用于获取项目访问访问路径以及配置参数。
范围:服务器开始到结束
(5)response
作用:对客户端的响应,将jsp容器处理过的对象传回客户端。
范围:仅限于本jsp页面
(6)out
作用:在web浏览器内输出信息,并且管理应用服务器上的输出缓冲区,待数据传输完毕后,要及时关闭输出流
(7)config
作用:取得服务器的配置信息
(8)page
作用:代表jsp本身,只有在jsp页面内才有作用
(9)exception
作用:显示异常信息,只有在包含 isErrorPage = "true"的页面才能使用,在一般的jsp页面中使用该对象,将无法编译jsp文件,如果在jsp页面中没有捕获到的异常,就会生成Exception对象,并将其传送到page指令中设置的错误页面进行处理。
第七章 jsp路径问题
(1)服务器根路径:http://localhost:8080/
(2)项目根路径:http://localhost:8080/servletHello/
(3)相对路径;
../:表示跳回上一级目录
优点:相对简单
缺点:当改变文件位置时,相对路径也改变
绝对路径:
优点:的那该改变文件位置时,对其他路径无影响
缺点:相对麻烦
jsp简化书写:
String path = request.getContextPath(); String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/"; <base href="<%=basePath%>">
这样在jsp页面中出现的路经都可以写成:servletHello,这样代表绝对路径。避免了404错误。
(4)在servlet中不同的“/”代表不同的路径:
web.xml
<url-pattern>/HelloPath</url-pattern> 里面的/代表 项目的根路径
请求转发
req.getRequestDispatcher("/").forward(req, resp); 里面的/代表项目的根路径
请求重定向
resp.sendRedirect("/"); 里面的/代表服务器根路径
EL表达式
第一章 EL表达式介绍及其优点
EL表达式:Expression Language;
作用:获取服务器中请求对象和作用域中的值
优点:相对于jsp来说
(1)写法简单
(2)不需要导jar包
(3)当获取不到数据时,不会显示null,而是什么都不显示
第二章 EL表达式获取不同存储集合中的数据
测试代码如下:
servlet代码:
public class HelloEL extends HttpServlet {
@Override
protected void service(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException { //获取用户名和密码
String name = req.getParameter("uname");
String pwd = req.getParameter("pwd");
System.out.println("HelloEL.service():"+name+"--"+pwd); //作用域存放字符串
req.setAttribute("realname", "zhangsanfeng"); //作用域可以存放list集合
ArrayList<String> list = new ArrayList<>();
list.add("a");
list.add("b");
list.add("c");
req.setAttribute("list", list); //作用域可以存放map
HashMap<String, String> map = new HashMap<>();
map.put("m1", "A");
map.put("m2", "B");
map.put("m3", "C");
req.setAttribute("map", map); //作用域存放user对象
User user = new User(1, "lisi", "123");
User user2 = new User(2, "wangwu", "abc");
req.setAttribute("user", user);
req.setAttribute("user2", user2); //把对象存放到list集合里面
User user3 = new User(3, "wangwu3", "abc3");
User user4 = new User(4, "wangwu4", "abc4");
User user5 = new User(5, "wangwu5", "abc5");
ArrayList<User> userlist = new ArrayList<>();
userlist.add(user3);
userlist.add(user4);
userlist.add(user5);
req.setAttribute("userlist", userlist); //把对象存放到map里面
HashMap<String, User> mapuser = new HashMap<>();
mapuser.put("u3", user3);
mapuser.put("u4", user4);
mapuser.put("u5", user5);
req.setAttribute("mapuser", mapuser); //请求转发
req.getRequestDispatcher("/el.jsp").forward(req, resp);
return;
} }
form表单:
<form action="HelloEL">
用户名:<input type="text" name="uname" value="zhangsan"/> <br />
密码:<input type="password" name="pwd" value="abc"/> <br />
爱好:<input type="checkbox" name="fav" value="1"/>吃饭
<input type="checkbox" name="fav" value="2"/>睡觉
<input type="checkbox" name="fav" value="3"/>打豆豆 <br />
<input type="submit" value="提交"/>
</form>
2.1 EL表达式获取请求对象里面的属性值
jsp写法:<%=request.getParameter("uname") %>
EL写法:${param.uname }
2.2 EL表达式获取请求对象里面的属性值,数组类型
jsp写法:<%=request.getParameterValues("fav")[0] %>
EL写法:${paramValues.fav[0] }
2.3 EL表达式获取作用域中的值
jsp写法:<%=request.getAttribute("realname") %>
EL写法:${realname }
2.4 EL表达式获取request作用域中list集合中的值
jsp写法:<%=((ArrayList<String>)(request.getAttribute("userlist"))).get(1) %>
EL写法:${userlist.get(1) } -- ${userlist[1] }
2.5 EL表达式获取request作用域中map集合的值
jsp写法:<%= ((HashMap<String,String>)request.getAttribute("mapuser")).get("m2")%>
EL写法:${mapuser.get("m2") } -- ${mapuser.m2 }
2.6 EL表达式获取request作用域中user对象的name属性值
jsp写法:<%= ((User)request.getAttribute("user")).getName() %>
EL写法:${user.name }
第三章 EL表达式获取固定作用域中的值
jsp有四个作用域:
(1)pageContext
(2)request
(3)session
(4)application(相当于servlet的ServletContext作用域)
获取作用域里面的值,如果作用域的key一样,EL表达式获取值默认是从小到大获取:
pageContext-->request-->session-->application(由小到大)
EL获取固定作用域中的值:
(1)pageContext作用域:
${pageScope.realname }
(2)request作用域:
${requestScope.realname }
(3)session作用域:
${sessionScope.realname }
(4)application作用域:
${applicationScope.realname }
第四章 EL表达式进行基本的运算
(1)进行基本的运算:+ - * / % ==
${1+1 } ${1*2 } ${1/0 } ${-1/0 } ${4%3 } ${1+"2" } ${1==1 }
(2)判断是否为空:empty
${empty str } ${empty array } ${empty user3 } ${empty list }
注:
(1)判断为true的情况:空的""字符串,null,空的集合
(2)判断为false的情况:空数组、空的对象
JSTL标签库
第一章 JSTL介绍及其作用
使用JSTL标签库,需要在项目中导入两个jar包:
这两个jar包,在小编的资源分享那篇文章有下载链接,或者留下邮箱,小编会第一时间给大家发过去的。
JSTL的作用:
替代在jsp页面写Java代码。主要用来显示EL表达式中的值,通常和EL表达式配合起来使用,需要手动导入标签库。
<%@ taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix="fmt"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
EL表达式的值:
用来获取请求对象或者作用域中的值。
第二章 fmt标签的应用
<!-- type 时间的类型(both 年月日时分秒 ;time 只显示时分秒 ) -->
<fmt:formatDate value="<%=new Date() %>" pattern="yyyy-MM-dd HH:mm:ss"/>
第三章 C标签应用
3.1 c:set 标签
作用:代替设置作用域,如果不指定作用域,默认设置最小作用域
<c:set var="realname" value="zhangsanfeng" ></c:set>
<c:set var="realname2" value="zhangsanfengPage" scope="page"></c:set>
<c:set var="realname" value="zhangsanfengRequest" scope="request"></c:set>
<c:set var="realname" value="zhangsanfengSession" scope="session"></c:set>
<c:set var="realname" value="zhangsanfengApplication" scope="application"></c:set>
3.2 c:remove 标签
作用:移出作用域,如果不指定作用域,默认移出所有作用域
<c:remove var="realname"/>
<c:remove var="realname" scope="page"/>
<c:remove var="realname" scope="request"/>
<c:remove var="realname" scope="session"/>
<c:remove var="realname" scope="application"/>
3.3 c:out 标签
作用:获取作用域,如果不需要设置默认值,不需要使用c:out标签
<c:out value="${realname3 }" default="lisi"></c:out>
3.4 c:if 标签
作用:相当于Java中的if else语句
<c:if test="${sex == 1 }">
<input type="radio" name="sex" value="1" checked/> 男
<input type="radio" name="sex" value="0"/> 女
</c:if>
<c:if test="${sex == 0 }">
<input type="radio" name="sex" value="1" /> 男
<input type="radio" name="sex" value="0" checked/> 女
</c:if>
3.5 c:choose 标签
作用:想当于Java中的if else if else语句
<c:choose>
<c:when test="${sex == 1 }">男</c:when>
<c:when test="${sex == 0 }">女</c:when>
<c:otherwise>其它</c:otherwise>
</c:choose>
3.6 c:forEach 标签
作用:相当于Java中的for循环语句
参数列表:
begin:开始值
end:结束值
var:循环变量
step:步距
items:结束作用域中的数据,进行循环
varStatus:数据的状态
vars.index:获取数据的值
vars.count:获取的是第几个数据
var.first:判断是否是第一个数据
var.last:判断是否是最后一个数据
应用一:打印九九乘法表
<c:forEach begin="1" end="9" var="i">
<c:forEach begin="1" end="${i }" var="j">
${i } * ${j } = ${i*j }
</c:forEach>
<br />
</c:forEach>
应用二:遍历list集合中的数据
<c:forEach items="${list }" var="each">
${each } --
</c:forEach>
应用三:遍历map集合中的数据
<c:forEach items="${map }" var="each">
${each.key } -- ${each.value } <br />
</c:forEach>
应用四:获取集合中的user对象,并将数据放到表格中
<table border="1" width="600px" align="center">
<tr>
<th>序号</th>
<th>姓名</th>
<th>地址</th>
</tr>
<c:forEach items="${userlist }" var="each" varStatus="vars">
<tr>
<th>${var.id }</th>
<th>${each.name }</th>
<th>${each.address }</th>
</tr>
</c:forEach> </table>
个人整理的jsp、EL表达式、JSTL标签库的笔记,少概念多实用,需要的留下邮箱,会第一时间分享原稿PDF给大家!的更多相关文章
- JavaWeb基础Day17 (JSP EL表达式 jstl标签库 beanutil工具类)
JSP jsp的实质就是指在html界面中嵌入Java代码 jsp脚本 <% Java代码 %> 相当于写在service方法中. <%=java 变量或者表达式 %> ...
- jsp学习---mvc模式介绍和el表达式,jstl标签库的使用入门
一.mvc模式介绍 下图是常用的mvc分层模式: 项目中的包命名规则,一般如下: com.amos.domain 封装JavaBean,一般我喜欢用model命名这个包com.amos.dao 封装d ...
- 2.EL表达式&JSTL标签库常用方法
1.EL表达式 Expression Language表达式语言,主要是代替jsp页面中的表达式脚本在jsp页面中进行数据的输出. 格式为${表达式} EL表达式输出Bean的普通属性.数组属性.Li ...
- jsp之el表达式jstl标签
不管是el表达式还是jstl标签最终的目的都是要消除jsp中的java代码,当然是消除显式的java代码 el表达式的出现是为了简化jsp中读取数据并写入页面的操作. el表达式的功能不多,也很好记 ...
- JSP总结(jsp/EL表达式/核心标签)
1.概念 jsp,即java Server Pages,java服务器页面. 2.简单介绍 小示例 <%@ page language="java" contentType= ...
- el和jstl标签库讲解视频
https://www.bilibili.com/video/av22415283/?p=1
- EL表达式与标签库
https://blog.csdn.net/panhaigang123/article/details/78428567
- 在JSP页面中导入jstl标签库
1 在工程中引用JSTL的两个jar包和标签库描述文件. (1)在项目上右击,从弹出的快捷键菜单中选择Properties命令,在出现的项目属性对话框上,选择DeploymentAssembly. ( ...
- 10、jstl标签库
一.JSTL是SUN公司制定的一个JSP标签库,由apache jakarta组织负责维护的开源项目,目的是用标签代替java代码片段.JSTL 1.0 由四个定制标记库(core.format.xm ...
随机推荐
- linux日常管理-xarge_exec
在find搜索到文件之后再进行操作 exec是find的一个选项. {}表示前面搜索到的结果,\:是exec特殊的用法. xarge拥有同样的功能,需用选项 -i 可以用在其他命令的后面
- zabbix的配置
一.网络自动发现: 1.zabbix的网络自动发现是一个非常强大的功能,该功能可以完成以下工作. a.快速发现并添加主机. b.简单的管理. c.随着环境的改变而快速搭建监控系统. 2.网络发现基于以 ...
- python变量、类型、运算、输出
1.变量.类型.运算.输出等 # -*- coding: utf-8 -*- a=2 b=3 c=a+b print u'结果是=%i'%c #加u显示中文 str=unicode(s,"u ...
- Flask09 原始输出、转义、XSS攻击、过滤器???
1 怎么在jinja模板中原始输出模板语法 1.1 用双引号引起来后放到 {{ }} 中 例如 {{ "{{}}" }} 输出 1.2 利用raw 例如 {% raw %} {% ...
- R: 时间处理(R自带函数)
################################################### 问题:时间处理 18.4.28 如何用,as.Date()规范日期.计算日期的加减等?? ...
- 怎么查看Eclipse的版本信息
工具/原料 Eclipse版本信息查看 第一种方法 1 找到Eclipse的解压目录就是你的Eclipse.exe 所在的目录 2 找到 .eclipseproduct 文件双击打开 3 如图 ...
- JavaScript中创建对象的三种模式
JS中,便于批量创建对象的三种模式: 1.工厂模式:用一个函数封装创建对象的细节,传入必要的参数,在函数内部new一个对象并返回. 缺点:创建的对象无法识别类型(全是Object) 2.构造函数模式: ...
- 20. Linux提权:从入门到放弃
几点前提 已经拿到低权shell 被入侵的机器上面有nc,python,perl等linux非常常见的工具 有权限上传文件和下载文件 内核漏洞提权 提到脏牛,运维流下两行眼泪,我们留下两行鼻血.内核漏 ...
- hdu1063
#include<iostream> #include<string> using namespace std; struct BigReal //高精度实数 { int le ...
- SQL Server 练习
use master if exists(select * from sys.databases where name='db_Test') drop database db_Test go crea ...