【JavaWeb】JSP技术

JSP简介

JSP本质是一个servlet,它是简化Servlet编写的一种技术,它将Java代码和HTML语句混合在同一个文件中编写,只对网页中要动态产生的内容采用Java代码来编写,而对固定不变的静态内容采用普通静态HTML页面的方式编写。

运行原理和九大隐式对象

jsp运行主要是由tomcat服务器完成(tomcat的work目录下存放jsp运行时的临时文件)。

(1)每个JSP在第一次被访问时,JSP引擎将它翻译成一个_jspServlet(实质上也是一个servlet);
(2)接着再把servlet源程序翻译成servlet的class类文件;
(3)然后由web容器(Servlet引擎)像调用普通Servlet一样来装载和解释执行这个由JSP页面翻译成的Servlet程序。

注意:

  • 由于JSP第一次访问时会翻译成servlet,所以第一次访问通常会比较慢,但第二次访问,JSP引擎如果发现JSP没有变化,就不再翻译,而是直接调用,所以程序的执行效率不会受到影响。
  • JSP引擎在调用JSP对应的_jspServlet时,会传递或创建9个与web开发相关的对象供_jspServlet使用。JSP技术的设计者为便于开发人员在编写JSP页面时获得
    这些web对象的引用,特意定义了9个相应的变量,开发人员在JSP页面中通过这些变量就可以快速获得这9大对象的引用。

九大隐式对象及其对应关系:
request —> HttpServletRequest
response —> HttpServletResponse
session —> HttpSession
application —> servletContext
config —> servletConfig
out JspWriter —–> PrintWriter
exception
page this
pageContext

简单示例

工程目录:
这里写图片描述

JSP代码:

<%@page import="java.text.SimpleDateFormat"%>
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <base href="<%=basePath%>">

    <title>这是我的第一个JSP页面</title>

  </head>

  <body>
    <%
        /*
         * 对网页中要动态产生的内容采用Java代码来编写
         */
        //获取当前时间
        SimpleDateFormat sdf = new SimpleDateFormat();
        String currDate = sdf.format(new Date());
        //输出内容到浏览器
        out.write("当前的时间为:" + currDate);
     %>
  </body>
</html>

打开浏览器输入URL(http://localhost:8080/JSPstudy/hello.jsp)后,浏览器动态地显示当前时间:
这里写图片描述

JSP语法

jsp脚本

1)jsp脚本表达式:<%=变量或表达式%> 向浏览器输出变量或表达式计算的结果
2)jsp脚本: <% java代码 %> 执行java代码
3)jsp声明: <%! 变量或方法 %> 声明jsp的成员变量或成员方法
4)jsp注释: <%!– jsp注释 –%> 用于注释jsp代码,不会翻译到java文件中,也不会执行。

jsp指令

1)include指令:
include指令用于引入其它JSP页面,如果使用include指令引入了其它JSP页面,那么JSP引擎将把这两个JSP翻译成一个servlet。所以include指令引入通常也称之为静态引入。

语法:
  <%@ include file=”relativeURL”%>
  其中的file属性用于指定被引入文件的相对路径。
  file属性的设置值必须使用相对路径,如果以“/”开头,表示相对于当前WEB应用程序的根目录(注意不是站点根目录),否则,表示相对于当前文件。

细节:
1. 被引入的文件必须遵循JSP语法。
2. 被引入的文件可以使用任意的扩展名,即使其扩展名是html,JSP引擎也会按照处理jsp页面的方式处理它里面的内容,为了见明知意,JSP规范建议使用.jspf(JSP fragments)作为静态引入文件的扩展名。
3. 由于使用include指令将会涉及到2个JSP页面,并会把2个JSP翻译成一个servlet,所以这2个JSP页面的指令不能冲突(除了pageEncoding和导包除外)。

2) page指令:
告诉tomcat服务器如何把jsp文件翻译成java文件
language: 翻译的动态语言。
import: 类导入

<%@ page 
[ language="java" ] 
[ extends="package.class" ] 
[ import="{package.class | package.*}, ..." ] 
[ session="true | false" ] 
[ buffer="none | 8kb | sizekb" ] 
[ autoFlush="true | false" ] 
[ isThreadSafe="true | false" ] 
[ info="text" ] 
[ errorPage="relative_url" ] 当出现错误时会跳到指定的errorPage
[ isErrorPage="true | false" ] 
[ contentType="mimeType [ ;charset=characterSet ]" | "text/html ; charset=ISO-8859-1" ] 
[ pageEncoding="characterSet | ISO-8859-1" ] 
[ isELIgnored="true | false" ] 
%>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值