JSP

写在前面,先抄一段古文,学一点哲学。
古人之观于天地、山川、虫鱼、鸟兽,往往有得,以其求思之深而无不在也。夫夷以近,则游者众;险以远,则至者少。而世之奇伟、瑰怪,非常之观,常在与险远,而人之所罕至焉,故非有志者不能至也。有志矣,不随以止也,然力不足者,亦不能至也。有志于力,而又不随以怠,至於幽暗昏惑而无物以相之,亦不能至也。然力足以至焉,於人为可讥,而在己为有悔;尽吾志也而不能至者,可以无悔矣,其孰能讥之乎?

本章内容

  • JSP代码
  • JSP生命周期
  • JSP隐式对象
  • JSP配置

JSP是为了让Servlet更好地输出html代码而发展起来的,到后来发展称为在页面中使用java代码,即在html中使用java代码。

1,JSP中的指令

JSP中的指令有三种:page、include和taglib。在JSP中指令的写法为:

<%@ page import="foo.*" %>

1.1 page指令有十三个属性,常用的6个属性如下:

  1. import——定义java import语句。功能是像普通servlet类一样导入包。
  2. isTHreadSafe——定义生成的servlet是否需要实现SingleThreadModel.默认值为true,正常情况下“应用是线程安全的”,这个值不需要改动。
  3. contentType——定义JSP响应的MIME类型。
  4. isELIgnored——定义转换这个页面是否忽略EL表达式。
  5. isErrorPage——定义当前页面是否是一个JSP的错误页面。默认值是false。当这个值为true时,页面能够访问JSP隐式的exception对象。
  6. errorPage——定义一个资源的URL,如果有未捕获的Throwable异常,就会发送到这个资源。如果这个属性指定的是一个JSP,该JSP的page指令中就会有isErrorPage=“true”属性。

1.2 include指令。

<%@ include file="wickedHeader.html" %>

include指令定义在转换时增加到当前页面的文本和代码,从而允许你建立可重用的模块(如标准页面标题或导航栏),这些可重用的模块能增加到各个页面上,而不必在每个JSP中重复写所有的这些代码。

1.3 taglib指令

<%@ taglib tagdir="WEB-INF/tags/cool", prefix="cool" %>

taglib指令定义JSP可以使用的标记库。后续补充

2,JSP中的java代码

在JSP中插入java代码很简单,插入的java代码称为scriptlet。

<% out.println("Hello, World"); %>

值得注意的是:JSP中的java代码最终会被容器转化成一个servlet。JSP的生命周期如下:

  1. 容器读取DD,此时对.jsp没有做任何处理。
  2. 第一个请求到来,该请求是一个指向jsp的请求,此时容器尝试将jsp中的scriptlet转换成一个servlet类的.java源代码,在这个过程中JSP的语法错误会被发现。
  3. 容器尝试编译.java文件,在这个过程中java语法错误会被发现。
  4. 容器加载servlet
  5. 容器实例化servlet,并且调用jspInit()方法,此时servlet类成为一个真正的servlet,可以接受客户请求。
  6. 容器创建一个新的线程处理客户的请求,servlet的_jspService()方法运行。

容器根据jsp生成的servlet有三个重要的API:

  1. jspInit()——这个方法由init()方法调用
  2. jspDestroy()——这个方法由servlet的destroy()方法调用
  3. _jspService()——这个方法由servlet的service()方法调用,不能覆盖

JSP中的隐式对象

  1. out——JspWriter。与response得到的PrintWriter基本相同,只是增加了一些缓冲功能
  2. request——HttpServletRequest,一个请求对象。
  3. response——HttpServletResponse,一个响应对象。
  4. session——HttpSession,一个session对象。
  5. ServletContext——application,应用上下文对象,可以获取应用上下文参数。
  6. ServletConfig——config,servlet配置参数,可以获取servlet上下文参数。
  7. Throwable——exception,isErrorPage=”true”的页面才能获取这个对象,用于错误处理。
  8. PageContext——pageContext,封装了其它所有的隐式对象,可以向一些辅助类提供pageContext引用。
  9. Object——page。

3,JSP声明

声明的基本语法如下:

<%! int i = 0; %>

jsp中声明的变量会映射到servlet中的实例变量;声明的方法则映射为servlet中的静态方法。

4,JSP表达式。

JSP中的表达式应该是一个可以打印的对象,因为表达式会称为out.println()方法的参数
表达式的基本语法如下:

<%= "Hello, World" %>

5,JSP的配置和属性

5.1 配置servlet初始化参数

<web-app>
    some code 
    <servlet>
        <servlet-name>JspTest</servlet-name>
        <jsp-file>TestJsp.jsp</jsp-file>
        <!-- 设置初始化参数 -->
        <init-param>
            <param-name>email</param-name>
            <param-value>jsp@csdn.com</param-value>
        </init-param>
    </servlet>
</web-app>

5.2JSP中属性

可以使用JSP的隐式对象来得到和设置对应的4个属性作用域的属性。比如设置一个应用属性:

application.setAttribute("foo", "hello");

也可以使用pageContext这个隐式对象:

<% pageContext.setAttribute("foo", "hello", PageContext.APPLICATION_SCOPE); %>

总结

JSP实现了在html中引入java代码的功能,但是也使得页面混乱,难以维护,同时也要求页面人员也懂java,这是一个很不现实的做法。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值