一、JSP(Java Server Page)是一种动态网页技术,允许在页面中嵌套java代码,其本质就是servlet。因为servlet显示数据实现太麻烦。继而有了JSP。开发一般采用JSP负责数据显示,而servlet作为控制器。让JSP既用java代码产生动态数据,又做美化会导致页面难以维护。让servlet既产生数据,又在里面嵌套html代码美化数据,同样也会导致程序可读性差,难以维护。
1.IE浏览器访问JSP页面时,Web服务器是如何调用并执行一个jsp页面的?(Servlet)
web服务器会把xxx.jsp翻译成xxx_jsp.java(其实就是一个servlet,我们可以看tomcat根目录下的word文件夹下找到该文件)文件再编译成可运行xxx_jsp.class文件
2 Web服务器在执行jsp页面时,是如何把Jsp页面中的html排版标签是如何被发送到客户端的?
out.write(" </head>\r\n");
3.Jsp页面中的java代码服务器是如何执行的
java代码会原封不动的翻译到xxx_jsp.java文件的jspService()方法中。
4.Web服务器在调用jsp时,会给jsp提供一些什么java对象?
9个隐式对象,其中2个有开关,需要设置true ,fasle
二 JSP语法
2.1JSP模板元素:JSP中的HTML代码,它定义了网页的结构的和外观。
2.2JSP表达式: 语法:<% =表达式或变量%> 示例:<%= new Date()%> 注意:后面不能加分号!!!
2.3 JSP脚本片段:
<%
若干java代码 注意:脚本片段的java代码严格遵循java语法,分号";"不能少!
%>
在一个jsp页面中可以由多个jsp脚本片段,在他们之间可以插入文本、图片其他JSP元素等
<%
int x = 10;
out.println(x);
//out.println(y);//error
%>
<p>这是JSP页面文本</p>
<%
int y = 20;
out.println(y);
out.println(x);
%>
多个脚本片段的代码可以相互访问。为什么?因为 JSP中java都会原封不动的翻译成.java文件,把这些语句都放在jspService()方法中,在java语法中OK的 JSP亦可。
备注:正规开发中的JSP中不应出现java脚本:标签封装
单个脚本片段可以是不完整的
如:
<%
Student s1 = new Student("1","张三");
Student s2 = new Student("2","李四");
Student s3 = new Student("3","王五");
List list =new ArrayList();
list.add(s1);
list.add(s2);
list.add(s3);
%>
<table border="1">
<tr>
<th>id</th>
<th>name</th>
</tr>
<%
for(Object o:list){
Student s = (Student)o;
%>
<tr>
<th><%= s.getId() %></th>
<th><%=s.getName() %></th>
</tr>
<% }%> -----结束在另外一个脚本片段
</table>
2.4 JSP声明
语法:
<%!
静态变量
成员变量
方法等
%>
示例:
<!-- JSP声明 (以下代码会在控制台输出OK) -->
<%!
int x=5;
public static int y=10;
public void fun()
{
System.out.print("ok");
}
%>
<% fun();%>
<%!
static
{
System.out.println("loading Servlet!");
}
private int globalVar = 0;
public void jspInit()
{
System.out.println("initializing jsp!");
}
%>
<%!
public void jspDestroy()
{
System.out.println("destroying jsp!");
}
%> //输出:loading Servlet! destroying jsp!
声明中的代码会出现在翻译后的xxx_jsp.java文件t的_jspService()外面,即为jsp对应的Servlet声明成员变量和成员方法。
注意:JSP声明中不能使用JSP提供的九个隐式对象,九个隐式对象只能在_jspService()方法中使用,即jsp脚本片段中使用是OK的
2.5 JSP注释
语法 :<%-- 注释信息--%> ---这是JSP的注释,翻译的时候会被完全忽略
在JSP脚本片段和JSP声明中可以使用 java语法中单行//和多行/**/注释也会被容器的引擎忽略掉
<!-- HTML注释 -->也可以使用,但我们可以在JSP网页的查看源文件中看到注释。
三 JSP指令
JSP指令(directive)是为JSP引擎而设计的,它们并不直接产生任何可见输出,而只是告诉引擎如何处理JSP页面中的其余部分。在JSP 2.0规范中共定义了三个指令:
page指令
Include指令
taglib指令:。。。