700字范文,内容丰富有趣,生活中的好帮手!
700字范文 > javaweb基础:JSP第一篇 -----简单聊jsp是什么 其指令以及脚本使用

javaweb基础:JSP第一篇 -----简单聊jsp是什么 其指令以及脚本使用

时间:2019-05-01 16:13:04

相关推荐

javaweb基础:JSP第一篇 -----简单聊jsp是什么 其指令以及脚本使用

简介

JSP(全称JavaServer Pages)是由Sun Microsystems公司主导创建的一种动态网页技术标准。JSP部署于网络服务器上,可以响应客户端发送的请求,并根据请求内容动态地生成HTML、XML或其他格式文档的Web网页,然后返回给请求者。JSP技术以Java语言作为脚本语言,为用户的HTTP请求提供服务,并能与服务器上的其它Java程序共同处理复杂的业务需求。

**JSP将Java代码和特定变动内容嵌入到静态的页面中,实现以静态页面为模板,动态生成其中的部分内容。**JSP引入了被称为“JSP动作”的XML标签,用来调用内建功能。另外,可以创建JSP标签库,然后像使用标准HTML或XML标签一样使用它们。标签库能增强功能和服务器性能,而且不受跨平台问题的限制。JSP文件在运行时会被其编译器转换成更原始的Servlet代码。JSP编译器可以把JSP文件编译成用Java代码写的Servlet,然后再由Java编译器来编译成能快速执行的二进制机器码,也可以直接编译成二进制码。

上面的简单一句话:JSP主要作用就是代替Servlet回传的html数据,而且其为什么说是动态呢?因为可以根据回传的数据不同而呈现的页面不同。

jsp本质

其实前面演示的时候,会发现创建一个jsp文件的有点像是html文件,但是两者又不是不同的东西,现在创建一个JSP文件,然后看一下其编译后具体时神秘的东西。

还是老规矩在web文件夹下创建一个test.jsp文件。

然后访问链接:

因为是通过IDE进行编译的,所以其路径位置如下:

C:\Users\自己电脑用户名\AppData\Local\JetBrains\IntelliJIdea.1\tomcat\这里默认把项目生成一个uuid,可以看一下编译的事件\work\Catalina\localhost\自己的项目名\org\apache\jsp

可以看出编译的时候,是生成java然后再编程称calss文件。

首先看java文件名字可以看出:

test.jsp ---->test_jsp.java

源码不让图片方便看,所以直接用图吧:

其实可以看出其通过response调用的write方法,然后生成的一个html。

其实本质上一个JSP是通过servlet生成的,如果有这个判断呢,并不是因为方法种也有response调用witer方法,而是如下判断:

public final class test_jsp extends org.apache.jasper.runtime.HttpJspBaseimplements org.apache.jasper.runtime.JspSourceDependent,org.apache.jasper.runtime.JspSourceImports

然后看一下HttpJspBase是什么?

GenericServlet熟悉了吗,我们创建的servlet查看其继承关系的话也可以找到这个类。

所以才说jsp本质是一个servlet,这样其response调用writer是否就理解的通顺了。

以下是JSP生命周期中所走过的几个阶段:

编译阶段:

servlet容器编译servlet源文件,生成servlet类

初始化阶段:

加载与JSP对应的servlet类,创建其实例,并调用它的初始化方法

执行阶段:

调用与JSP对应的servlet实例的服务方法

销毁阶段:

调用与JSP对应的servlet实例的销毁方法,然后销毁servlet实例

jsp中指令

指令可以有很多个属性,它们以键值对的形式存在,并用逗号隔开。

JSP中的三种指令标签:

page 指令

创建一个jsp文件的时候,会发现其头部有一行:

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

但是page中的指令的属性不只是这写还有其它:

下表列出与Page指令相关的属性:

简单的演示几个

errorPage 和 isErrorPage

<%-- 这个是一个错误页面,让其它页面返回错误的时候到这个页面 文件为 err.jsp --%><%@ page contentType="text/html;charset=UTF-8" isErrorPage="true" language="java" %><html><head><title>err</title></head><body>不好意思,页面出现问题,程序员处理这个问题</body></html><%-- 这是一个会报错的页面 --%> <%@ page contentType="text/html;charset=UTF-8" errorPage="err.jsp" language="java" %><html><head><title>test</title></head><body><% int a=1/0;%></body></html>

可以看出这个页面有点像是try-catch 感觉,出错了然后就调转一个处理界面。

autoFlush 和 buffer

其实这个默认是打开的,如果不打开的话会报错:

<%@ page contentType="text/html;charset=UTF-8" autoFlush="false" buffer="1kb" language="java" %><html><head><title>test</title></head><body><h1>骨灰,宫崎老贼的仁慈</h1><h1>罪域的骨终称王---安兹大人</h1><h1>你惹那个光头干嘛,他可是弑神的男人啊。--奎爷</h1><h1>骨灰,宫崎老贼的仁慈</h1><h1>罪域的骨终称王---安兹大人</h1><h1>你惹那个光头干嘛,他可是弑神的男人啊。--奎爷</h1><h1>骨灰,宫崎老贼的仁慈</h1><h1>罪域的骨终称王---安兹大人</h1><h1>你惹那个光头干嘛,他可是弑神的男人啊。--奎爷</h1><h1>骨灰,宫崎老贼的仁慈</h1><h1>罪域的骨终称王---安兹大人</h1><h1>你惹那个光头干嘛,他可是弑神的男人啊。--奎爷</h1>这个地方一定要足够多,不然无法体现这错误</body></html>

