day1
JSP 定义:
1)Java Server Page, Java EE 组件,本质上是 Servlet。
2)运行在 Web Container.接收 Http Request,生成 Http Response(默认协议是 Http 请求和响应)
3)JSP 使得我们能够分离页面的静态 HTML 和动态部分——我们需要的技术。
4)使页面可以混和html代码、Java代码以及JSP标签;允许访问组件
Servlet的缺陷(JSP出现的原因):
1)写静态页面必须部署后才能看到效果,很难控制页面的外观。
2)从技术角度来说Servlet是
Java代码和
HTML静态代码的混合代码。
3)从市场竞争角度来说,微软推出了ASP产品。
JSP的改进:
1)JSP是标签式的文本文件(区Servlet是Java文件)
2)JSP不需要编译(其实是由服务器监测JSP文件的变化,再将其翻译成 Servlet 代码)
服务器对其进行编译并在第一次请求时创建一个Servlet实例。所以,第一次访问JSP页面时会后延迟
3)JSP不用写配置文件
4)JSP以静态代码为主,Java代码为辅。Servlet反之。
5)是J2EE蓝图的一部分(Servlet、JSP以及EJB是J2EE的三大组件)
JSP从本质上来说内核还是Servlet,但与Servlet不是替代关系而是一种互补的关系。
JSP适合于写显示层的动态页面,而Servlet则适合写控制层的业务控制(页面转发)。
JSP往纯标签方向发展,Servlet往纯代码方向发展,他们以Servlet内核(请求响应式的工作方式)往两个方向发展。
基本语法
一、JSP的声明(statement)
用来定义在产生的类文件中的类的属性和方法(成员变量)。可声明类(即是内部类)。
由于servlet是
工作在多线程环境下,所以尽量不要在service方法体外声明成员变量。
<%!.....%> //声明时要加"!",属于类成员,最先加载,可写于任何位置;不加则是脚本的局部变量,必须调用前写。
如: <%!String hello="Hello, World!";%> //变量的声明
<%=hello%> //变量的调用
<%! private int counter=0; public int count(){ return ++counter;} %> //函数的声明
<%=count()%>
//函数的调用
声明规则:
1) JSP中声明的变量和方法对应于Servlet中的实例方法和实例变量。这些将被同时请求该页面的所有用户所共享;
2) 在使用变量或方法前须先定义(不是说声明变量的位置在页面中要处于使用变量的前面,而是指变量不声明不能使用);
3) 声明的变量或方法的作用域为当前页面或包含的页面;
4) 语句间以分号分隔。
二、JSP代码段(Scriptlet)
<% java代码 %>
是一段可以在处理请求时间执行的Java代码。可以产生输出,也可以是一些流程控制语句。
在代码段中定义的变量为service方法中的局部变量。
1._jspService()中的局部代码:
<% System.out.println("Hi,I
like JSP."); %> //在控制台打印出,网页上没显示
<% out.println("Hi,I like JSP."); %> //打印在网页上
<% Connection conn=DriverManager.getConnection(); Statement st=conn.createStatement();
String sql="select * from users"; ResultSet rs=st.executeQuery(
sql);
//……
%>
问:能否在
JSP脚本里定义方法?
答:不能! //脚本相当于方法,不能在方法里定义方法
<%!public void helloworld(){}%> //可以声明方法
<% public void helloworld(){}%> //编译出错;脚本不能定义方法
2.比较:
<%! int i=100;%> //成员变量
<% int i=101;%> //_jspService()方法中的局部变量
<%=i%> //同一文件里,局部变量优先
3.脚本小程序规则:
1) 你使用的脚本语言决定了脚本小程序的规则;
2) 语句间以分号分隔;
3) 可以使用默认的对象、import进的类、declaration声明的方法和对象以及useBean tag中声明的对象。
三、JSP表达式(expression)
<%=……%> // "="号
在JSP请求处理阶段计算他的值,表达式生成的代码是Service方法中的一个代码片断。
JSP对于声明的处理:1、计算表达式的值
2、将值转换成String
3、用out.println发送标签;把数据输出至页面的当前位置
<%="Hello,JSP world!"%> //out.println("Hello,JSP world");
<%=name%> //<%!String name="GiGi";%> out.println(name);