JSP基础与提高(一)

JSP基础

JSP的由来

1.1. 为什么有JSP规范

  Servlet技术产生以后,在使用过程中存在一个很大的问题,即为了表现页面的效果而需要输出大量的HTML标签,这些标签在Servlet中表现为一个个的字符串常量。这种输出页面的方式不仅仅增加了开发时对页面的控制难度,也不利于后期的维护。
  为了能够将Servlet中用于表现的功能分离出来,提高视图的开发效率,推出了JSP这种技术,主要用于将Servlet中负责显示的语句抽取出来。

1.2. 什么是JSP

 JSP(Java Server Page)是Sun公司制定的一种服务器端动态页面技术的组件规范,以“.jsp”为后缀的文件中既包含HTML静态标记用于表现页面,也包含特殊的代码,用于生成动态内容。
 JSP作为简化Servlet开发的一种技术实质上最终依然要转变为Servlet才可能运行,只不过这个转变过程由Servlet容器来完成。所以遵循JSP的编写规范才能使得JSP转变为需要的Servlet。

1.2. JSP编写规范

1.2.1. 如何编写JSP

  • 步骤一、创建一个以“jsp”为后缀的文件
  • 步骤二、在文件中添加用于控制页面显示的HTML代码、样式及JavaScript脚本。
  • 步骤三、在需要动态生成的部分添加Java代码的编程逻辑

1.2.2. JSP页面中的HTML代码

  JSP页面中的HTML代码与静态的HTML页面代码没有区别,可以有基本标记,可以有用于控制样式的CSS,可以有控制页面的JS脚本。这些原本在Servlet中表现为字符串常量的内容最终依然会在JSP转换成Servlet时由系统使用out.write方法自动输出

1.2.3. JSP页面中的注释

在JSP页面中可以添加如下两种类型的注释

  • <!注释内容 –>
  • <%注释内容 –>

      第一种注释也叫HTML注释,可以出现在JSP页面之中,注释内容中可以包含了一些Java代码,但这些代码会被执行
      第二行注释是JSP注释,不允许注释的内容出现Java代码,写了Java代码也会被忽略,不会执行。


1.2.4. JSP页面中的Java代码

  JSP页面之中可以嵌入一些Java代码,以此动态生成页面中的一些内容。而JSP规范恰恰是针对这些嵌入的Java代码的一些约束,各种不同类型的代码的作用以及在转变为Servlet一部分时的规则都是不一样的。JSP页面中可以包含如下三种类型的Java代码

  •   JSP表达式(方便输出)
  •   JSP小脚本(完成相对较长的逻辑运算)
  •   JSP声明(添加属性或方法)
      这些Java代码可以在页面的任何位置进行编写,当他们被执行时就可以控制页面上产生可变化的内容了。

JSP表达式

使用表达式可以方便的在JSP页面中输出运算的结果,代码形式如下所示:

<%=3+5%>
<%=add()%>
<%=xx.getName()%>
<%=xx.getName()+“abc”%>

注意:表达式结束不需要写分号。

  这种形式的Java代码在转译成Servlet时,会成为service()方法中使用out.print语句的输出。
out.print(3+5);
out.print(add());
out.print(xx.getName());
out.print(xx.getName()+“abc”));

JSP小脚本

 JSP小脚本可以编写Java代码段,从而实现相对较长的一段运算逻辑。这些Java代码最终都会成为Servlet中Service方法的一部分。由于HTML与Java可以进行混合使用,所以需要注意括号的匹配。

<table>
    <%
    List<User>  allUser = (List<User>)request.getAttribute  (“users“);
    for(User u : allUser){
    %>
      <tr>
          <td> <%=u.getId()%>    </td>
          <td> <%=u.getName()%>  </td>
      </tr>
    <%
    }
    %>
</table>

  以上代码使用小脚本控制生成一个表格。<tr>行标记作为要循环输出的一部分出现在了循环体内。需要注意循环体结束时的大括号的匹配。这些代码最终都会成为service方法的一部分,转换结果如下:

public void service(…){
out.write(“<table>”);
List<User>  allUser = (List<User>)request.getAttribu(“users“);
for(User u : allUser){
    out.write(“<tr> <td>”);
    out.print(u.getId());
    out.write(“</td><td>”);
    out.print(u.getName());
    out.write(“</td></tr>”);
 }
    out.write(“</table>”);
}

JSP声明

  JSP声明可以为对应的Servlet添加属性和方法。这种形式的代码使用的很少。语法规则如下:

<%!
    //属性或方法的声明
%>

如编写下列代码

