jsp笔记

1.jsp语法

(1)jsp就是一个servlet,servlet的技术可以用在jsp上。
(2)jsp与servlet的生命周期
Servlet的生命周期:
init方法
service方法
destory方法
jsp的生命周期:
_jspInit方法
_jspService方法
_jspDestory方法
(3)jsp模板
jsp页面的html代码就是模板
(4)jsp表达式
<%=变量或表达式%>
作用:向浏览器输出变量的值或表达式的结构
(5)jsp脚本
<%java语句%>
作用:执行java语句
原理:原封不动的翻译到java文件的jspServe方法中执行
(6)jsp声明
<%! 变量或方法 %>
作用:用于声明变量或方法
原理:声明的变量是成员变量,声明的方法是成员方法
 (7)jsp注释

<%-- --%>

 

2.jsp三大指令

(1)taglib指令
<%@ taglib uri="" prefix="" %>
uri:表示需要导入的标签库的uri名称
    (每个标签库都会有一个tld后缀名的标签声明文件,在tld文件中都有一个唯一的uri的名称)

prefix:使用标签库的前缀,通常和tld的short-name名称相同

(2)include指令
<%@ include file="xxx.jsp"%>
作用:用于包含其它页面
原理:直接把包含与被包含的页面内容合并在一起,然后翻译成一个java源文件,最后编译执行
      (静态包含)

(3)page指令

<%@ page

language="java" 使用什么语言来翻译jsp文件
import="java.util.*"         导包
pageEncoding="utf-8" 使用什么编码翻译jsp文件
contentType="text/html;charset=utf-8" 服务器发送给浏览器的数据类型和内容编码格式
errorPage="xxx.jsp" 指定jsp错误处理页面
isErrorPage="true"         指定当前页面为错误处理页面。可以使用exception内置对象查询错误信息
session="true" 是否打开session功能
buffer="8kb"         jsp页面的缓冲区大小

isELIgnored="false" 是否忽略EL表达式

%>

 

3.jsp与servlet的分工

(1)
jsp技术:比较适合输出html代码
servlet:比较适合写java代码

(2)项目中涉及到的功能
(1)接收参数信息                 servlet
(2)执行业务逻辑(增删改查) servlet
(3)返回结果,输出结果         jsp

(4)跳转页面                 servlet

 

4.jsp的内置对象

9大内置对象

       jsp对象名                   类型
request HttpServletRequest             请求对象
reaponse         HttpServletResponse     响应对象
config ServletContext     配置对象
application ServletContext     servlet上下文对象
session HttpSession             会话对象
exception Throwable             异常信息对象
page(this) Object             代表jsp文件翻译后的java类
out         JspWrite                             代表输出对象(带缓冲功能)
pageContext pageContext             代表jsp的上下文对象

pageContext对象:
作用:
(1)通过pageContext对象获取其它8个内置对象
(2)作为域对象使用
(a)保存到page域
pageContext.setAttribute("name",Object)
(b)保存到其它域
pageContext.setAttribute("")
(c)获取page域
pageContext.getAttribute("name")
(d)从其它域中获取

(e)自动搜索四个域数据

pageContext.findAttribute("name")

 

5.jsp域对象

jsp的四个域对象
request域     HttpServletRequest
application域     ServletContext
session域            HttpSession
page域     PageContext

域对象的作用:
共享数据、保存数据、获取数据
域对象的方法:
setAttribute()
getAttribute()
removeAttribute()
域的作用范围:
从小到大:
page域 在同一个jsp页面中
request域 在同一个请求中
session域     在同一个会话中

application域 在同一个网站中

 

6.EL表达式

(1)EL表达式替代jsp表达式,在jsp页面中尽量少写或不写java代码

(2)作用:

向浏览器输出域对象中的变量或表达式计算的结果
(3)语法:
${变量或表达式}
(4)获取不同类型的数据
普通字符串
普通对象
数组或list集合
Map集合
(5)EL执行表达式
算术表达式
比较表达式
逻辑表达式
判空表达式
(6)EL的内置对象
PageContext
pageScore
requestScope
sessionScope
applicationScope
param
paramValues
header
cookie

initParam

 

7.jsp标签+动作标签

(1)简介:
EL表达式可以替换jsp表达式,但是EL表达式有局限:不能条件判断,不能赋值,不能迭代。jsp标签替代
jsp脚本,完成条件判断,赋值,迭代等功能。

(2)分类:
(1)jsp内置标签(动作标签):使用的时候不需要导入标签库
(2)jstl标签(标准标签):使用的时候都需要导入标签库
(3)自定义标签:使用的时候需要导入标签

(3)动作标签(内置标签)
(1)<jsp:forward/> 转发标签
(2)<jsp:param/> 参数标签
(3)<jsp:include/> 包含标签 (先翻译再合并,动态包含,可携带数据)

Demo:
(1)转发:
(2)参数:
<%
request.getRequestDispatcher("/xxx.jsp?name=jacky").forward(request,response)
%>

-----> <jsp:forward page="/xxx,jsp">
  <jsp:param value="jacky" name="name"/>

<jsp:forward/>

(3)包含:
<jsp:include page="/common/header.jsp"></jsp:include>

    主页内容

 

8.jstl标签

(1)jst:
标准标签库。使用时需要导入标签库。
(2)分类:
核心标签库(core)(重要)
国际化标签库(fmt)
EL函数库(fn)
SQL标签库(sql)(基本不用)
XML标签库(x)(基本不用)
(3)使用:
使用taglib指令,导入标签

