学习的知识点

JSP,最后会变成一个servlet

JSP最终或变成一个完整的servlet在Web应用中运行,只不过这个servlet类会由容器写好。

JSP中的scriptlet

所谓scriptlet就是放在<%…%>标记中的java代码。如:

  1. <%
  2. out.println(com.inspur.Counter.getCount());
  3. %>

JSP中的指令

JSP指令和scriptlet区别在于:多了一个@符号。注意中间无空格。

使用page指令导入包

  • 导入一个包:
  1. <%@ page import="com.inspur.*"%>
  2. <html><body>
  3. <%
  4. out.println(Counter.getCount());
  5. %>
  6. </body></html>
  • 导入多个包,使用一个import属性,只不过多个包之间用逗号分隔
  1. <%@ page import="com.inspur.*,java.util.*"%>

JSP表达式

和scriptlet代码也很相似,表达式多了一个=。注意中间无空格,还要注意表达式结尾没有分号!

scriptlet代码:

<% out.println(Counter.getCount());%>

表达式代码:

<%= Counter.getCount()%>

表达式为啥没有分号结尾?

表达式会成为out.print()的参数!

<%= Counter.getCount()%>,会被容器转换为:

<% out.print(Counter.getCounter());%>,若加上分号,则会被带入外层括号内造成编译错误。

另外,out是一个隐式对象。

JSP中的声明

如使用java语法声明count变量:

<% int count=0;%>

其实就是scriptlet啦!

不过,有一种真正的JSP声明,和scriptlet区别在于加了一个!:

<%! int count=0;%>

以上两个声明的区别:

所有scriptlet和表达式代码都放在服务方法中,即scriptlet中声明的变量总是局部变量!

而JSP声明的变量是类变量,JSP声明方法是类方法!

容器是如何处理JSP的?



下面是一个简单的例子:



隐式对象

API 隐式对象
JspWriter out
HttpServletRequest request
HttpServletResponse response
HttpSession session
ServletContext application
ServletConfig config
JSPException exception
PageContext pageContext
Object page

注意,PageContext封装了其他隐式对象,即若有一个PageContext引用,就可以得到其他隐式对象的引用,并得到所有作用域的属性。

JSP注释

<!-- HTML 注释 用户在浏览器就可以看到我 -->

<%-- JSP注释,页面开发人员才可能看到我 --%>

JSP所生成的servlet的API



我们主要关注三个关键方法:JspInit()、JSPDestroy()和_jspService().

前两个方法都可以覆盖,而最后一个方法不可以覆盖,这也就是为啥要用下划线开头。

后文可以看到如何覆盖方法。

JSP的生命周期









注意,JSP的转换和编译只发生一次,类似于其他的servlet,一旦得到加载哈初始化,请求时就只会发生一件事,即创建或分配一个线程来运行服务方法。

但是,第一个访问JSP页面的人可能要等待一段时间了,不过JSP规范提到一种推荐的JSP预编译协议,可以看看。

初始化JSP

可以在JSP中完成servlet初始化工作,但是这与常规的servlet中的做法稍有不同。

  • 配置servlet初始化参数

  • 覆盖jspInit()

    使用jspInit()方法获取一个servlet初始化参数(已经在DD中配置的参数),并使用这个参数值来设置一个应用作用域属性:

JSP中的属性

大多数情况,都使用4个隐式对象之一来得到和设置4个JSP作用域中的属性。

4个作用域?处理标准servlet中的请求、会话和应用(上下文)作用域,JSP第四个作用域就是页面作用域,从pageContext对象得到。

前面说过pageContext封装了其他作用域的引用,那么下面就是一个例子:

  • 使用pageContext获得和设置属性的示例:

JSP指令与指令属性

page是一个JSP指令,import是它的13个属性之一,那么page指令其他的属性是什么样的?



JSP中的EL表达式

在JSP中放servlet、声明和表达式并不好:

1)不应该要求WEB页面设计人员必须懂Java

2)JSP中的Java代码很难修改和维护

EL(Expression Language)的用户是提供一种更简单的方法来调用Java代码,但是代码本身放在被的地方。

这些代码可能在一个普通的常规Java类中,也许是一个JavaBean、一个用静态方法的类或者某个所有的标签处理器。

总之,按照当今的最佳实践,不能再JSP中编写方法代码,要是要把Java方法写在别的地方,再用EL来调用。

  • 阻止JSP中的脚本元素

    在DD中使用<scripting-invalid>

  • 忽略EL

    若JSP中有模板文本(普通的HTML或者文本),其中刚好包括了类似EL的东西(${somethind}),要告诉容器忽略这些看似EL的东西。(默认EL是启用的。)

    在DD中放置



    或者使用page指令:

    <%@ page isELIgnored="true" %>

JSP中的动作元素

  • 标准动作:

    <jsp:include page="Footer.jsp" />
  • 其他动作

    <c:set var="rate" value="32" />