<%!
public void fun(){
    //…  方法体
}
%>

转换为Servlet之后的结果如下:

public class XXX_JSP extends JSPBase{
    public void fun(){
        // … 方法体
    }
      public void  service(… …){

       }
}

1.2.5. JSP页面中的指令

  指令在JSP页面中通常起到转译成Servlet时的格式控制的作用。基本语法为:
  <%@ 指令名 属性=值 %>
  常用指令包含以下三种
- page指令
- include指令
- taglib指令

  这些指令都有自己的属性来实现不同的控制功能。taglib指令会在讲解JSP标签时详细介绍。

page指令

  page指令可以实现在JSP页面中导入要用到的Java包,也可以对页面的一些属性进行设置。
1. 导包

  • <%-导包 –%>

    • <%@ page import=“java.util.*“%>
    • <%@ page import=“java.util.,java.sql.“%>

        使用page指令导包时,需要用到import属性。如果需要导入多个包,可以分成多条page指令来编写,也可以在一条page指令中,使用“,“逗号作为分隔来实现。注意,page指令要放在页面的最上面编写

       2.设置response.setContentType()方法的参数值

  • <%– 设置response.setConentType方法的参数值 –%>
    • <%@ page contentType=“text/html;charset=utf-8“%>

        使用page指令可以设置输出内容的编码方式,这样就可以设置浏览器使用正确的解码方式来显示页面。

       3.设置容器读取该文件时的解码方法

  • <%– 设置容器读取该文件时的解码方式 –%>
    • <%@ page pageEncoding=“UTF-8“%>

        为了保证页面中编写的中文能够保存,以及容器在加载文件时能正确的解码文件中的中文,需要通过page指令的pageEncoding属性来完成。
        保证页面在加载到内存时正确的解码中文。

include指令

  include指令主要用于将其他页面包含在另一个页面之中。
  同一个应用中的很多页面都会有相同的导航头、版权声明,在每一个页面中重复编写是没有必要的,而且如果导航头发生变化时不利于所有页面的更新。如果将这样共用的部分单独做到一个文件中,只需要在不同的页面中添加引用,就可以实现页面内容的重用。、

 include指令的语法如下:
 <%@ include file=“header.html” %>

traglib指令

  作用:在JSP页面中导入JSTL标签库。替换jsp中的java代码片段。
  <%@ taglib uri=”http://java.sun.com/jsp/jstl/core” prefix=”c” %>


1.2.6.JSP页面中的隐含对象

  由于JSP页面最终要转化为一个Servlet,而作为即将转变为Servlet的一个前期版本,会有很多系统提供给页面能够直接使用的对象,这些对象的创建由系统完成,对象名也有系统命名,根据页面中要实现的功能直接使用即可。具体的隐含对象信息见下表。

隐含对象 类型 说明
request HttpServletRequest 请求信息
response HttpServletResponse 响应信息
out JSPWriter 输出的数据流
session HttpSession 会话
application ServletContext 全局的上下文对象
pageContext PageContext JSP页面上下文
page Object JSP页面本身
config ServletConfig Servlet配置对象
exception Throwable 捕获页面异常

1.3JSP运行原理

  整个过程在Servlet容器的控制下将请求的JSP资源转变为Servlet之后,同样会经历Servlet的例化、初始化、就绪、销毁四部分的生命周期。从图中可以看到,之所以第一次请求一个JSP页面会比之后的请求响应慢一些,就是要经过转译成Servlet,编译成class这样一个过程。

  JSP如何转换为Java过程
  用于导包的page指令最终成为import语句,page指令中的contentType属性转变为了_JSPService()方法中的response.setContentType()方法,HTML标记都会有out.write方法输出,<%%>的小脚本原封不动成为了_JSPService()方法内的一部分。当HTMl标记与小脚本混合在一起时,转变过程遵循从上至下的顺序逐行转变。

时间: 2024-11-02 14:35:37

JSP基础与提高(一)的相关文章

jsp基础与提高(EL、JSTL)

EL表达式 1.1 为什么需要EL表达式和JSP标签 JSP的产生在一定程度上将Servlet中负责表现的功能抽取了出来,但JSP页内嵌入的Java代码也破坏了页面中负责表现的页面结构,特别是当运算逻辑稍微复杂一点的话,那么JSP页面中大量的Java代码增加了页面维护的难度. 所以使用简单的标签来表现复杂的逻辑以及使用简单的形式表现运算的关系就是EL表达式和JSP标签出现的原因. 1.2. 什么是EL表达式 一套简单的运算规则,用于给JSTL标签的属性赋值,也可以直接用来输出而脱离标签单独使用.

