Java Server Page

目录

一、概念

二、jsp的引入

三、Jsp的执行两个阶段

四、jsp的三大指令

3、%@taglib%

一、tablib指令需要导入两个jar包

二、导入jstl核心库

三、核心标签库


一、概念

Java Server Page:能够书写Java代码的服务页面
只限定于Java语言,能够和后台服务器端程序进行交互 :主要展示视图层,服务端程序,获取数据

二、jsp的引入

1、jsp

域对象不仅有ServletContext,常用的HttpServletRequest域对象,在一次请求中有效
能够处理后台的业务数据 (能够书写代码/提供很多标签库去使用)

2、基本使用

1)创建RequestServletDemo继承HttpServlet

public class RequestServletDemo extends HttpServlet {
​
    protected void doGet(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {
        //通过request 作为域对象,给里面存储一些数据
        request.setAttribute("name","高圆圆");
        System.out.println("存储成功...");
​
        //需要请求转发到01_jsp的引入.jsp页面中
request.getRequestDispatcher("/01_jsp的引入.jsp").forward(request,response);
​
    }
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        doGet(request,response);
    }
}

2)创建xml

    <servlet>
        <servlet-name>RequestServletDemo</servlet-name>
        <servlet-class>com.qf.request_04.RequestServletDemo</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>RequestServletDemo</servlet-name>
        <url-pattern>/requestDemo</url-pattern>
    </servlet-mapping>

3)创建jsp文件

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>jsp的引入</title>
</head>
<body>
<%--
    jsp能够书写java代码
    jsp的脚本
--%>
<%
    //jsp脚本
    String name = (String) request.getAttribute("name");
    //jsp的内置对象   Writer----out给浏览器书写内容
    out.write("name:"+name);
    //System.out.println("name:"+name);
​
    int i  = 10 ;
%>
<%--jsp的输出表达式--%>
    (1) <%=i%>
    (2) ${requestScope.name}
<%--jsp的el表达式 去替代jsp的输出表达式--%>
    (3) <h3>name</h3>${name}   --- 使用方式三
​
</body>
</html>

三、Jsp的执行两个阶段

举例:
1)hello.jsp---->通过web容器 "翻译"  成  hello_jsp.java文件
            会将当前jsp页面中所有内容通过JspWriter:输出对象给浏览器中拼接内容
class hello_jsp    ---->规定了jsp的生命周期 :_jspInit()  _jspService(请求对象,响应对象)
                                           _jspDestory()
                                           
 2)第二个阶段:需要将hello_jsp.java----hello_jsp.class   ---字节码文件对象         (web容器通过
 反射机制(内省机制)获取当前类对象,调用_jspservice:程序入口方法)   
 
 
 Jsp本质就是 Servlet
 
 public final class hello_jsp extends org.apache.jasper.runtime.HttpJspBase{}
 
public abstract class HttpJspBase extends HttpServlet implements HttpJspPage {}

四、jsp的三大指令

<%@Page
         import:导入java的一些核心类或者接口
         contentType="text/html;charset=UTF-8" 设置jsp的内容格式以及编码
         language="java":只支持Java语言
         buffer:jsp默认的缓冲区大小(jsp中可以不断向浏览器输出:写数据过去):默认8kb(一般不用设置)
       errorPage:当jsp发生异常,跳转到错误页面上
       session:是否启用HttpSession域对象, (不用去设置,默认就是自动启动)
       isErrorPage:当前页面是否为错误页面 默认false
%>

<%@include jsp静态导入%>

    file属性:导入资源文件

    静态导入:原理
    不会将被导入的jsp文件单独进行翻译和编译,而只是将当前被导入jsp文件的内容加载进来,节省内存!

<%@taglib 导入jsp的核心标签库jstl%>

1、%@Page%

<%@ page contentType="text/html;charset=UTF-8"
         import="java.util.*"
         language="java"
         buffer="8kb"
         errorPage="error.jsp"    ----  当程序错误时跳转到error.jsp包,需创建
         session="false"
         isErrorPage="false"
%>
<%--
        import:导入java的一些核心类或者接口
         contentType="text/html;charset=UTF-8" 设置jsp的内容格式以及编码
         language="java":只支持Java语言
         buffer:jsp默认的缓冲区大小(jsp中可以不断向浏览器输出:写数据过去):默认8kb(一般不用设置)
        errorPage:当jsp发生异常,跳转到错误页面上
        session:是否启用HttpSession域对象, (不用去设置,默认就是自动启动)
        isErrorPage:当前页面是否为错误页面 默认false
