jsp一种动态web开发技术,JSP全名为Java Server Pages
jsp、el、jstl
https://github.com/StingLon/WEB-/blob/master/%E6%9C%8D%E5%8A%A1%E5%99%A8%E7%AB%AF-jsp#L7
和servlet技术一样都是用于动态开发web页面的技术,jsp本质是servlet,其特点就是HTML和Java代码共同存在
JSP是为了简化Servlet的工作出现的替代品,Servlet输出HTML非常困难,JSP就是替代Servlet输出HTML的。
Servlet和JSP最主要的不同点在于:Servlet的应用逻辑是在Java文件中,并且完全从表示层中的HTML里分离开来。而JSP的情况是Java和HTML可以组合成一个扩展名为.jsp的文件。
JSP侧重于视图,Servlet主要用于控制逻辑。
JSP是如何被执行的:
当客户端向一个jsp页面发送请求时,Web Container将jsp转化成servlet的源代码(只在第一次请求时),然后编译转化后的servlet并加载到内存中执行,执行的结果response到客户端
jsp只在第一次执行的时候会转化成servlet,以后每次执行,web容器都是直接执行编译后的servlet,所以jsp和servlet只是在第一次执行的时候不一样,jsp慢一点,以后的执行都是相同的
jsp的缺点?
1)不好调试2)可读性差1.语法: 什么让jsp有自己的方法:<% (方法) %>
注释方法: jsp: <%-- --%>
html/xml注释方法: <!-- -->
2.JSP指令:(taglib、include 、page)
为TOMCAT设计,只是告诉tomcat如何处理JSP页面中的其他部分。 格式: <$@ 指令 属性名="值" %>
1.page指令:导包
(head前添加)
例如:
<%@page contentType="text/html;charset=UTF-8" language="java" %>
2.include指令:引入其他JSP
(body中添加)
静态包含: <%@ include file="路径" %> 把文件的代码内容都包含进来,再编译 动态包含: <jsp:include page=""/> <jsp:include page="foot.jsp"/>
区别:动态包含是运行时包含把所有JSP编程成单独的servlet,静态包含是编译时包含把所有JSP编译成一个servlet,效率比动态好
【如果有相同名称的参数,使用静态包含就会报错!】! 3.taglib指令(导入标签库使用 :<%@ taglib uri="/struts-tags" prefix="s"%> )
3.JSP常用标签(行为)
1.include行为 <jsp:include page=""/> include行为是动态包含
2.param行为 <jsp:param page="">
<jsp:param name="username" value="zhongfucheng"/> </jsp:forward> 3forward行为 <jsp:forward page=""/> 其实forward行为就是对其封装!例: <jsp:forward page="head.jsp">
//4.directive行为 //5.javaBean行为
(4)九大隐式对象:
Request 用户端请求,此请求会包含来自GET/POST请求的参数Response (网页传回用户端的回应)Session (用来保存用户信息 ,与请求有关的会话期) 内置对象session其实就是HttpSessionApplication (正在执行的内容) 内置对象application其实就是ServletContext对象Config (服务器配置,可以取得初始化参数)Page (指当前页面转换后的servlet类的实例 JSP网页本身) page对象相当于普通java类的thisException (错误页面中使用) java.lang.Exception类的对象Out (用于页面输出)pageContext (页的属性是在这里管理,代表的编译后JSP内容,例如.getRequest()返回request对象) 代表着JSP页面编译后的内容,当前JSP页面pageContext 的方法:setAttribute(String name,Objcet o)getAttribute(String name)removeAttribute(String name)findAttribute(String name)PageContext类中定义了一个forward方法和两个include方法来分别简化和替代RequestDispatcher.forward方法和include方法。
pageContext.forward(String url)pageContext.include(String url)
4种属性;page【只在一个页面中保存属性,跳转页面无效】requet【只在一次请求中保存属性,服务器跳转有效,浏览器跳转无效】session【在一个会话范围中保存属性,无论何种跳转均有效,关闭浏览器后无效】application【在整个服务器中保存,所有用户都可以使用】
JSP两种技术1.el2.JSTL
1.EL 表达式语言
EL表达式是用"${}"括起来的脚本,用来更方便的读取对象EL表达式主要用来读取数据,进行内容的显示!语法:${标识符}
EL表达式如果找不到相应的对象属性,返回的的空白字符串“”,而不是null,这是EL表达式最大的特点!
2.JSTL JSP Standard Tag Library 即JSP标准标签库。
实现了基本的功能:集合的遍历、数据的输出、字符串的处理、数据的格式化等等!
使用JSTL标签库步骤:1.导入jstl.jar和standard.jar开发包2.在JSP页面中用tablib指令引入需要用到的JSTL标签
core标签库
core标签库是JSTL的核心标签库,实现了最基本的功能:流程控制、迭代输出等操作! core标签库的前缀一般是cc:outc:setc:removec:catchc:ifc:choosec:forEachc:forTokensc:importc:paramc:urlc:redirect
自定义标签
JSTL标签库只提供了简单的输出等功能,没有实现任何的HTML代码封装,并且某些复杂类型转换,或者逻辑处理的时候,JSTL标签库完成不了,需要自定义标签!
我们可以有两种方式来实现自定义标签:
传统方式,实现Tag接口(老方法)
简单方式,继承SimpleTagSupport类, 一般调用doTag方法或者实现SimpleTag接口