Java篇-JSP

一 : JSP简介

JSP-> Java Server Page ,是建立在Servlet规范上的动态网页开发技术,在JSP文件中,HTML代码与Java代码共同存在,其中HTML代码用来显示网页中静态内容的显示,Java代码用来实现网页中动态内容的显示. 为了与传统HTML有所区别,JSP扩展名为.jsp

二 : JSP特性

  • 跨平台 : 由于JSP是java语言编写的,可以使用Java API,所以是跨平台的,可以应用于不同的系统中,如Windows,Linux,MacOS等,从一个平台移植到另一个平台时,JSPJavaBean的代码并不需要重写编译,因为java字节码与平台无关,一次编译,到处运行.

  • 业务代码相分离 : 在使用JSP技术开发WEB应用时,可以将界面的开发与应用程序的开发分离开.开发人员使用HTML来设计界面,使用JSP标签和脚本来动态生成页面上的内容.在服务器端,JSP引擎(Tomcat)负责解析JSP标签和脚本程序,生成所请求的内容,并将执行结果以HTML页面的形式返回到浏览器.

  • 组件重用 : JSP可以使用JavaBean编写业务组件,也就是使用一个JavaBean类封装业务处理代码或者作为一个数据存储模型,在JSP页面中,甚至整个项目中,都可以重复使用这个JavaBean,同时JavaBean也可以应用到其他的Java应用程序中

  • 预编译 : 预编译就是在用户第一次通过浏览器访问JSP页面时,服务器将对JSP页面代码进行编译,并且仅执行一次编译.编译好的代码将被保存,用户下一次访问时,会直接执行编译好的代码.节省了服务器的CPU资源,提升了客户端的访问速度.

二 : JSP原理

JSP本质就是一个Servlet,JSP的工作模式是请求/响应模式
用户在第一次访问的时候--->xxx.jsp--->xxx_jsp.java编译运行--->返回给用户看.

运行原理

xxx.jsp文件被转换/翻译文件在 tomcat->work->Catalina->localhost->web项目->org->apache->jsp下


生成文件路径

三 : JSP脚本与注释可见级别

通过上述原理可知.jsp最终会被翻译成.java的sevlet,所以我们写的脚本也最终会被翻译,接下来分析一下,具体会会被怎样的翻译

1. jsp脚本 :

  • <%java代码%> : 内部的java代码翻译到service方法的内部

  • <%=java变量或者表达式> : 会被翻译成service方法内部out.print()

  • <%!java代码%> : 会被翻译成servlet的成员的内容

测试与证明 :

在.jsp中写下如下代码

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
 
<%@ page import="domain.*" %>

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>设置session</title>
</head>
<body>
    
    
    <%= 5+5 
    
    %>
    
    <%! 
        int a = 10;
    
    %>
    
    <%
        User user = new User();
        user.setId(100);
        user.setUsername("雪芙");
        user.setPassword("123");
        session.setAttribute("user", user);
    %>
</body>
</html>

然后我们去对应生成的.java文件中去找一下


成员变量
out.print
service内部

2. jsp注释可见级别

  • HTML注释 : < !--注释内容-->可见范围jsp源码,翻译后的servlet,页面显示html源码

  • java注释 : //单行注释, /多行注释/ -- 可见范围jsp源码,翻译后的servlet

  • jsp注释 : <%--注释内容--%>---可见范围jsp源码可见

四 : jsp指令

jsp的指令是指导jsp翻译和运行的命令

  • page指令 :

属性最多的指令 (实际开发中page指令默认)
根据不同的属性,指导整个页面特性.
格式 :<%@ page 属性名1 = "属性值1" 属性名2 = "属性名2"...%>
language --- jsp脚本中可以嵌入的语言种类(事实证明sun公司想多啦,没人用,所以只有java一种😄)
pageEncoding ---当前jsp文件本身编码,内部可以包含contentType
contentType ---response.setContentType(text/html;charset=UTF-8)同理
session ---是否jsp在翻译时自动创建session
import ---导入java的包
errorPage---当前页面出错后跳转到哪个页面
isErrorPage---当前页面是一个处理错误的页面

  • include指令 :

页面包含(静态包含)指令, 可以将一个jsp页面包含到另一个jsp页面中
格式 : <%@ include file = "被包含的文件地址"%>

  • taglib指令

