第6章 深入JSP技术

6.1 JSP简介

什么是JSP:
JSP全名为Java Server Page 是为了简化servlet的工作而出现的替代品。
在JSP中java代码与HTML共同存在,其中HTML代码用于展示静态的内容,java代码用来展示动态的内容。
为什么出现JSP技术:
1997年Java Web中只有servlet,生成html技术也需要在servlet中完成,虽然servlet也可以完成所有输出工作,但是使用过程比较麻烦,部署也比较复杂,为了克服这些缺点,1999年SUN公司推出了JSP技术,该技术在生成HTML代码的时候相比servlet方便了许多。
对于servlet和JSP技术的理解:
servlet:在java代码中嵌入html代码,更擅长编写java业务代码JSP,在html中嵌入java代码,更擅长页面展示。

package net_zixue.JSP;

import javax.servlet.*;
import javax.servlet.http.*;
import javax.servlet.annotation.*;
import java.io.IOException;
import java.io.PrintWriter;

@WebServlet(name = "HTMLServlet",urlPatterns = "/html")
public class HTMLServlet extends HttpServlet {
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

    }

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        response.setContentType("text/html; charset=utf-8");
        PrintWriter writer = response.getWriter();
        writer.write("<!DOCTYPE html>");
        writer.write("<html lang=\"en\">");
        writer.write("<head>");
        writer.write("<meta charset=\"UTF-8\">");
        writer.write("<title>home</title>");
        writer.write("</head>");
        writer.write("<body>");
        writer.write("<h2>我是网站的首页,欢迎访问</h2>");
        writer.write("</body>");
        writer.write("</html>");



    }
}

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>home</title>
</head>
<body>
<h2>我是网站的首页,欢迎访问</h2>
</body>
</html>

6.2 JSP运行原理

JSP的运行原理:
jsp在第一次被访问时会被Web容器翻译成servlet,即jsp本质上就是Servlet。
过程:
第一次访问----->helloServlet.jsp------>helloServlet_jsp.java------->编译运行
被翻译后的servlet在Tomcat的work目录中可以找到,使用IDEA会单独为项目维护一个目录。
通过观察发现jsp会转化为java文件,并且间接的继承了HttpServlet,实现了其中的主要方法,init、service、destory,并且将html代码通过java方式输出给浏览器。

<%@ page import="java.util.HashMap" %>
<%@ page import="java.util.Map" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" isErrorPage="true" %>
<%@include file="/include.jsp" %>
<%@taglib uri="xxx" prefix="c"%>
<%@taglib uri="xxx" prefix="a"%>
<html>
<head>
    <title>Title</title>
</head>
<body>
<h2>hello jsp</h2>
<jsp:include page="include1.jsp"></jsp:include>
<%
//    Map map = new HashMap<>();
//
//    response.getHeaders();
//    request.getAttribute();
//    session.setAttribute();
    //java单行注释
    /*
    java多行注释
    */
    String str = "hello jsp";
    int i=0;
    i++;
%>

<%-- jsp注释 --%>

<%="变量i="+i
%>

<%!
    int x = 0;
%>
</body>
</html>

6.3 JSP脚本与注释

JSP脚本:

  1. <%java代码%>
  2. <%=java变量或表达式%>
  3. <%!java代码%>

JSP注释:

  1. Html注释:<!--注释内容-->
  2. java注释://单行注释 /*多行注释*/
  3. jsp注释:<%--注释内容--%>
<%@ page import="java.util.HashMap" %>
<%@ page import="java.util.Map" %>
<%--
  Created by IntelliJ IDEA.
  User: 随身汀
  Date: 2021/4/14
  Time: 19:22
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" isErrorPage="true" %>
<%@include file="/include.jsp" %>
<%@taglib uri="xxx" prefix="c"%>
<%@taglib uri="xxx" prefix="a"%>
<html>
<head>
    <title>Title</title>
</head>
<body>
<h2>hello jsp</h2>
<jsp:include page="include1.jsp"></jsp:include>
<%
//    Map map = new HashMap<>();
//
//    response.getHeaders();
//    request.getAttribute();
//    session.setAttribute();
    //java单行注释
    /*
    java多行注释
    */
    String str = "hello jsp";
    int i=0;
    i++;
%>

<%-- jsp注释 --%>

<%="变量i="+i
%>

<%!
    int x = 0;