--%>
<html>
<head>
    <title>Title</title>
</head>
<body>
<%--jsp的脚本--%>
<%
        //定义变量
        int i = 100 ;
        System.out.println("i:"+i);//控制台打印
        //向浏览器写入内容          
        out.write("i:"+i);
​
        int b = 10 / 0 ;
%>
<%--jsp的输出表达式--%>
    i的值是:
    <%=i%>
</body>
</html>

2、%@include% ---- 静态导入

原理:

不会将被导入的jsp文件单独进行翻译和编译,而只是将当前被导入jsp文件的内容加载进来,节省内存!

表达式:

 ${pageContext.request.contextPaht}:获取的当前上下文路径

基本操作

1)创建inlude.jsp

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Jsp的静态导入</title>
</head>
<body>
<div>
    <%@include file="header.jsp"%>    ----   嵌套header.jsp
    <%--轮播图--%>
    <img src="${pageContext.request.contextPath}/img/1.jpg"/>
</div>
</body>
</html>

2)创建header.jsp

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>头部页面</title>
</head>
<body>
<div style="background-color: olivedrab;">
    <a href="#">我的商品</a>
    <a href="#">手机数码</a>
    <a href="#">鞋靴箱包</a>
    <a href="#">笔记本专区</a>
</div>
</body>
</html>

3、%@taglib%

一、tablib指令需要导入两个jar包

1)jstl(jsp的标签库)---jar包
2)statndard.jar
           一般:核心标签库使用最多

二、导入jstl核心库

prefix:前缀名称 c
uri:统一资源定位:关联核心库的地址

<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>

三、核心标签库

1、c:if 标签 jsp提供一个判断功能

  test属性:从域对象中获取数据,判断数据结果为true成立,否则不成立!
  test属性:内置的关键字, empty 从域对象中获取内容 判断对象是否为空
 
    <c:if test="${empty list}">
   list对象为空
    </c:if> 

2、c:choose标签

c:choose标签就类似于Java语法中if...esle if...else...

c:choose:进入到选择语句
    c:when:具体的分支判断语句
       test属性:从域对象中获取数据,判断结是否成立,true:则执行when语句.否则不执行
    c:otherwise:当上面的c:when标签结果不成立,执行c:otherwise的语句

<%
    int i = 10 ;
    //将i的存储在域对象中
    request.setAttribute("i",i);
%>
<c:choose>
    <%-- 具体判断语句--%>
    <c:when test="${i==1}">
            <h4>星期一</h4>
    </c:when>
    <c:when test="${i==2}">
        <h4>星期二</h4>
    </c:when>
    <c:when test="${i==3}">
        <h4>星期三</h4>
    </c:when>
    <c:when test="${i==4}">
        <h4>星期四</h4>
    </c:when>
    <c:when test="${i==5}">
        <h4>星期五</h4>
    </c:when>
    <c:when test="${i==6}">
        <h4>星期六</h4>
    </c:when>
    <c:when test="${i==7}">
        <h4>星期日</h4>
    </c:when>
    <%--如果上面都不匹配--%>
    <c:otherwise>
        <h4>非法数据</h4>
    </c:otherwise>
</c:choose>

3、c:foreach标签

1)低级用法:

c:foreach标签类似于Java中的普通for循环
​
属性:
    var:循环中的变量名称
    beigin:初始索引
    end:结束索引
    step:偏移量(步长语句)
    varStatus:属性值,循环中的变量状态
        遍历:
            属性值.内置属性名称:count:序号(1开始)
                             index:索引(0开始)
​
<c:forEach begin="0" end="10" var="i" step="1" varStatus="status">
            ${status.index} -  ${i} <br/>&ndash;%&gt;
            ${status.count} -  ${i} <br/>
</c:forEach>

2)高级用法

从后台获取List列表数据,通过c-forech进行遍历
​
属性:
        c:foreach
                var:循环中的变量
                items:从后台域对象中获取数据 ${绑定的属性名称}
                varStauts:循环中的变量状态
​
<%
    //创建List集合对象
    List<String> list = new ArrayList<>() ;
​
    //List<User>   username  password
​
    list.add("张三") ;
    list.add("李四") ;
    list.add("王五") ;
    //将list集合存储域对象中
    request.setAttribute("list",list);
%>
​
<c:forEach var="i" items="${list}" varStatus="status">
           ${status.count} -  ${i}<br/>
</c:forEach>

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

彦登的登

动力来源

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值