JSP基础与提高(一)

简介: JSP基础JSP的由来1.1. 为什么有JSP规范  Servlet技术产生以后,在使用过程中存在一个很大的问题,即为了表现页面的效果而需要输出大量的HTML标签,这些标签在Servlet中表现为一个个的字符串常量。

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标记与小脚本混合在一起时,转变过程遵循从上至下的顺序逐行转变。

相关文章
|
Web App开发 编解码 Ubuntu
YouTube下载视频教程:常用的网站软件插件APP都有涉及
有时候可能需要YouTube上的视频来进行一些操作,比如教程演示,语言学习,视频编辑等.....那么YouTube视频怎么下载下来呢?方法比较多。在这篇文章里我会给大家介绍一些下载YouTube视频的常用网站、浏览器插件、电脑软件和手机APP,方便大家找到最合适的方法去保存油管视频。
3015 1
YouTube下载视频教程:常用的网站软件插件APP都有涉及
|
Java 应用服务中间件 网络安全
Tomcat配置ssl协议及遇到的问题https页面无法访问
Tomcat配置ssl协议及遇到的问题https页面无法访问
|
XML PHP 数据安全/隐私保护
phpexcel中文教程-设置表格字体颜色背景样式、数据格式、对齐方式、添加图片、批注、文字块、合并拆分单元格、单元格密码保护
转:http://www.cnblogs.com/huangcong/p/3687665.html   首先到phpexcel官网上下载最新的phpexcel类,下周解压缩一个classes文件夹,里面包含了PHPExcel.
2139 0
|
负载均衡 安全 Linux
openstack 网络Neutron知识点《openstack》
本人cdsn账号 https://liuyunshengsir.blog.csdn.net/article/details/124927149
1217 1
openstack 网络Neutron知识点《openstack》
|
缓存 NoSQL 前端开发
springboot+vue前后端分离实现企业人事管理系统
系统是前后端分离的项目,直接启动Springboot应用程序类后,再启动前端工程访问即可。主要实现 了企业的人事管理功能,主要包含员工管理、薪资管理、职位管理、权限管理、网盘文件分享管理等模块。 系统亮点:使用REDIS进行数据缓存,优化查询性能;使用分布式文件系统进行文件存储服务;基于Springboot+vue实现前后端分离开发
712 0
springboot+vue前后端分离实现企业人事管理系统
|
弹性计算 Kubernetes 监控
阿里云ecs搭建k8s体验
利用阿里云搭建k8s集群,涵盖搭建过程,排错思路,排错过程
2045 2
阿里云ecs搭建k8s体验
|
XML Java Maven
别再写垃圾代码了:试试阿里巴巴 Java 开发插件,打造你的团队专属风格。。。(3)
别再写垃圾代码了:试试阿里巴巴 Java 开发插件,打造你的团队专属风格。。。(3)
436 0
别再写垃圾代码了:试试阿里巴巴 Java 开发插件,打造你的团队专属风格。。。(3)
|
机器学习/深度学习 算法
机器学习【西瓜书/南瓜书】--- 第2章模型评估与选择(下)(学习笔记+公式推导)
本博客为博主在学习 机器学习【西瓜书 / 南瓜书】过程中的学习笔记,每一章都是对《西瓜书》、《南瓜书》内容的总结和提炼笔记,博客可以作为各位读者的辅助思考,也可以做为读者快读书籍的博文,本博客对西瓜书所涉及公式进行详细的推理以及讲解,本人认为,不推导公式所学得的知识是没有深度的,是很容易忘记的,有些公式推导起来并不复杂,只是被看似复杂的数学表达式所“吓唬”,希望大家拿上纸笔,跟着博主一起学习,一起推导。
361 0
机器学习【西瓜书/南瓜书】--- 第2章模型评估与选择(下)(学习笔记+公式推导)
|
前端开发 Unix Windows
SAP打印配置
SAP打印机原理、打印配置及打印操作
SAP打印配置
|
存储 消息中间件 设计模式
10道不得不会的 Zookeeper 面试题
10道不得不会的 Zookeeper 面试题。 低谷蓄力
314 0
10道不得不会的 Zookeeper 面试题