jsp-一篇就够

目录

jsp是什么

jsp如何插入java代码:

Servlet与JSP异同点

JSP 生命周期:

 第一个jsp程序

jsp内置对象 

JSP指令

EL表达式

JSTL作用和语法格式


jsp是什么

是一种动态网页开发技术。是一个以.jsp结尾的特殊的servlet文件。

jsp如何插入java代码:

标签通常以<%开头,以%>结束

Servlet与JSP异同点

序号ServletJSP
1Servlet 在 Java 内添加 HTML 代码JSP 在 HTML 内添加 Java 代码
2Servlet 是一个 Java 程序,支持 HTML 标签JSP 是一种 HTML 代码,支持 Java 语句
3Servlet 一般用于开发程序的业务层(做一些复杂的逻辑处理)JSP 一般用于开发程序的表示层(显示数据)
4Servlet 由 Java 开发人员创建和维护JSP 常用于页面设计,由 Web 开发人员使用

JSP 生命周期:

定义了 JSP 从创建到销毁的整个过程。这类似于 Servlet 生命周期,不同的是,JSP 依赖于 Servlet,用户访问 JSP 页面时,JSP 代码会被编译成 Servlet 代码,最终,以字符串的形式向外输出 HTML 代码。所以,JSP 只是在 Servlet 的基础上做了进一步封装。
JSP 生命周期阶段如下:

  1. 编译
  2. 初始化(容器调用 jspInit() 方法)
  3. 执行(容器调用 _jspService() 方法)
  4. 销毁(容器调用 jspDestroy() 方法)

 第一个jsp程序

index.jsp 代码如下:

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title></title>
</head>
<body>
    <%out.print("Hello");%>
</body>
</html>
  1. 启动服务器
  2. 通过 URL 访问,例如:http://localhost:8080/index.jsp

jsp内置对象 

为了简化页面的开发过程,JSP 提供了九个内置对象。

JSP 内置对象又称为隐式对象,它们由容器实现和管理。在 JSP 页面中,这些内置对象不需要预先声明,也不需要进行实例化,我们可以直接在脚本和表达式中使用。

对  象类型说  明
requestjavax.servlet.http.HttpServletRequest获取用户请求信息
responsejavax.servlet.http.HttpServletResponse响应客户端请求,并将处理信息返回到客户端
outjavax.servlet.jsp.JspWriter输出内容到 HTML 中
sessionjavax.servlet.http.HttpSession用来保存用户信息
applicationjavax.servlet.ServletContext所有用户共享信息
configjavax.servlet.ServletConfig这是一个 Servlet 配置对象,用于 Servlet 和页面的初始化参数
pageContextjavax.servlet.jsp.PageContextJSP 的页面容器,用于访问 page、request、application 和 session 的属性
pagejavax.servlet.jsp.HttpJspPage类似于 Java 类的 this 关键字,表示当前 JSP 页面
exceptionjava.lang.Throwable该对象用于处理 JSP 文件执行时发生的错误和异常;只有在 JSP 页面的 page 指令中指定 isErrorPage 的取值 true 时,才可以在本页面使用 exception 对象。

具体 用法和区别:

<%--四个可存值取值的内置对象--%>
<%--setAttribute(name,value):吧name属性设置为相应的value--%>
<%--在某次请求有效--%>
<% request.setAttribute("a1","aaa");%>
<%request.getAttribute("a1");%>
<%--多次请求--%>
<%session.setAttribute("b1","bbb");
session.getAttribute("b1");%>

<%--application表示在整个程序运行期间,换浏览器也可以得到--%>
<%application.setAttribute("c1","ccc");
application.getAttribute("c1");%>

<%--page=this  在当前页面有效--%>
<%pageContext.setAttribute("d1","ddd");
pageContext.getAttribute("d1");%>

<%--<%response.sendRedirect("");%>:重定向--%>
<%response.getWriter();%>

<%--out输出--%>
<%out.print("out-----");%>
<%out.print("<script>alert('succse');</script>");%>

<%--config用来获得初始化参数--%>
<%config.getInitParameter("");%>
<%--exception:在页面有错误情况下才会使用,一般不使用--%>

JSP指令

JSP 指令(directive)用来告诉 Web 服务器如何处理 JSP 页面的请求和响应。

服务器会根据 JSP 指令来编译 JSP,生成 Java 文件。JSP 指令不产生任何可见输出,在生成的 Java 文件中,不存在 JSP 指令。

JSP 指令以<%@开始,以%>结束,语法如下:

<%@ directive attribute = "value" [attribute2 = "value2" ...]%>

 指令分为以下 3 种类型。

指  令说  明
<%@ page ... %>定义与页面相关的属性,例如脚本语言、错误页面和缓冲要求
<%@ include ... %>引入其它 JSP 文件
<%@ taglib ... %>声明并导入标签库

 page 指令用来定义当前页面的相关属性。page 指令可以在 JSP 页面的任意位置编写,通常放在 JSP 页面的顶部。

 page指令各个属性解释:

