1.jsp是什么
java server page(JSP)
后缀名以.jsp结尾的页面文件.
.html文件是静态页面.
.jsp 文件是动态页面.
2.jsp页面中可以写哪些内容
1.html标签
2.css
3.javascript
4.java代码
5.EL表达式
6.jstl标签库
3.jsp是如何工作的以及jsp的特点.
1.jsp页面其实就是一个servlet。
2.jsp页面的运行需要服务器的支持。
3.服务器中的jsp引擎可以帮我们去运行jsp页面。
(注意并不是所有服务器都有这样的引擎的.引擎其实就是别人写的
支持jsp页面运行的jar包或者代码)
4.jsp页面在运行之前,要经过几个步骤:首先jsp页
面要被翻译成.java文件,然后再编译成.class文件,最后再运行
这个.class文件.(创建这个类的对象,调用指定方法_jspService
,方法中把页面里面要显示的内容用io流一行行的写给浏览器)
5.jsp翻译成的.java文件中,其实就是写了
一个servlet,在这个类中的方法里面,用io流,把jsp页面
中的内容一行一行的输出给了浏览器。因为这是在java类中的
方法里面做的事情,所有很多数据我们都可以用变量来表示,同
时也可以调用其他类中的方法.(在这里,jsp动态页面的效果也就体现出来.)
6.运行jsp页面过程中,jsp引擎帮我们去翻译或
者编译成的.java文件和.class文件都保存在了tomcat中的work目录里面。
7.通过上述jsp的特点可知,写完一个项目之后,
第一次部署运行的时候,整个项目的运行jsp速度会慢一些,因
为第一次访问运行jsp的时候,需要先翻译成.java文件然后
再编译成.class文件,最后再运行,这个过程会耗费一些时间
,但是第二访问运行的时候就会比较快了.
8.访问项目中的一个jsp页面的时候,服务器首先会检
查你所访问的这个jsp页面是否存在,如果不存在,服务器直接给你
返回404,如果存在,服务器会进一步检查有没有和这个jsp页面
对应的.class文件,如果有的话就直接运行这个.class,如果没
有的话,则先把这个jsp页面翻译成.java,然后再编译成.class
,最后再运行这个.class文件.
9.jsp页面其实就是在html页面中直接写上java代码
.但是,在一个jsp页面中,可以没有任何html的代码而只有java代
码,也可以没有任何java代码只有html的代码.
10.servlet能做的事情jsp全能做。
4.如何写一个jsp页面以及在页面中如何写java代码.
jsp页面中主要写的东西分为三部分:
1.jsp的脚本元素
1.1表达式(expression)
形式:<%= %>
例如:<%="hello" %>
<%=1+1 %>
<%=s.getName() %>
将来翻译到java文件中的位置:
_jspService方法中的
out.print(..)里面的参数.
例如上面那几个例子会翻译成
out.print("hello");
out.print(1+1);
out.print(s.getName());
所以System.out.prntln()这个方法的参数可以写什么,那么我们这个jsp页面中表达式里面就可以写什么.
注意:在jsp中的表达式里面不需要加;号。
1.2脚本(scriptlet)
形式:<% ... %>
<%
....
%>
例如:
<%
Student s = new Student();
String name = "tom";
String username = s.getName();
List<String> list = new ArrayList<String>();
list.add("hello")
%>
将来翻译到java文件中的位置:
脚本中的代码将来会被直接翻译到_jspService这个方法中.
在一个方法中我们可以写什么样的代码,那么在脚本中就可
以写什么样的代码.
注意:在脚本中所写的代码,代码的最后是要加上;号的.因为我们在一个方法里面所写的没一句代码后面都是要加;号。
在脚本声明的变量,我们是可以在表达式里面使用的,但是要注意要先声明变量再使用变量.只要查看脚本和表达式分别翻译到java文件中的位置,就可以很清楚的认识到这一点.
1.3声明(declaration)
形式:<%!
.....
%>
例如:
<%!
private String address;
public String go(){
System.out.println("hello world jd1307");
return "this is go()";
}
%>
将来翻译到java文件中的位置:
直接将声明中的代码翻译到java文件里面所定义的类中。
所以我们直接可以在一个类中写什么,就可以在声明中写什么.(一般在声明中会去定义一些类中的成员变量或者方法)
注意:这里面的代码,定义变量的时候要加;号,定义方法的时候不用加;号,这是和我们写一个java类语法是一样的。
2.jsp的指令元素
jsp的指令是给jsp引擎看的,让jsp引擎在翻译jsp页
面成java文件的时候,知道需要注意哪些地方的设置.比如页面中
的编码、页面中脚本里面所用的编程语言、翻译的java文件中需
要引入哪些其他包下的java类等等.
写法:
<%@指令名字 属性="值" .. %>
page指令
//表示当前页面中的编程语言是java,目前这个属性值只能写java
language="java"
//在当前页面中要引入哪些包下的类.
import="java.util.HashMap"
import="java.util.HashMap,java.sql.Connection"
//设置jsp页面文件保存时候所用的编码
pageEncoding="UTF-8"
//设置服务器将来使用io把jsp页面内容一行一行的输出给浏览器的时候,使用什么编码向浏览器输出.
contentType="text/html; charset=UTF-8"
//设置jsp页面被翻译成java文件的时候,java文件中的类要继承那个父类.这个属性不用设置,jsp引擎会给它一个默认的父类去继承的.
extends=""
//设置当前这个jsp页面是否支持session对象的使用.默认是支持的.
session="true"
//设置jsp页面是否是线程安全的.
isThreadSafe="true"
//如果a.jsp页面中设置了errorPage="b.jsp",那么a.jsp页面在运行的时候一旦出错,就会自动跳转到b.jsp里面.
errorPage=""
//如果一个页面中设置了isErrorPage="true",那么就表示这个页面是用来专门显示错误信息的页面.
然后在这个页面中就能够使用到隐藏对象exception来显示出错误的信息了.
isErrorPage=""
include指令
<%@include file="" %>
作用:在当前页面中使用include指令可以把另外一个页面的内容引入到当前页面。
一个页面包含/引入另外一个页面有俩种方式:静态包含 动态包含。
这个include指令就属于静态包含
静态包含特点:例如a.jsp页面中静态包含了b.jsp页面,
那么在翻译期间,jsp引擎在翻译a.jsp成为一个a_jsp.java文
件的时候,发现jsp页面中有include指令,这时候jsp引擎就会把
被包含的页面b.jsp中内容原封不动的拿到a_jsp.java中,然后用io输出出去.
taglib指令
作用:在当前jsp页面中引入一些特殊的标签
库.比如jstl标签库、struts2标签库等等.