-
执行过程
当浏览器访问如Html,css,js,图片等静态等资源等时候,服务器找到相应等资源,通过响应实体,转换成流,直接返回给浏览器,让浏览器解析出来;
但是如果执行jsp时,因为jsp里可以写java代码,所以不会直接把jsp中的内容直接发送给浏览器,而是要经过翻译,翻译成servlet程序,然后执行完之后向浏览器输出一个html网页
当我们编译jsp的时候,会翻译成servlet,并且假如我们用tomcat的时候,会在work目录下对应工程里生成java文件
会把我们的jsp中的java代码在服务器端转变成执行结果,并和其他的html标签一起返回给浏览器。
-
jsp四大作用域和九大内置对象
page范围:只在一个页面保留数据(javax.servlet.jsp.PageContext(抽象类))
request范围:只在一个请求中保存数据(javax.servlet.httpServletRequest)
Session范围:在一次会话中保存数据,仅供单个用户使用(javax.servlet.http.HttpSession)
Application范围:在整个服务器中保存数据,全部用户共享(javax.servlet.ServletContext)
他们的作用范围:
page<request<Session<Application
out对象:用于向客户端、浏览器输出数据。
request对象:封装了来自客户端、浏览器的各种信息。
response对象:封装了服务器的响应信息。
exception对象:封装了jsp程序执行过程中发生的异常和错误信息。
config对象:封装了应用程序的配置信息。
page对象:指向了当前jsp程序本身。
session对象:用来保存会话信息。也就是说,可以实现在同一用户的不同请求之间共享数
application对象:代表了当前应用程序的上下文。可以在不同的用户之间共享信息。
pageContext对象:提供了对jsp页面所有对象以及命名空间的访问。
-
jsp指令
用来指挥jsp解析引擎(解析和翻译jsp)如何翻译当前jsp文件到servlet
page指令
声明一些基本属性信息,如:
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@page import="java.util.Date"%>
通知jsp使用java语言,使用utf-8编码,使用了Date库使用到一些包或者库
taglib指令
- 在引入JSTL标签库或者其他自定义的标签库时,需要先引入taglib指令先引入标签库
-
jsp+EL表达式
为了使JSP写起来更加简单。它提供了在 JSP 中简化表达式的方法,让Jsp的代码更加简化。
EL只可以取数据,不可以遍历数据;${ }
-
jsp标签与JSTL标签库
首先在jsp文件中导入
<!--这里用alt+/来导入 -->
<%@taglib prefix="C" uri="http://java.sun.com/jsp/jstl/core"%>
<!-- 这里用alt+/来导入 --> <h1>C:set取字符练习</h1> <C:set var="name" value="1231231231212312312" scope="request"></C:set> ${name } <h1>C:set取map数据练习</h1> <% Map map=new HashMap(); map.put("name", "苏苏"); map.put("sex", "男"); request.setAttribute("map_set", map); %> ${map_set.name} ${map_set.sex} <h2>用C:set修改map中的值</h2> <C:set target="${map_set}" property="name" value="健健"></C:set> ${map_set.name } <h1>C:if标签</h1> <C:if test="${100<50 }">yes </C:if> <C:if test="${!(100<50) }">no</C:if> <h1>C:forEach循环遍历List</h1> <% List<String>list=new ArrayList(); for(int i=0;i<5;i++){ list.add(i+""+i); } request.setAttribute("lists", list); %> <C:forEach items="${lists }" var="str">${str } <br/></C:forEach> <h1>C:forEach循环遍历HashMap</h1> <C:forEach items="${map_set}" var="str"> ${str }<br/> </C:forEach> <C:forEach items="${map_set}" var="str"> ${str.key }<br/> </C:forEach> <C:forEach items="${map_set}" var="str"> ${str.value }<br/> </C:forEach> <h1>C:forEach遍历1到100之间的偶数,并用逗号分隔</h1> <C:forEach begin="0" end="100" var="i">${i },</C:forEach> <br/> <C:forEach begin="0" end="100" var="i" step="2" varStatus="status">${i },</C:forEach> <br/> <C:forEach begin="0" end="100" var="i" step="2" varStatus="status"> ${i } <C:if test="${!status.last })">,</C:if> </C:forEach>
- 这里有必要说一下<C:forEach begin="0" end="100" var="i" step="2" varStatus="status"> ,这个varStatus,可以取first表示取第一个,last表示取最后一个,count表示当前是第几个,如果用下标的话,可以用count-1;