%>
</body>
</html>

JSP脚本

  1. <%java代码%>-----内部的java代码翻译到service方法的内部
  2. <%=java变量或表达式%>-----会被翻译成service方法内部的out.print()
  3. <%!java代码%>------会被翻译成service的成员的内容

6-4 JSP指令

jsp指令(3个):
jsp的指令是指导jsp翻译和运行的命令,jsp包括三大指令:
page指令-----属性最多的指令(实际开发中page指令默认),属性最多的一个指令,根据不同的属性,指导整个页面特性格式:<%@ page 属性名1=“属性值1” 属性名2=“属性值2”…%>
常用属性如下:
language:jsp脚本可以嵌入的语言种类
contentType:response.setContentType(text/html.charset=UTF-8)
session:是否jsp在翻译时自动创建session
import:导入java的包
errorPage:当当前页面出错后跳转到哪个页面
include指令
页面包括(静态包含)指令,可以将一个jsp页面包含到另一个jsp页面中
格式:<%@ include file=“被包含的文件地址”%>
taglib指令
在jsp页面中引入标签库(jstl标签库,structs2标签库)
格式:<%@ taglb url=“标签库地址” prefix=""%>

<%@include file="/include.jsp" %>
<%@taglib uri="xxx" prefix="c"%>

6-5 JSP隐式对象概述
什么是JSP隐式对象:
当jsp被翻译成servlet的时候,service方法内部由九个对象定义并初始化,这九个对象被称为隐式对象
在这里插入图片描述

在这里插入图片描述
out


<%@ page contentType="text/html;charset=UTF-8" language="java" buffer="0kb" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
1111111111
<%
    response.getWriter().write("2222222");
    out.write("333333333333");
%>
<%="44444444444"
%>
</body>
</html>

在这里插入图片描述

6-7 JSP九大隐式对象-pageContext

pageContext对象:
pageContext对象就是jsp页面的上下文对象
pageContext是一个域对象:

  • setAttribute(String name,Object obj)
  • getAttribute(String name)
  • removeAttribute(String name)

pageContext可以向指定的其他域中存取数据:

  • setAttribute(String name,Object obj,int scape)
  • getAttribute(String name,int scape)
  • removeAttribute(String name,int scape)
  • findAttribute(String name)//获取顺序依次从pageContext域,request域,session域,application域中获取属性
    可以获得其他8大隐式对象:
    例如:pageContext.getRequest()
    pageContext.getSession()
<%--
  Created by IntelliJ IDEA.
  User: 随身汀
  Date: 2021/4/14
  Time: 20:32
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java"  %>
<html>
<head>
    <title>Title</title>
</head>
<body>
<%
    //    pageContext.setAttribute("name","xiaoming");

//    pageContext.setAttribute("name","zhangsan",PageContext.REQUEST_SCOPE);
    pageContext.setAttribute("name","lisi",PageContext.SESSION_SCOPE);
    pageContext.setAttribute("name","wangwu",PageContext.APPLICATION_SCOPE);
%>
<%=pageContext.getAttribute("name",PageContext.REQUEST_SCOPE)%>
<%=pageContext.getAttribute("name",PageContext.APPLICATION_SCOPE)%>

<%=
pageContext.findAttribute("name")
%>

</body>
</html>

四大作用域的区别:
page域:当前jsp页面范围
request域:一次请求
session域:一次会话
application域:整个web应用

6-8 JSP标签

什么是JSP标签:
JSP标签用来控制JSP的行为,执行一些常用的JSP页面动作,通过标签可以实现很多行java代码才能够实现的功能,比如请求转发的功能。
常用的JSP标签:

  • 页面包含(动态包含):<jsp:include page=“被包含的页面”/>
  • 请求转发:<jsp:forward page=“要转发的资源”>
    JSP指令:
    import:导入java的包
    errorPage:当当前页面出错后跳转到哪个页面
    include指令
    页面包括(静态包含)指令,可以将一个jsp页面包含到另一个jsp页面中
    格式:<%@ include file=“被包含的文件地址”%>
    taglib指令
    在jsp页面中引入标签库(jstl标签库,structs2标签库)
    格式:<%@ taglb url=“标签库地址” prefix=""%>
    在这里插入图片描述


<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
<jsp:forward page="hello.jsp"></jsp:forward>
</body>
</html>

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值