JSP概述

HTML代码与Java代码共同存在

浏览器中显示


启动Tomcat
浏览器访问:http://localhost:8083/JSPWeb_war_exploded/hello.jsp

<%--Created by IntelliJ IDEA.User: DQDate: 2021/10/20Time: 9:30To change this template use File | Settings | File Templates.
--%>
<%--JSP的指令--%>
<%--浏览器访问:http://localhost:8083/JSPWeb_war_exploded/hello.jsp--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head><title>Title</title>
</head>
<body>
<h1 style="color: red">Hello World!</h1>
</body>
</html>

JSP工作原理

jsp工作原理:web服务器(tomcat\jboss等)先把jsp文件翻译成servlet的java文件,然后编译成字节码文件,就是.class文件,当客户端访问的时候,服务器直接装载jsp对应的servlet的字节码文件。



Tomcat中存放jsp文件的位置

把jsp文件编译为class文件和java文件

JSP脚本元素

JSP脚本元素:JSP Scriptlets


JSP脚本元素:JSP声明语句

JSP脚本元素:JSP表达式

JSP注释

后端注释,前端和浏览器看不到
java,JSP,H5的注释都可以在JSP中写

<!----><%----%><%--
///****/       --%>

案例:使用JSP

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head><title>Title</title>
</head>
<body>
<%--JSP Scriptlets--%>
<%int[]a=new int[10];for(int i=0;i<10;i++) {a[i] = i;}
%><%--JSP声明语句--%>
<%! int x=9,y=10;%><%--JSP表达式--%>
x=<%=x%><br>
y=<%=y%></body>
</html>

案例:使用html的表格和JSP输出九九乘法表

代码1

<%--Created by IntelliJ IDEA.User: DQDate: 2021/10/20Time: 16:24To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head><title>Title</title>
</head>
<body>
<h1 style="color: aquamarine">九九乘法表</h1>
<%--border:表格边框;cellspacing属性:设置单元格间距--%>
<table border="1" cellpadding="10"><%for (int i = 1; i <= 9; i++) {%><tr><%for (int j = 1; j <= i; j++) {%><%--h5:table: tr行,td列--%><td><%=i%>*<%=j%>=<%=i * j%><%="\t"%></td><%}%></tr><%}%>
</table></body>
</html>

代码2

<%--Created by IntelliJ IDEA.User: DQDate: 2021/10/20Time: 16:24To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head><title>Title</title>
</head>
<body>
<h1 style="color: aquamarine" >九九乘法表</h1>
<%--border:表格边框;cellspacing属性:设置单元格间距--%>
<table border="1" cellpadding="10"><%for (int i = 1; i <= 9; i++) {%><tr><%for (int j = i; j <= 9; j++) {%><%--h5:table: tr行,td列--%><td><%=i%>*<%=j%>=<%=i * j%><%="\t"%></td><%}%></tr><%}%>
</table></body>
</html>

Html5的设置表格形式:

 <td style="border: 2px solid black;padding: 2px"><%=i%>*<%=j%>=<%=i * j%></td>

JSP指令:page指令


需要注意的是,page指令对整个页面都有效,而与其书写的位置无关(先编译指令再解析内容),但是习惯上把page指令写在JSP页面的最前面。

JSP常见page指令

其中,除了import属性外,其他的属性都只能出现一次,否则会编译失败。需要注意的是,page指令的属性名称都是区分大小写的。
language取值只有java

案例:jsp错误页面跳转

源页面

错误页面:

浏览器:

JSP指令:include指令

静态包含
静态包含:在include位置上源码直接替换,然后一起编译为.class,.java【一个class,java文件】

动态包含:先编译源码,再把页面结果返回当前页面【两个class,java文件】
–效果更快

注意事项:
包含站内资源(相对路径)
页面请求地址不会发生变化

案例:

JSP隐式对象

JSP容器自动创建的:
在JSP页面中,有一些对象需要频繁使用,如果每次都重新创建这些对象则会非常麻烦。为了简化Web应用程序的开发,JSP2.0规范中提供了9个隐式(内置)对象,它们是JSP默认创建的,可以直接在JSP页面中使用。

JSP隐式对象:out对象

在JSP页面中,经常需要向客户端发送文本内容,这时,可以使用out对象来实现。out对象是javax.servlet.jsp.JspWriter类的实例对象,out对象的类型为JspWriter,它相当于一种带缓存功能的PrintWriter。

在JSP页面中,通过out隐式对象写入数据相当于将数据插入到JspWriter对象的缓冲区中,只有调用了ServletResponse.getWriter()方法,缓冲区中的数据
才能真正写入到Servlet引擎所提供的缓冲区中。

案例:爆红不影响