所以最好让其缓存器自动刷新,这样不会出现缓存区的数据过大的问题。

Include指令

JSP可以通过include指令来包含其他文件。被包含的文件可以是JSP文件、HTML文件或文本文件。包含的文件就好像是该JSP文件的一部分,会被同时编译执行。

Include指令的语法格式如下:

<%@ include file="文件相对 url 地址" %>

include指令中的文件名实际上是一个相对的 URL 地址。

如果您没有给文件关联一个路径,JSP编译器默认在当前路径下寻找。

这个其实就是将jsp拆分了几个部分,有点像是html中框架集<frameset>标签。

现在演示其中两个界面

<%@ page contentType="text/html;charset=UTF-8" language="java" %><html><head><title>test</title></head><body><h1>骨灰,宫崎老贼的仁慈</h1><h1>罪域的骨终称王---安兹大人</h1><%@include file="foot.jsp" %></body></html>

foot.jsp

<%@ page contentType="text/html;charset=UTF-8" language="java" %><html><head><title>底部</title></head><body>这个是一个foot页面的内容,与游戏无关,但是商业合作发邮寄#####.@</body></html>

Taglib指令

JSP API允许用户自定义标签,一个自定义标签库就是自定义标签的集合。

Taglib指令引入一个自定义标签集合的定义,包括库路径、自定义标签。

Taglib指令的语法:

<%@ taglib uri="uri" prefix="prefixOfTag" %>

uri属性确定标签库的位置,prefix属性指定标签库的前缀。

这个就不再具体演示了等聊jsp标签库的时候,会使用它

脚本格式

脚本程序可以包含任意量的Java语句、变量、方法或表达式,只要它们在脚本语言中是有效的。

注释

当然如果是文本还有html标签,jsp元素必须写在脚本的程序外面。

再jsp中的注释:

<%-- 这个是注释 --%>

当然也可以使用html的注释:

<!-- 当然也可以使用html的注释 -->

声明脚本

声明脚本的格式如下:

<%! 声明 %>

具体演示:

<%@ page import="java.util.Map" %><%@ page import="java.util.HashMap" %><%@ page contentType="text/html;charset=UTF-8" language="java" %><html><head><title>test</title></head><body><%-- 声明变量--%><%!private int a;public String b;%><%--声明静态代码块--%><%!static {Map map=new HashMap();}%><%--声明方法--%><%!public void test(){System.out.println("test");}%></body></html>

然后看一下再编程称java文件中变为什么

可以看见这个生成的java文件中可以看出,其属于类中的属性和方法。

表达式脚本

说白可以通过通过jsp的脚本将值输入到页面。

格式:

<%= 表达式 %>

现在演示:

<%@ page import="java.util.Map" %><%@ page import="java.util.HashMap" %> <%@ page contentType="text/html;charset=UTF-8" language="java" %><html><head><title>test</title></head><body><%-- 声明变量--%><%!private int a=12;private static Map map;%><%--声明静态代码块--%><%!static {map=new HashMap();map.put("name","张三");map.put("age","18");}%><%--声明方法--%><%!public String test(){return "test 方法";}%><%--輸出的演示--%><%=1%><br/><%=a%><br/><%="我是一個字符串"%><br/><%=map%><br/><%=test()%><br/></body></html>

现在看一下页面:

然后看一下编译后的java文件

可以看出**<%= 表达式 %>翻译为在生成servlet方法_jspService** 中的out.print()

代码脚本

这个写Java代码,格式如下:

<% Java代码 %>

演示:

<%@ page import="java.util.Map" %><%@ page import="java.util.HashMap" %><%@ page contentType="text/html;charset=UTF-8" language="java" %><html><head><title>test</title></head><body><%-- 声明变量--%><%!private int a=12;private static Map map;%><%if(a==1){System.out.println("aaaaaaaa");}else {System.out.println("bbbbbb");}%></body></html>

这个主要看编译后的java文件。

注意:这个<% %> 在生成的Java中的位置,其和<%! %>是不一样的,下面说两者的区别。

补充 <% %> 和<%! %> 区别

两者的不同在三个部分:翻译不同、定义不同、声明不同。

翻译不同

**<%%> 的内容会翻译在Servlet的Service方法中。**简单的说就是局部。

**<%!%>的内容会直接翻译在Servlet类中。**这个是全局。

定义不同

<%%> 定义局部变量或者调用方法,但不能定义方法。<%!%>不可以定义局部变量和方法。

声明不同

<%%>不可以声明方法、属性、全局变量。<%!%> 可以声明方法、属性、全局变量。

简单的一句话就是 <% %> 当作Service方法内部可以实现的Java代码来要求,而 <%!%> 是整个类实现Java代码来要求。

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。