JavaWeb开发(九)JSP技术

1. JavaWeb JSP技术

1.1. JSP简介

1.1.1. 什么是JSP

JSP全名为Java Server Page 是为了简化servlet的工作而出现的替代品。在JSP中java代码与HTML共同存在,其中HTML代码用于展示静态的内容,java代码用来展示动态的内容。

1.1.2. 为什么出现JSP技术

1997年Java Web中只有servlet,生成html技术也需要在servlet中完成,虽然servlet也可以完成所有的输出工作,但是使用过程比较麻烦,部署也比较复杂。为了克服这些缺点1999年SUN公司推出了JSP技术。该技术在生成HTML代码的时候相比servlet方便了许多。

1.1.2. 对于servlet和JSP技术的理解:

servlet:在java代码中嵌入html代码,更擅长编写java业务代码JSP:在html中嵌入java代码,更擅长页面展示。

1.2. jsp运行原理

jsp在第一次被访问时会被Web容器翻译成servlet,即jsp本质上就是Servlet过程。

第一次访间---->helloservlet.jsp----helloservlet_jsp.java---->编译运行被翻译后的servlet在Tomcat的work目录中可以找到,使用IDEA会单独为项目维护一个目录。

通过观察发现jsp会转化为java文件,并且间接的继承了HttpServlet,实现了其中的主要方法,init、service、 destory,并且将html代码通过java方式输出给浏览器。

1.3. JSP脚本和注释

1.3.1. JSP脚本

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

1.3.2. JSP注释

复制代码
1. Html注释:<!--注释内容--> ---可见范围jsp源码、翻译后的servlet、页面显示html源码
2. 2.java注释://单行注释 /*多行注释*/  --可见范围jsp源码 翻译后的servlet
3. 3.jsp注释:<%--注释内容--%> -----ī可见范围 jsp源码可见


1.4. jsp指令(3个)

jsp的指令是指导jsp翻译和运行的命令,jsp包括三大指令:

1.4.1. page指令

属性最多的指令(实际开发中page指令默认)属性最多的一个指令,根据不同的属性,指导整个页面特性。

格式:

javascript 复制代码
<%@ page 属性名1="属性值1" 属性名2="属性值2" ...%>

常用属性如下:

(1)language:jsp脚本中可以嵌入的语言种类;

(2)contentType:response.setContentType(text/html;charset=UTF-8);

(3)session:是否jsp在翻译时自动创建sessionimport:导入java的包;

(4)errorPage:当当前页面出错后跳转到哪个页面。

javascript 复制代码
<%@ page import="com.zzs.session.SessionServlet " %>
<%@ 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" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
<h2>hello jsp</h2>
<!-- html注释 -->
<jsp:include page="/include1.jsp"></jsp:include>
<%
    //java单行注释
    /*
    java多行注释
     */
    String str = "hello jsp";
    int i = 0;
    i++;
%>
<%-- jsp注释 --%>
<%="变量i=" + i%>
<%!int x = 0;%>
</body>
</html>

1.4.2. include指令

页面包含(静态包含)指令,可以将一个jsp页面包含到另一个jsp五面中格式:

javascript 复制代码
<%@ include file="被包含的文件地址"%>
javascript 复制代码
<jsp:include page="/include1.jsp"></jsp:include>

1.4.3. taglib指令

在jsp页面中引入标签库(jst1标签库、struts2标签库)格式:

javascript 复制代码
<%@ taglib uri="标签库地址"prefix="前缀"%>
javascript 复制代码
<%@taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>

1.5. JSP隐式对象概述

1.5.1. 什么是JSP隐式对象

当jsp被翻译成servlet的时候,service方法内部有九个对象定义并初始化,这九个对象被称为隐式对象。

1.5.2. 九大隐式对象


1.5.3. 九大隐式对象-out对象

1.5.4. JSP九大隐式对象-epageContext对象

pageContext对象就是jsp页面的上下文对象

(1)pageContext是一个域对象

setAttribute(String name, Object obj)

getAttribute(String name)

removeAttrbute(String name)

(2)pageContext可以向指定的其他域中存取数据

setAttribute(String name,Object obj,int scope)

getAttribute(String name,int   scope)

removeAttrbute(String name,int scope)

findAttribute(String name)//获取顺序依次从pageContext域,request域

javascript 复制代码
<%@ 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>

1.5.5. JSP标签

(1)页面包含(动态包含):

javascript 复制代码
<jsp:include page="被包含的页面"/>

(2)请求转发:

javascript 复制代码
<jsp:forward page="要转发的资源"/>
相关推荐
橘颂TA3 小时前
线程池与线程安全:后端开发的 “性能 + 安全” 双维实践
java·开发语言·安全
bruce_哈哈哈3 小时前
go语言初认识
开发语言·后端·golang
色空大师3 小时前
服务打包包名设置
java·elasticsearch·maven·打包
xiaoyustudiowww3 小时前
fetch异步简单版本(Tomcat 9)
java·前端·tomcat
十五年专注C++开发3 小时前
VS2019编译的C++程序,在win10正常运行,在win7上Debug正常运行,Release运行报错0xC0000005,进不了main函数
开发语言·c++·报错c0x0000005
一条咸鱼_SaltyFish3 小时前
[Day13] 微服务架构下的共享基础库设计:contract-common 模块实践
开发语言·人工智能·微服务·云原生·架构·ai编程
隐退山林3 小时前
JavaEE:多线程初阶(一)
java·开发语言·jvm
C_心欲无痕3 小时前
ts - 模板字面量类型与 `keyof` 的魔法组合:`keyof T & `on${string}`使用
linux·运维·开发语言·前端·ubuntu·typescript
最贪吃的虎3 小时前
Redis其实并不是线程安全的
java·开发语言·数据库·redis·后端·缓存·lua