Java 杂谈Java服务器端编程

Java篇-JSP

2018-10-02  本文已影响6人  TianTianBaby223

一 : JSP简介

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

二 : JSP特性

二 : 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脚本 :

测试与证明 :

在.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注释可见级别

四 : jsp指令

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

属性最多的指令 (实际开发中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---当前页面是一个处理错误的页面

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

在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应用

上一篇 下一篇

猜你喜欢

热点阅读