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编译运行--->返回给用户看.

Java篇-JSP_第1张图片
运行原理

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


Java篇-JSP_第2张图片
生成文件路径

三 : 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.*" %>





设置session


    
    
    <%= 5+5 
    
    %>
    
    <%! 
        int a = 10;
    
    %>
    
    <%
        User user = new User();
        user.setId(100);
        user.setUsername("雪芙");
        user.setPassword("123");
        session.setAttribute("user", user);
    %>


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


Java篇-JSP_第3张图片
成员变量
Java篇-JSP_第4张图片
out.print
Java篇-JSP_第5张图片
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标签动作

  • 请求转发

    
  • 动态包含

    

七 : out缓冲区与response缓冲区

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




out顺序



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



显示顺序 :

Java篇-JSP_第6张图片
显示顺序

解析 :

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


Java篇-JSP_第7张图片
未命名文件.png

八 : 静态与动态包含

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

Java篇-JSP_第8张图片
图解

九 : 四大作用域范围

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

你可能感兴趣的:(Java篇-JSP)