<%@ page contentType="text/html;charset=UTF-8" language="java"  buffer="8kb" %>
<html>
<head><title>out对象:JSPWriter,PrintWriter</title>
</head>
<body>
<%
//内置对象JSPWriter
/*
1.buffer="8kb"或默认不写
JSPWriter的缓冲区没有满,只有调用了response.getWriter();才会写入Response缓冲区(放在原来的内容后面)
所以先输出:
PrintWriter Instance
再输出:
JSPWriter Instance2.buffer="none"
写JSPWriter没有缓冲区,直接放入Response缓冲区
所以先输出:
JSPWriter Instance
再输出:
PrintWriter Instance3.如果buffer不够大
输出的内容可能第一句话在第二句话后面*/out.print("JSPWriter Instance");
%><br>
<%//PrintWriter对象PrintWriter printWriter = response.getWriter();printWriter.print("PrintWriter Instance");
%>
<br>
</body>
</html>

JSP隐式对象:pageContext对象

1.一般不使用这个功能
使用pageContext对象可以获取JSP的其他8个隐式对象。pageContext对象是javax.servlet.jsp.PageContext类的实例对象,它代表当前JSP页面的运行环境,并提供了一系列用于获取其他隐式对象的方法。

2.存储数据的功能
划分了四个不同的存储区域,scope默认为1【ageContext.PAGE_SCOPE:表示页面范围】
findAttribute:从小到大进行查找,找到就返回结果;找不到就扩大范围继续找到,最大范围找不到就返回NULL


详情:

案例:

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head><title>pageContext</title>
</head>
<body>
<%//1 2 3pageContext.setAttribute("str1", "page1", pageContext.PAGE_SCOPE);pageContext.setAttribute("str1", "page2");//同一范围内同名的会覆盖pageContext.setAttribute("str1", "request1", pageContext.REQUEST_SCOPE);pageContext.setAttribute("str2", "request2", pageContext.REQUEST_SCOPE);request.setAttribute("str2", "request3");pageContext.setAttribute("session", "session1", pageContext.SESSION_SCOPE);session.setAttribute("session", "session2");%>
page=<br>
<%=pageContext.getAttribute("str1")%><br>
<%=pageContext.getAttribute("str1", 1)%><br>
<%--
page2
page2
--%>
request=<br>
<%=request.getAttribute("str2")%><br>
<%=pageContext.getAttribute("str1")%><br>
<%=pageContext.getAttribute("str1", 2)%><br>
<%--在page内没有找到str2--%>
<%=pageContext.getAttribute("str2")%><br>
<%=pageContext.getAttribute("str2", 2)%><br>
<%--
request3
page2
request1
null
request3
--%>
session=<br>
<%=pageContext.getAttribute("session", pageContext.SESSION_SCOPE)%><br>
<%=session.getAttribute("session")%><br>
<%--
session2
session2
--%>
</body>
</html>

JSP动作元素

JSP的七个动作元素
<jsp:forward>:请求的转发。相当于request.getRequestDispatcher(“”).foward(request,response);

<jsp:include>:动态包含。相当于request.getRequestDispatcher(“”).include(request,response);

<jsp:param>:参数传递。和jsp:forward或jsp:include配合使用用来传递参数。

<jsp:useBean>:在页面上使用JavaBean类的对象。

JavaBean的特点:
是一个public类。
所有属性都是private的,并提供共有的get、set方法。
只能有默认的无参构造。
必须定义包名。

<jsp:getProperty>:获取JavaBean中的属性值,相当于调用get方法

<jsp:setProperty>:向JavaBean的制定属性设置值,相当于调用set方法

<jsp:plugins>:在页面上引入java applet组件或javabean组件

<jsp:include>动作元素【动态包含】

动态包含:把其他的页面内容,合并到当前要包含的页面,最后一块输出。

基本语法格式:

<jsp:include page=“被包含页面的URL” flush=“true或false”></jsp:include>

动态包含的特点:多个页面的内容合并输出,多个jsp页面生成多个java文件,编译成多个class文件。

静态包含的特点:多个页面的内容合并输出,多个jsp页面生成一个java文件,编译成一个class文件。

<jsp:include>包含的原理是将被包含的页面编译处理后将结果包含在页面中。当浏览器第一次请求一个使用<jsp:include>包含其他页面的页面时,Web容器首先会编译被包含的页面,然后将编译处理后的返回结果包含在页面中,之后编译包含页面,最后将两个页面组合的结果回应给浏览器。

案例:
浏览器:
5秒之后,输出了Welcome here!!!

JspInclude1.jsp

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head><title>JspInclude1</title>
</head>
<body>
欢迎页面:<br>
<jsp:include page="jspInclude2.jsp" flush="true"/>
</body>
</html>

JspInclude2.jsp

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head><title>JspInclude2</title>
</head>
<body><%Thread.sleep(5000);
%>
welcome here!!!
</body>
</html>

<jsp:forward>动作元素

请求转发:是同一个请求
只能请求站内资源,不能请求百度等资源

请求转发地址栏不会发生改变,因为只是一次请求;而重定向地址栏会发生改变

案例:
浏览器
转到了jspForward2.jsp