属  性取  值说  明举  例
buffernone、缓冲区大小(默认值为 8kb)指定输出流是否有缓冲区<%@ page buffer="16kb" %> 
autoFlushtrue(默认值)、false指定缓冲区是否自动清除<%@ page autoFlush="true" %> 
contentTypetext/html; charset = ISO-8859-1、
text/xml;charset = UTF-8 等
指定 MIME 类型和字符编码<%@ page contentType="text/html;charset=UTF-8" %>
errorpage页面路径指定当前 JSP 页面发生异常时,需要重定向的错误页面<%@ page errorpage="myerrorpage.jsp" %>

注意:myerrorpage.jsp 的 isErrorpage 值必须为 true
isErrorpagetrue、false(默认值)指定当前页面为错误页面<%@ page isErrorpage="true" %>  
extends包名.类名指定当前页面继承的父类,一般很少使用<%@ page extends="mypackage.SampleClass"%>
import类名、接口名、包名导入类、接口、包,类似于 Java 的 import 关键字<%@ page import = " java.util.Date" %>
<%@ page import="java.io.*, java.lang.*"%>
info页面的描述信息定义 JSP 页面的描述信息,可以使用 getServletInfo() 方法获取<%@ page info="这里是编程帮的页面信息"%>
isThreadSafetrue(默认值)、false是否允许多线程使用<%@ page isThreadSafe="false" %>
language脚本语言指定页面中使用的脚本语言<%@ page language= "java" %>
sessiontrue(默认值)、false指定页面是否使用 session<%@ page session="false" %>
isELIgnoredtrue(默认值)、false指定页面是否忽略 JSP 中的 EL<%@ page isELIgnored="false" %>

 以上属性除了 import 可以声明多个外,其它属性都只能出现一次。

include 指令用于在 JSP 页面引入其它内容,可以是 JSP 文件、html 文件和文本文件等,相当于把文件的内容复制到 JSP 页面。引入的文件和 JSP 页面同时编译运行

在 index.jsp 页面使用 include 指令引入 head.jsp。head.jsp 代码如下:

<p>header内容​</p>

index.jsp 代码如下:

<html>
  <head>
    <title>$Title$</title>
  </head>
  <body>
 <%@ include file="head.jsp"%>
  </body>
</html>

 taglib 指令声明并引入标签库。Java API 允许在页面中自定义标签,标签库就是自定义标签的集合 .具体下面在描述

EL表达式

主要作用展示数据

EL 表达式语法如下:

${EL表达式}

EL支持算术运算符、逻辑运算符、比较运算符等

注意:EL 的+运算符与 Java 的+运算符不一样,它无法实现两个字符串的连接运算。

具体用法

<body>
<%
//EL如果读取变量变量一定要在作用域中pageContext,request,session,application中
// 下面a不可读取,但a1可以
 int a=10;
pageContext.setAttribute("a1",a)

//集合类型,但这里只能一个一个读取循环集合读取下面会讲
List list = new ArrayList();

list.add("abc");
pageContext.setAttribute("a2",list);
Map map = new HashMa();
map.put("k1","key");
pageContext.setAttribute("a3",map);

%>

${20+30}<br>               //50
${20>30}<br>               //false
${20<30}<br>               //true
${20>30?"aaa":"bbb"}<br>   //bbb
a=${a}<br>                 //a=
a=${a1}<br>                // a=10
abc=${a2[0]}               //abc=abc
k1=${a3.k1}                //k1=key

如果集合中键值相同会怎样?怎样获得指定作用域的值?

<%
pageContext.setAttribute("a4",pageContext内容);
request.setAttribute("a4",request内容);
session.setAttribute("a4",session内容);
application.setAttribute("a4",application内容);
%>

//键值相同,按顺序获取最前面的
a4=${a4}                       //pageContext内容
session=${sessionScope.a4}     //session内容
pageContext = ${pageScope.a4}  //pageContext内容

JSTL作用和语法格式

作用:简化jsp页面编写

语法格式:

在jsp界面引入

 prefix前缀是固定的

 常用标签

 

 具体用法

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
<h1>yi</h1>
<c:set var="uname" value="zhangsan" scope="session">
</c:set>

<c:if test="${uname == "zhangsan}">
这是张三
</c:if>

<c:choose>
<c:when test=$"{uname =='zhangsan'}">
  c-choose-zhangsan
</c:when>
<c:otherwise>
 c-choose-bushizhangsan
</c:otherwise>

//foreach
<%
List list = new ArrayList();
list.add("abc");
    list.add("123");
    list.add("zhangsan");
    pageContext.setAttribute("ulist",list);
%>
<c:forEach items="${ulist}" var="user" varStatus="sta">
    ${user}<br>
</c:forEach>

//日期
date = <fmt:formatDate value="${mytime}" pattern="yyyy-,,-dd"></fmt:formatDate>
${sessionScope.uname}




</body>
</html>

 foreach

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值