一 jsp出现的原因 Jsp出现的原因是因为Servlet的缺点: (1) 开发者和维护应用程序的成员必须对java编程有全面的了解,因为在处理代码的时候和处理html元素混合在一起 (2) 如果要改变应用的外观,或者增加对新客户类型的支持,则需要对象sevlet对吗进行更新和重编译 (3) 在设计应用界面时,很难充分利用web开发页面,如果这种工具用于web页面布局,所生成的代码很容易出错,即Servlet产生应答的时候,要返回一整个html代码,在输出的结果代码中会有很多的out输出语句,也不能很好的输出 二 Jsp的介绍: 1.Jsp的概念: Jsp是servlet更高级的扩展,是用来显示动态内容的,在后缀名为.jsp的程序里面写。 2.Jsp优点: (1)简便性和有效性 (2)程序的独立性 (3)程序的兼容性 (4)程序的可重用性(一般把多次使用的jsp代码提取出来放到一个包中去调用) 3.Jsp网页的构成 概念:Jsp页面就是带有jsp元素的常规web页面,包括静态内容(html)和动态内容。动态内容包括指令元素、脚本元素、动作元素注释等 (1)指令元素 介绍:(1)指令元素主要用于为转换阶段提供JSP页面的相关信息,指令不会产生任何输出到当前的输出流中,它指定了有关页面本身的信息,这些信息在请求期间一直保持不变。 (2)指令元素的作用范围为当前的页面,即只为当前的jsp服务,即只对当前的线程有效 语法:<%@ directive{attr=”value”}%> 分类:指令元素分为三种:page、include和taglib (1)配置指令元素:page 介绍:该指令用于整个页面,page可以出现在jsp页面的任何位置,不管是什么位置都对整个页面有效,所以一般放到jsp文件的最开头,和html中 的meta作用差不多。 语法:<%@page import=”java.util.*”%> 注:可以使用多个page指令,每一个属性只能声明一次,除了import之外 常用的属性: (1)Import=“导包列表” 例子:%@page import=”java.util.*,java.io.*”% 注:Import属性是唯一个一再同一个页面中出现多次的属性,并且在jsp中有直接可以使用的类,是自动隐藏的,为: Java.lang.* javax.servlet.jsp.*, javax.servlet.http.*; (2)language语言的设置 language=”scriptingLangeuage” (3)contentType=”” 应答的类型 例子:<%@ page contentType=”text/html;charset=utf-8”%> 注:pageEncoding=””的编码方式优先于charset的编码方式, 如果没有指定contenetType类型,也没有设定pageEncoding="utf-8",用默认的字符集是ISO-8859-1。 (4)Session的设置 Session=”false”/”true” (5)Buffer的设置-----设置的是缓冲区大小 buffer=”16kb” 缓冲区默认的大小是8kb (6)autoFlush------设置当缓冲区占满了是否自动刷新 autoFlush =”true” | “false” 如果把缓冲区设为none & autoFlush=”fallse” 会抛常, 因为在缓冲区满了之后,没有刷新的话,就不能往里在存,所以当把缓冲区设为none 必须设置为autoFlush=”true” (7)错误处理页 errorPage=“relativeURL”--- 设置当前JSP页面中代码出现异常后,专门处理异常的页面。 <%@ page errorPage=”errorHandler.jsp”%> <%@ page isErrorPage=”true”%> (8)异常处理 isErrorPage=“true|false” 注:只有错误处理有一个内置对象 Exception (9)Include指令元素 概念:include指令用于在JSP页面中包含一个文件,该文件可以是JSP页面、HTML网页、文本文件或一段Java代码,用它可以简化页面代码,提高代码的重用性。 实例: Include指令用于在jsp页面中包含一个文件 <%@ include file="date.txt"%> <%@ include file="MyHtml.html"%> <%@ include file="/date.txt"%> 虚拟目录的根路径 注:只能包含一个静态的网页,不能包含动态的 静态的包含是把指定的文件包含在jsp中,是在转换之前
(10)Taglib指令---自定义标签 taglib指令允许页面使用用户定制的标签,语法如下: <%@taglib (uri="具有唯一标识和前缀相关的标签描述符地址" prefix="前缀")%> (2)脚本元素 概念:把java代码嵌入到jsp页面中,这些java代码将出现在由当前的jsp页面生成的servlet中,使JSP将静态内容与动态内容分离出来。 (1)表达式:<%=8*3%> 注:在不同的位置输出的位置也不一样,而且输出的结果位24 由web服务器计算值 转换的原理:在jsp中的html标签中的内容由 out.println()输出 在写表达式的时候,表达式必须有值,必须是有返回值的 (2)脚本: 格式:<%java的代码段%> 介绍:脚本是在<% %>里嵌入的Java代码,这里的Java代码和一般的Java代码没有什么区别,所以每一条语句同样要以分号“;”结束,这和表达式是不相同的。 例子: (1)嵌入java代码段 浏览器在解析的时候<会当成标签的开始--> <% int i = 10; int j = 20; if (i < j) { out.print("i<j"); } else { out.print("i>j"); } %> (2)可以对java代码拆分,只要是完整的代码就行 <% int i = 10; int j = 20; if (i < j) { %> i<j <% } else { %> i>j <% } %> (3)如果要输出i的值,必须要在java代码中输出 <% int i = 10; int j = 20; if (i < j) { out.print(i); %> <j <% } else { out.print(i); %> >j <% } %> 注:以上三种方法都一样 (3)声明变量和方法: 语法:<!%方法或变量%> <%! int var; 声明的是变量加 ; 声明方法的时候不用加 public void fun(){ var = 10; } static{ System.out.println("静态的代码块"); } %>
三 补充 1.Jsp界面访问时的流程: 第一次: 浏览器第一次访问---àweb服务器上的某一个jsp页面 Jsp页面-àservlet.java(会编译成servlet页面)--à编译.class----à载入内容,初始化init() 浏览器 <------------------- 再次访问: 浏览器---à访问jsp页面-----à开启线程---à直接返回浏览器 如果jsp有更新,还会是从第一步开始
2.显示当前系统时间 <% java.util.Date date = new java.util.Date(); out.println(date.toString()); %> 3.九九乘法表的实现 <% int firstCount = Integer.parseInt(request.getParameter("fisrtCount")); int secondCount = Integer.parseInt(request.getParameter("secondCount")); for(int i=1;i<firstCount+1;i++){ for(int j =1;j<=i;j++){ out.print(j+"*"+i+"="+i*j+" "); } out.print("<br/>"); } %> 注:获取的时候必须是在一个<%%>标签里
|
|