jspForward1.jsp

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head><title>jsp Forword:请求转发1</title>
</head>
<body>
欢迎来到!!!<br>
<jsp:forward page="jspForward2.jsp"></jsp:forward>
</body>
</html>

jspForward2.jsp

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head><title>jsp Forword:请求转发2</title>
</head>
<body>你当前的时间:<br>
<%out.write(new Date().toString());
%>
</body>
</html>

Java web后端5 JSP技术相关推荐

  1. Java Web中的jsp技术

    在动态网页开发中,经常需要动态生成html内容,如果使用servlet来实现html页面数据的改变会导致程序十分臃肿.为了克服这些缺点,Oracle(Sun)公司推出了jsp技术. JSP全名是Jav ...

  2. java大数据开发训练营--Java Web 后端技术基础(上)

    题记: 文章内容输出来源:拉勾教育大数据开发高薪训练营 本篇文章是java学习课程中的一部分笔记. 本博文主要是记录一些基础的知识点,通过实操更容易理解 这章主要讲的是JAVA Web后端基础 一 W ...

  3. Java——Web后端学习路线

    文章目录 Java后端学习路线 第一部分: Java基础 第二部分: Java高级 第三部分: JavaWEB 第四部分: 主流框架和项目管理 第五部分: 分布式 微服务 并行架构 第六部分 : De ...

  4. JAVA WEB篇3——JSP

    JAVA WEB篇3--JSP 1.JSP是什么 JSP是Java Server Pages的简称,跟Servlet一样可以动态生成HTML响应, JSP文件命名为 xxx.jsp 与Servlet不 ...

  5. java web 服务器推送技术--comet4j

    1.背景 首先实现服务器推送技术一直一来是B/S应用开发的一块难题,因为是基于HTTP协议的,HTTP协议为无状态,单向性的协议,即,必须由客户端发起一个请求建立连接,服务器接收请求,把数据返回给客户 ...

  6. 华清远见重庆—JAVA WEB后端技术总结

    JavaWeb 网站 用户通过浏览器访问某个域名或ip后,浏览到的综合性页面. 实际是发布在服务器上的一个应用程序,通过浏览器访问. 网页 网站中的某张页面 静态页面:所有人看到的内容都一样 动态页面 ...

  7. Java Web 后端开发

    一.创建数据库表 创建数据库,然后根据需求创建数据库表. 二.创建Web项目 1.创建项目 创建maven web项目 添加java,resources文件夹 修改web.xml 的版本号 导入项目所 ...

  8. java web学习笔记-jsp篇

    转载自:http://www.cnblogs.com/happyfans/archive/2015/03/17/4343571.html 1.java web简介 1.1静态页面与动态页面   表现形 ...

  9. Java开发之掌握JSP技术

    一.Java初级开发之jsp概述 1.关于jsp JavaServer Pages简称jsp,从"server"这个词可以看出,这其实也是一门java服务端技术,其实可以简单的把j ...

最新文章

  1. 更改 pandas dataframe 中两列的位置
  2. VM虚拟机中Linux扩展磁盘空间的方法
  3. 常见Java开发过程中遇到的问题及其解决办法
  4. 【干货】10000个抖音短视频红人通讯录.pdf(附下载链接)
  5. 项目Alpha冲刺(10/10)
  6. Pytorch squeeze() 和 unsqueeze() 方法区别
  7. 一些and知识 和ui
  8. 打分框手工输入分值的技术要领
  9. cmake install_CMAKE入门实战
  10. 果园机器人作文开头_果园机器人作文
  11. 国标GB28181协议视频平台EasyGBS国标级联到上级宇视平台,不断切换在线和离线状态是什么原因?
  12. 笔记本计算机(Legion)快捷键(加快编辑速度)
  13. Ansys workbench静应力分析基本流程
  14. Linux 上使用 Gmail SMTP 服务器发送邮件通知
  15. Cond:条件变量源码解读
  16. 照片生成3D虚拟数字人,虚拟形象主播搭建(软件+教程)
  17. extension(类扩展)和 category(类别)
  18. 指爱打字群添雨跟打器使用教程(指爱群新手教程)-by指爱群友
  19. 2020年总结:平安辞旧岁,老牛自奋蹄!
  20. Python文件处理os模块介绍 -*- Python基础知识12 -*-

热门文章

  1. Web——Request请求
  2. 深度学习 用户画像_一文告诉你什么是用户画像
  3. 【转】重新打包DebianISO实现无人应答安装(UEFI+BIOS)
  4. 一步步编写操作系统 11 实模式下程序分段的原因
  5. php中设置文件权限的写法,php图片上传,如何设置文件权限
  6. 【51Nod - 1106 】质数检测 (水题,数论)
  7. 【qduoj - 夏季学期创新题】最长公共子串(水题暴力枚举,不是LCS啊)
  8. 【CodeForces - 144D】Missile Silos(单源最短路,枚举中间边,枚举情况可能性)
  9. *【HDU - 1242 】 Rescue (反向dfs,或bfs)
  10. 【HDU - 3499】 Flight (单源最短路+优惠问题)