x
一 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/>");
}
%>
注:获取的时候必须是在一个<%%>标签里