《Head First Servlets & JSP》-7-使用JSP的更多相关文章

  1. 【Head First Servlets and JSP】笔记19:JavaBeans与JSP动作元素(<jsp:setProperty.....>、<jsp:getProperty.....>)

    内容来自imooc. 1.什么是JSP动作元素 2.在JSP页面中如何使用Javabeans <jsp:......>表示这是一个JSP动作元素 3.使用JSP动作元素创建JavaBean ...

  2. Java遇见HTML——JSP篇之JSP基础语法

    一.JSP简介 JSP全名为Java Server Pages,Java服务器端页面,其根本是一个简化的Servlet设计,它实现了在Java中使用HTML标签.Jsp是一种动态网页技术标准,是在服务 ...

  3. JSP页面以及JSP九大隐式对象

    €JSP全称是Java Server Pages,它和servle技术一样,都是SUN公司定义的一种用于开发动态web资源的技术. €JSP这门技术的最大的特点在于,写jsp就像在写html,但它相比 ...

  4. JSP之->初识JSP

    JSP 引用百度百科的介绍: JSP(Java Server Pages)是由Sun Microsystems公司倡导.许多公司参与一起建立的一种动态网页技术标准.JSP技术有点类似ASP技术,它是在 ...

  5. jsp学习---使用jsp和JavaBean实现超简单网页计算器

    一.需求 如题,用jsp实现一个超简单的网页计算器. 二.实现 1.效果图 1)初始界面: 2)随便输入两个数进行相乘: 3)当除数为零时提示报错: 2.代码 Calculator.java pack ...

  6. Java遇见HTML——JSP篇之JSP指令与动作元素

    一.include指令(如:<%@include file="..."%> ) 示例: Date.jsp <%@page import="java.te ...

  7. HeadFirst Jsp 07 (使用 jsp)

    Jsp 变成 Servlet, 容器会查看你的JSP, 把它转换成java源代码, 再编译成完整的Java servlet类. Jsp 不需要你的编译, 容器会自动替换成servlet. 在 jsp中 ...

  8. JSP起源、JSP的运行原理、JSP的执行过程

    JSP起源 在很多动态网页中,绝大部分内容都是固定不变的,只有局部内容需要动态产生和改变. 如果使用Servlet程序来输出只有局部内容需要动态改变的网页,其中所有的静态内容也需要程序员用Java程序 ...

  9. jsp的静态包含与动态包含:<%@ include file="" %>和<jsp:include page=""></jsp:include>区别与分析

    <%@ include file="" %>是将文件原封不动的copy进现有的文件中,像是拼接好后,再编译成为servlet运行. <jsp:include pa ...

  10. JSP JSP工作原理 JSP语法 JSP声明 JSP注释 JSP指令 jsp九大隐式/内置对象

    1 什么是JSP   1)为什么说,Servlet是一个动态Web开发技术呢?     Servlet是基于服务端的一种动态交互技术,     HttpServletRequest表示客户端到服务端的 ...

随机推荐

  1. UVALive - 4270 Discrete Square Roots (扩展欧几里得)

    给出一组正整数$x,n,r$,使得$r^2\equiv x(mod\: n)$,求出所有满足该等式的$r$. 假设有另一个解$r'$满足条件,则有$r^2-r'^2=kn$ 因式分解,得$(r+r') ...

  2. 2017.10.3北京清北综合强化班DAY3

    括号序列(bracket) Time Limit:1000ms   Memory Limit:128MB 题目描述 LYK有一个括号序列,但这个序列不一定合法. 一个合法的括号序列如下: ()是合法的 ...

  3. git统计当前分支提交次数

    切换到您要统计的分支,然后Git Bash here,执行如下代码即可 : git log --author="您的用户名" --since='开始日期' --oneline | ...

  4. Linux安装搜狗拼音输入法-sogoupinyin

    Linux安装搜狗拼音输入法-sogoupinyin Linux安装搜狗拼音输入法-sogoupinyin 一.下载所需安装包 二.卸载原有输入法 三.安装 四.安装配置工具 在网上查资料安装好了搜狗 ...

  5. ubuntu下vi文本后出现不正常的情况

    安装vim full版本由于Ubuntu预安装的是tiny版本,所以会导致我们在使用上的产生上述的不便.但是,我们安装了vim的full版本之后,键盘的所有键在vi下就很正常了.首先,要先卸掉旧版的v ...

  6. bae3.0第三步 添加默认管理后台模块和mysql库

    1.创建数据库 先在本地的mysql数据库中创建数据库db_blog,执行python manage.py syncdb来创建表. 然后将数据库中的表导入到bae上的数据库中.2.配置数据库 修改项目 ...

  7. GWT嵌入纯HTML页面

    众所周知,gwt页面是java代码所写,不存在html页面直接作用于gwt面板中.不过gwt也倒是提供了一些可用的功能,比如frame,这个是UI中的一个,内部可以设置URL,但是经过我测试后发现,这 ...

  8. 蓝桥杯 算法训练 ALGO-150 6-1 递归求二项式系数值

      算法训练 6-1 递归求二项式系数值   时间限制:10.0s   内存限制:256.0MB 问题描述 样例输入 一个满足题目要求的输入范例.3 10 样例输出 与上面的样例输入对应的输出. 数据 ...

  9. AngularJS:Bootstrap

    ylbtech-AngularJS:Bootstrap 1.返回顶部 1. AngularJS Bootstrap AngularJS 的首选样式表是 Twitter Bootstrap, Twitt ...

  10. Spring 学习一 @Autowired

    @Autowired Spring 2.5 引入了 @Autowired ,它可以对类成员变量.方法及构造函数进行标注,完成自动装配的工作. 通过 @Autowired的使用来消除 set ,get方 ...