JSP的书写规范及工作原理

一.JSP的由来及书写规范     
  1.为什么要推出jsp技术?
   Servlet技术产生以后,在使用过程中存在一个很大的问题,即为了表现页面的效果而需要输出大量的HTML标签,这些标签在Servlet中表现为一个个的字符串常量。这种输出页面的方式不仅仅增加了开发时对页面呢的控制难度,也不利于后期的维护。为了能够将Serlvet中用于表现的功能分离出来,提高视图的开发效率,推出了jsp这种技术,主要用于将Servlet中负责显示的语句抽取出来。
   2.什么是jsp?
    JSP(java server page)是Sun公司制定的一种服务端动态页面技术的组件规范,以“.jsp”为后缀的文件中即包含大量的HTML静态标签用于展示页面,也包含了部分java代码,实现动态生成部分内容。
   JSP作为简化Servlet开发的一种技术,实质上最终依然要转变为Servlet才可能运行,只不过这个转变的过程由Servlet容器来完成。所以遵循JSP的编写规范才能使得JSP转变为需要的Servlet。
   3.JSP的编写规范
   第一步、创建一个以“.jsp"为后缀的文件
   第二步、在文件中添加用于控制页面显示的HTML代码、样式及JavaScript脚本。
   第三步、在需要动态生成的部分添加Java代码的编程逻辑。
   4.JSP页面中的HTML代码
    JSP页面中HTML代码与静态的HTML页面代码没有区别,可以有基本标记,可以有用于控制样式的CSS,可以有控制页面的JS脚本。这些原本在Servlet中表现为字符串常量的内容最终依然会在JSP转换成Servlet时由系统使用out.write方法自动输出。
   5.JSP页面中的注释
    在JSP页面中可以添加如下两种类型的注释:
     a、<!--注释内容-->
     b、<%--注释内容-->
   a类型的注释叫HTML注释,可以出现在JSP页面之中,注释内容中可以包含一些Java代码,但这些代码会被执行。
   b类型的注释叫JSP注释,不允许注释的内容出现Java代码,写了Java代码也会被忽略,不会执行。
   6.JSP页面中的Java代码
    JSP页面之中可以嵌入一些Java代码,以此动态生成页面中的一些内容。而JSP规范恰恰是针对这些嵌入的Java代码的一些规范:
   1)JSP表达式(方便输出)
   2)JSP小脚本(完成相对较长的逻辑运算)
   3)JSP声明(添加属性或方法)
  这些Java代码可以在页面的任何位置进行编写,当他们被执行时就可以控制页面上产生可变化的内容了。
   6.1 JSP表达式
     使用表达式可以方便的在JSP页面中输出运算的结果,代码形式如下:
    a.<%=3+5%>
    b.<%=add()%>
    c.<%=xx.getName()%>
    d.<%=xx.geName()+"abc" %>
    注意:表达式结束需要写分号。
   这种形式的Java代码在转译为Servlet时,会成为Service()方法中使用out.print语句输出。
   a.out.print(3+5);
   b.out.print(add());
   c.out.print(xx.getName());
   d.out.print(xx.getName()+"abc");
  6.2 JSP小脚本
   JSP小脚本可以编写Java代码段,从而实现相对较长的一段运算逻辑。这些Java代码最终都会成为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.getAttribute("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>");
}
  6.3 JSP声明
    JSP声明可以为对应的Servlet添加属性和方法。这种形式的代码使用的很少。语法规则如下:
  <%! 
   //属性或方法的声明
 %>
如编写下列代码:
 <%! 
   public void fun(){
      //...方法体
}
%>
转换为Servlet之后的结果如下:

 public class XXX_jsp extens JSPBase{
 public void fun(){
    //...方法体
}
  public void service(...){
}
}



  7.JSP页面中的指令
   指令在JSP页面中通常起到转译成Servlet时的格式控制的作用。基本语法为:
   a.<%@ 指令名 属性=值 %>
  常用的指令有以下三种:
    1)page指令
     page指令可以实现在JSP页面中导入需要的Java包,也可以对页面的一些属性进行设置.
   <%--导包--%>
   <%@ page import="java.util.*"%>
   使用page指令导包时,需要用到import属性.如果需要导入多个包,可以分成多条page指令来编写,也可以在一条page指令中,使用","逗号进行分隔来实现.注意,page指令要放在页面的最上面编写.


  a.设置response.setContentType()方法的参数值
   <%--设置 response.setContentType方法的参数值--%>
   <%@ page contentType="text/html;charset=utf-8"%>
 使用page指令可以设置输出内容的编码方式,这样可以设置浏览器使用正确的解码方式来显示页面.
   b.设置容器读取文件时的解码方式
    <%@ page pageEncoding="utf-8"%>
 为了保证页面中编写的中文能够保存,以及容器在加载文件时能正确的解码文件中的中文,需要通过page指令的pageEncoding属性来完成.这段代码可以保证页面在加载到内存时正确的解码中文.
    2)include指令
     include指令主要用于将其他页面包含在另一个页面中.同一个应用中的很多页面都会有相同的导航头、版权声明,在每一个页面中重复编写没有必要,而且如果导航头发生变化不利于多有页面的更新.如果将这样共用的部分单独做到一个文件中,只需要在不同的页面中添加引用,就可以实现页面内容的重用.
  include指令的语法如下:
   <%@ include file="header.html"%>
    3)taglib指令
    taglib指令是为了在JSP页面引入标签的命名空间和前缀,帮助系统定位对应的类.
 例如:<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
  
二.JSP的工作原理
  1.jsp是如何运行的?
    整个过程在servlet容器的控制下将请求的JSP资源转变为Servlet后,同样会经历Servlet的实例化、初始化、就绪、销毁四部分的生命周期.第一次请求一个jsp页面会比之后的请求响应慢一些,就是要经过转译为Servlet,编译成class这样的一个过程.
  2.JSP如何转换为Java?
   Jsp页面最终是要转译为一个Servlet,所以JSP页面中HTML代码及JAVA代码、指令等内容都会按照固定的方式变为Servlet中的一部分.
  用于导包的page指令最终会成为import导包,page指令中的contentType属性转变为了_JSPService()方法中的response.setContentType()方法,HTML标记都会有out.write()方法输出,<% %>小脚本原封不动成为了_JSPService()方法内的一部分.当HTML标记与小脚本混合在一起时,转变的过程遵循从上至下的顺序逐行转变.
  3.如何将静态页面转换为动态页面?
    在将一个静态HTML页面转变为动态的JSP页面时,首先需要分析页面的整体结构,找到页面不变的公共部分,如导航、页脚等信息.
  在将静态页面的脚本拷贝到JSP页面之后,一定要记得添加page指令的pageEncoding属性,保证页面中的中文能够被正确编码.
  添加page指令的import属性导入页面中需要的Java包.将页面中与目标页面不一致的地方进行修改,如修改表头与实际字段一致.最后将页面需要动态生成的内容删除,使用小脚本的Java代码来实现运算逻辑.

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值