jsp基础语法 一 scriptlet

jsp作为WEB的开发基础,有其重要的地位,那么熟练掌握JSP的语法及应用就成了重中之重. 首先我们一起先从JSP的基本语法学起:(以下内容来自李兴华视频手稿整理) scriptlet简介 script表示的是脚本小程序,像之前out.println()这个语句是缩写在<%%>之中的,很明显,这里面 缩写的语句就是一个script. 在jsp中最重要的部分就是Scriptlet(脚本小程序),所有嵌入在HTML代码中的java程序都必须使用 Scriplet标记出来,在jsp中一共有三种scr

jsp基础语法 六 jsp+jdbc访问数据库

学习过了jsp基础语法以及HTML和javascript的用法之后,jsp+jdbc连接数据库开发动态WEB网页就可以实现了. 对于学过java SE的同学来说,数据库的操作并不陌生,如果有忘记的或者不会的可以到http://zhaoyuqiang.blog.51cto.com/6328846/1127658  学习. jsp中的数据库连接又是如何呢? 怎样才能利用上我们学过的HTML和javascript的知识呢? 这就是我们这一篇文章的学习内容----jsp+jdbc访问数据库. 我们就以一

jsp基础语法 五 跳转指令

跳转的作用: 使用跳转指令可以将一个用户的请求,从一个页面传递到另外一个页面. 例如:用户登录QQ空间,如果用户名和密码正确的话就会跳转到空间首页,否则就会跳转到失败页. 跳转指令的语法: 不传递参数   <jsp:forward page=""/> 传递参数:  <jsp:forward page=""> <jsp:param name="参数名称" value="参数内容"> </

jsp基础语法 四 包含指令

什么是包含: 在页面开发的时候,一些代码难免会有重复使用的情况,比如说A页面有一段代码a,B页面和C页面都能用到a这段代码,那么B和C页面就把A页面包含进来,自然的a这段代码也被包含进BC页面了,这样就实现了B.C页面能用到a代码了,避免了重复的书写a代码. 包含的意义: 使用包含操作,可以将一些重复的代码包含进来继续使用. 一般分为如上四个区域. 真正在改变的地方只是具体内容,因为根据不同的用户浏览的不同,那么肯定这上面会存在差别  现在就有两种做法实现以上一种功能 方法一:在没有一个jsp页

jsp基础语法 三 page指令

page指令 page指令是在jsp开发中较为重要,使用此属性,可以定义一个jsp页面的相关属性,包括 设置MIME类型.定义需要导入的包.错误页的指定等 page指令的语法:<%@ page 属性="内容"%> page的主要属性: 设置MIME 先来观察一道程序: <html> <head> <title> New Document </title> </head> <body> <cente

jsp基础语法 二 注释的使用

我的一个同学问我,java中有"//"这个样的注释,用起来挺方便的,jsp的注释难道不是这个吗?用"//"在jsp中不行. 对于学习了这么长时间的jsp,注释是最基本的.jsp中的注释不同于java. 在jsp中支持两种注释,一种是显示注释,这种注释客户端是允许看见的,另外一种注释是隐式注释,此种注释客户端是无法看见的. 显示注释语法: <!--注释内容--> 隐式注释语法: 格式一:// 注释,单行注释: 格式二:  /* 注释 */,多行注释: 格式

JSP基础--JAVA遇见HTML

1.手工编写第一个WEB应用程序 2.默认访问服务器网页首页欢迎界面是 index.jsp,就是网页链接访问其所在的文件夹目录,不访问这个文件,也会自动访问的.如果这个文件夹目录下没有index.jsp或者有其他的比如 xx.jsp 链接直接访问这个 xx.jsp 也是没有用.换句话说,默认首页欢迎界面 就是 index.jsp 然后如果要修改默认首页欢迎界面,方法如下: 打开这个web.xml文件,然后添加以下代码: 1 <welcome-file-list> 2 <welcome-f

建立JSP操作以提高数据库访问的效率

js|访问|数据|数据库     从服务器端促进程序快速开发的Java Server Pages (JSP)决定它成为一种广为流行的工具.虽然呆板的一面仍然存在,然而无论它包含多少缺点,JSP能够为Web程序设计者提供很多东西,尤其是与数据库的输入和输出操作与数据的处理. 通过JSP来进行数据库访问不需要太多的引导.问题是如何使开发者能够接受Web程序的数据库访问比传统的本地OLAP系统的数据库访问更加具有吸引力,并且使他们认识到,整洁和简要的数据访问方法才是关键的.在这一点上,JSP可以很好地