在jsp页面中引入标签库(jstl标签库,struts2标签库)
格式 : <%@ taglib uri="标签地址" prefix="前缀"%>

五 : JSP内置对象

jsp被翻译成servlet之后, service方法中有9个对象定义,并初始化完毕,我们在jsp脚本中可以直接使用这9个对象

名称 类型 描述
out javax.servlet.jsp.JspWriter 用于页面输出
request javax.servlet.http.HttpServletRequest 得到用户请求信息
response javax.servlet.http.HttpServletResponse 服务器向客户端的回应信息
config javax.servlet.ServletConfig 服务器配置,可以取得初始化参数
application javax.servlet.ServletContext 所有用户的共享信息
page java.lang.Object 指当前页面转换后的Servlet类的实例
pageContext javax.servlet.jsp.PageContext JSP的页面容器
exception java.lang.Throwable 表示JSP页面所发生的异常,在错误页中才起作用

out对象 :
就是向客户端输出内容,out.write("dfdf")
out缓冲区默认8kb,可以设置成0代表关闭out缓冲区,内容直接写到response缓冲区

pageContext对象
jsp页面的上下文对象,page对象与pageContext对象不是一个东西.
pageContext是一个域对象

setAttribute(String name,Object obj)
getAttribute(String name)
removeAttrbute(String name)

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

        pageContext.setAttribute("name", "lisi", PageContext.REQUEST_SCOPE);
        pageContext.setAttribute("name", "wangwu", PageContext.SESSION_SCOPE);
        pageContext.setAttribute("name", "王八", PageContext.APPLICATION_SCOPE);

findAttribute(String name)
依次从pageContext域,request域,session域,application域中获​取属性,在某个域中获取后将不在向后寻找

pageContext可以获得其他8大隐式对象

pageContext.getRequest()
pageContext.getSession()

六 : jsp标签动作

  • 请求转发

<jsp:forward page="要转发的资源" />

    <jsp:forward page="/forward2.jsp"></jsp:forward>
  • 动态包含

    <jsp:include page="/include2.jsp"></jsp:include>

七 : out缓冲区与response缓冲区

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>out顺序</title>
</head>
<body>

    雪芙雪芙雪芙
    <%
        out.write("思思思思思思思思思思");
        response.getWriter().write("美美美美美美美美");
    %>
    <%="可可可可可可可可可可可可可可" %>

</body>
</html>

显示顺序 :

显示顺序

解析 :

Tomcat从response中读出数据,OUT缓冲区的数据最后也要放在response缓冲区,设置0代表关闭out缓冲区,内容直接写到response缓冲区


未命名文件.png

八 : 静态与动态包含

静态包含 : 当前页面和被包含页面合并后产生一个servlet源码
动态包含: 当前页面和被包含页面,分别产生servlet源码和字节码,运行时,tomcat进行合并输出

图解

九 : 四大作用域范围

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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 160,108评论 4 364
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,699评论 1 296
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 109,812评论 0 244
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 44,236评论 0 213
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,583评论 3 288
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,739评论 1 222
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,957评论 2 315
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,704评论 0 204
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,447评论 1 246
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,643评论 2 249
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,133评论 1 261
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,486评论 3 256
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,151评论 3 238
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,108评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,889评论 0 197
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,782评论 2 277
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,681评论 2 272

推荐阅读更多精彩内容

  • 1.学习内容 JSP技术入门和常用指令 JSP的内置对象&标签介绍 EL表达式&EL的内置对象 2.JSP技术入门...
    WendyVIV阅读 2,036评论 1 18
  • JSP总结(经典) day1 JSP 定义: 1)Java Server Page, Java EE 组件,本...
    java日记阅读 3,310评论 0 13
  • 1.什么是JSP (1)jsp全称是Java Server Pages,它和Servlet技术一样都是sun公司定...
    yjaal阅读 3,577评论 5 99
  • 1. Java基础部分 基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语...
    子非鱼_t_阅读 31,296评论 18 399
  • 不知不觉中,大学已经过去了一半。我总是常常再想,这两年究竟我学到了什么,仔细想想,好像什么都没有。和好友聊天,好友...
    球球爱猫猫阅读 402评论 0 0