<%@ taglib uri="" prefix="" %>
uri:表示需要导入的标签库的uri名称
    (每个标签库都会有一个tld后缀名的标签声明文件,在tld文件中都有一个唯一的uri的名称)
prefix:使用标签库的前缀,通常和tld的short-name名称相同


(1)核心标签库:
<%@ taglib uri="core" prefix="c" %>
<c:set></c:set> 保存数据
    <c:out value=""></c:out> 获取数据
    <c:if test=""></c:if> 单条件判断
    <c:choose></c:choose> 多条件判断(三个)
    <c:when test=""></c:when> (相当于if elseif else)
    <c:otherwise></c:otherwise>
    <c:forEach></c:forEach> 用于迭代(循环)
    <c:forTokens items="" delims=""></c:forTokens>
    <c:redirect></c:redirect> 重定向

Demo:
(a)
<c:set var="name" value="jacky" scope="page"/>
      ${name }

      var:数据的名称
      value:保存的数据值
      scope:保存到那个域(page,request,session,application)
     
      (b)
<c:out value="${name }" default="<h3>标题3</h3>" escapexml="false"></c:out>

      value:代表获取域中的某个名称内容。如果数据在域中,必须使用EL语句 
      default:默认值。表示如果需要获取的数据内容为null,那么使用默认值来代替需要获取的内容
      escapeXML:true/false。表示是否需要对输出的内容进行转义(如果不写则为默认值false)

(c)
<c:if test="${10 > 8 }">
      <input type="submit" value="提交"/>
    </c:if>

test:条件表达式,返回true的时候就会执行标签体内容

(d)
<c:choose>
      <c:when test="${!empty sessionScope.user }">
      欢迎回来。<a href="">【退出登录】</a>
      </c:when>
      <c:otherwise>
      请先<a href="">注册</a>或<a href="">登录</a>
      </c:otherwise>
    </c:choose>

相当于if  else

(e)
<c:forEach begin="" end="" step="" items="" var="" varStatus="">

</c:forEach>

begin:表示从哪一个元素开始遍历
end:表示到哪一个元素结束
step:增加步长,默认为1
items:需要遍历的数据(数组/list集合/Map集合)
var:表示元素名称
varStatus:当前状态对象,该对象封装当前元素状态信息

注意:
遍历Map集合时,把每个Map的对象使用Entry封装,Entry封装键对象和值对象,通过
getValue获取值对象
<c:forEach items="${map}" var="entry">
</c:forEach>

(f)
<c:forTokens item="" delims="" var="">
</c:forTokens>

获取特殊字符串(例:I-love-java)
item:表示需要遍历了字符串
delims:指定分割符号(例:"-")
var:表示每个内容的名称

(g)
<c:redirect url="/xxx.jsp"></c:redirect>

重定向到xxx.jsp

 

9.自定义标签开发步骤

 

开发步骤

(1)开发一个标签处理程序,是一个普通的java类,继承SimpleTagSupport类,覆盖doTag方法

Demo:
/*
  * 自定义标签的标签程序:输出ip地址
*/
public class ShowIpTag extends SimpleTagSupport {

@Override
public void doTag() throws JspException, IOException {
//(1)获取客户端IP
PageContext pageContext = (PageContext)this.getJspContext();

//(2)通过PageContext获取到其它8个
ServletRequest request = pageContext.getRequest();
HttpServletRequest request1 = (HttpServletRequest)request;
String ip = request1.getRemoteHost();

//(3)把ip输出给浏览器
JspWriter out = pageContext.getOut();
out.write("当前客户端的IP为:"+ip);
}
}
 

(2)在项目的WEB-INF目录中建立一个tld文件

Demo:
<?xml version="1.0" encoding="utf-8"?>

<!DOCTYPE taglib
  PUBLIC "-//Sun Microsystems, Inc.//DTD JSP Tag Library 1.2//EN"
  "http://java.sun.com/dtd/web-jsptaglibrary_1_2.dtd">
  
<taglib>
<!-- 标签的版本号 -->
  <tlib-version>1.0</tlib-version>
  <jsp-version>1.2</jsp-version>
  <!--简单名称,用于使用标签库的前缀 -->
  <short-name>gao</short-name>
  <!-- 是标签库的唯一名称-->
  <uri>http://www.gaoguocai.com</uri>

  <!-- 定义一个标签 -->
    <tag>
  <!-- 标签名称 -->
    <name>showIpTag</name>
    <!-- 标签处理程序的全名  包名+类名-->
    <tag-class>gao.a_05jsp_webdemo01_tag.ShowIpTag</tag-class>
    <!-- 标签体内容输出格式 -->
    <body-content>scriptless</body-content>
  </tag>
 
</taglib>

(3)在jsp页面顶部导入自定义标签库

Demo:

<%@taglib uri="http://www.gaoguocai.com" prefix="gao" %>

 

10.自定义标签的作用

(1)自定义标签生命周期

实现了SimpleTage接口的类就是标签处理程序类;

SimpleTage接口:
(1)构造方法
(2)setJspContext(JspContext context) 传入pageContext对象
(3)setParent(JspTag tag) 传入父标签。如果没有父标签,不会调用此方法。
(4)setJspBody(JspFragment jspbody) 传入标签体内容对象。标签体内容封装到JspFragment对象中。如果没有标签体内容,不会调用此方法
(5)doTag() 执行标签

 

(2)自定义标签的作用:
(1)控制标签体内容是否输出
(2)控制标签后面的内容是否输出
(3)重复控制标签体内容输出
(4)改变标签体内容输出




 

 

  • 3
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值