服务器端——jsp

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其实就是HttpSession
Application (正在执行的内容) 内置对象application其实就是ServletContext对象
Config (服务器配置,可以取得初始化参数)
Page (指当前页面转换后的servlet类的实例 JSP网页本身) page对象相当于普通java类的this
Exception (错误页面中使用) 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.el
2.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标签库的前缀一般是c
c:out
c:set
c:remove
c:catch
c:if
c:choose
c:forEach
c:forTokens
c:import
c:param
c:url
c:redirect

 

 

 自定义标签

JSTL标签库只提供了简单的输出等功能,没有实现任何的HTML代码封装,并且某些复杂类型转换,或者逻辑处理的时候,JSTL标签库完成不了,需要自定义标签!

我们可以有两种方式来实现自定义标签:

传统方式,实现Tag接口(老方法)
简单方式,继承SimpleTagSupport类, 一般调用doTag方法或者实现SimpleTag接口

 

posted @ 2018-10-19 15:31  StingLon  阅读(343)  评论(0编辑  收藏  举报