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给大家!的更多相关文章

  1. JavaWeb基础Day17 (JSP EL表达式 jstl标签库 beanutil工具类)

    JSP jsp的实质就是指在html界面中嵌入Java代码 jsp脚本 <%  Java代码  %>  相当于写在service方法中. <%=java 变量或者表达式 %> ...

  2. jsp学习---mvc模式介绍和el表达式,jstl标签库的使用入门

    一.mvc模式介绍 下图是常用的mvc分层模式: 项目中的包命名规则,一般如下: com.amos.domain 封装JavaBean,一般我喜欢用model命名这个包com.amos.dao 封装d ...

  3. 2.EL表达式&JSTL标签库常用方法

    1.EL表达式 Expression Language表达式语言,主要是代替jsp页面中的表达式脚本在jsp页面中进行数据的输出. 格式为${表达式} EL表达式输出Bean的普通属性.数组属性.Li ...

  4. jsp之el表达式jstl标签

    不管是el表达式还是jstl标签最终的目的都是要消除jsp中的java代码,当然是消除显式的java代码 el表达式的出现是为了简化jsp中读取数据并写入页面的操作. el表达式的功能不多,也很好记 ...

  5. JSP总结(jsp/EL表达式/核心标签)

    1.概念 jsp,即java Server Pages,java服务器页面. 2.简单介绍 小示例 <%@ page language="java" contentType= ...

  6. el和jstl标签库讲解视频

    https://www.bilibili.com/video/av22415283/?p=1

  7. EL表达式与标签库

    https://blog.csdn.net/panhaigang123/article/details/78428567

  8. 在JSP页面中导入jstl标签库

    1 在工程中引用JSTL的两个jar包和标签库描述文件. (1)在项目上右击,从弹出的快捷键菜单中选择Properties命令,在出现的项目属性对话框上,选择DeploymentAssembly. ( ...

  9. 10、jstl标签库

    一.JSTL是SUN公司制定的一个JSP标签库,由apache jakarta组织负责维护的开源项目,目的是用标签代替java代码片段.JSTL 1.0 由四个定制标记库(core.format.xm ...

随机推荐

  1. 【254】◀▶IEW-Unit19

    Unit 19 Technology Communication I.名词性从句在雅思写作中的运用 英语中哪些位置可以放名词? 1)主语 2)宾语 3)表语 4)同位语 名词的位置放一个句子=名词性从 ...

  2. pig语法学习 FOREACH GENERATE group AS

    深入浅出,转一个 转载必须注明出处:http://www.codelast.com/ 转载地址 本文可以让刚接触pig的人对一些基础概念有个初步的了解. 本文大概是互联网上第一篇公开发表的且涵盖大量实 ...

  3. Struts2学习第七课 result

    result 是action节点的子节点 result 代表action方法执行后,可能去的一个目的地 一个action节点可以配置多个result子节点. result的name属性值对应着acti ...

  4. HN669打包工具--调试文档

    调试有两种方式,一是直接在游戏工程上面调试,这比较麻烦,需要根据插件配置文件和脚本文件去配置好工程选项后,才能调试.简单一点就是通过脚本文件打包后会有生成游戏工程对应每个渠道的工程. 如下图:这个工程 ...

  5. Flask 入门(第一篇)

    1. 认识 Flask Flask 是一个微型 Web 框架,依赖于 jinjia2 模板系统和 Werkzeug WSGI(本质为 Socket 服务端) 服务,默认情况不支持数据库抽象层.表单验证 ...

  6. 利用MVC的Area作为二级域名

    此处使用的域名是我改了系统的hosts文件达到的 测试成功! 全局的注册方式 在Area的注册文件里进行配置 一个Area和一个外部的Controller 废话不多说,提供DEMO 下载地址

  7. Cactus详细讲解

    Cactus建议一年以上有经验的人玩,刚入门MVC,不了解下列组件请先自行学习,切勿好高骛远. Cactus的组成(基于.net4.5.2):Dapper+MVC4+autofac 前端css框架pu ...

  8. unity 查找游戏中隐藏的物体

    在Hierarchy 有时会隐藏一些游戏物体,我们需要在游戏的时候将其激活状态变为true 我们发现通过  GameObject.Find("隐藏物体名字") 是查找不到隐藏对象的 ...

  9. BKMyFAQ

    邮箱配置如图 发送格式: { "bk_app_code": "bk_monitor", #该字段可以查看文件:/data/install/.app.token ...

  10. Openstack swift 学习笔记

    Swift 不是文件系统或者实时的数据存储系统,而是对象存储,用于长期存储永久类型的静态数据.这些数据可以检索.调整和必要时进行更新.Swift最适合虚拟机镜像.图片.邮件和存档备份这类数据的存储. ...