您的位置:首页 > 编程语言 > Java开发

javaWeb笔记--JSP

2012-04-05 23:26 197 查看
JSP:Java Server Pages

1.在传统的网页HTML文件中,加入java程序片段(Scriptlet)和JSP标签,就构成了JSP网页。 所有程序操作都在服务器端执行,网络上传给客户端的仅仅是得到的结果,这样大大降低了对客户浏览器的要求,即使客户浏览器端不支持Java,也可以访问JSP。

2.JSP执行流程



首先,用户对jsp发出request,然后利用服务器的JSP解析器jsp parser,会把JSP转化成一个.java文件,也就是Servlet。换句话说,JSP本源就是一个Servlet,JSP能实现的Servlet也能实现,Servlet能实现的,JSP 也能实现,他们其实是一回事,只不过写法不一样。

然后JDK 把.java文件编译成.class文件。然后执行,把response(静态的结果)返回给浏览器。 这些所有的东西都是在服务器完成的,客户端接收到的是静态的结果。

JSP最终都会转换成Servlet去执行。

3.JSP具体执行流程



如果.class已经存在就不会再去编译。当修改了JSP 就会重新编译。

4.JSP源代码包含了JSP元素和Template(模版) Data两类

Template Data是指JSP引擎(例如Tomcat)不处理的部分,也就是不处理的部分,写什么就显示什么。

JSP元素也就是java小脚本,标记为<% %>。

****************************************************************************************

JSP 语法分为三种不同的类型:

(1)编译器指令 例如<%@ page import="java.io.*"%>

(2)脚本语法:java小脚本,不是指JavaScript

(3)动作语法:例如<jsp:forward> <jsp:getProperty> <jsp:include>

脚本语法:

HTML注释:<!-- -->

HTML的注释会执行注释的内容,发送到客户端

<!-- new java.util.Date() --> 注释的内容就是 new java.util.Date()

<!-- <%= new java.util.Date() %> --> 注释的内容是 当前的系统时间

隐藏注释(JSP注释)<%-- --%>

JSP注释不会发送到客户端

声明 <%!声明;%>

<%! int a=3; %> (声明)(用的比较少,因为web是要多用户使用的)

<% int b = 3 %> (脚本段)

<%= a-- %>

<%= b-- %>

每次刷新a的值都会减一,但是b不会,b一直是3.

声明的变量,在jsp转换成servlet的代码中,是成员变量,而脚本段中的是 局部变 量,servlet又是单实例的,这样成员变量的值只有一个,互不影响。而局部变量每个用户访问时各有一份。访问一次,调用service方法,a的值减一,b的值也减一,当方法结束的时候,局部变量消失。 所以下一次刷新的时候a的值一直减小,b的值每次都是重新定义的3.

表达式 <%=表达式 %>

脚本段 <% 代码 %>

编译器指令:(常用page和include)

包含指令<%@ include file=" "%>

Page指令,用于定义JSP文件中的全局属性,作用于整个JSP页面,同样包括静态的包含文件。 无论把page指令放在页面的哪个位置作用范围都是整个页面。

属性:language="java"

import="{package.class} "

java.lang.* javax.servlet.* javax.servlet.jsp.* javax.servlet.http.*这几个包在JSP 编 译时已经指定,不需要再导入。

taglib指令 <%@ taglib %>(标签库)

动作语法:

<jsp:forward>用于转向页面,在该指令后面的所有代码都没有机会执行了,因为页面的流程已经转向了另外一个页面了。

<jsp:forward page = "forwardTo.jsp ">

<jsp:param name="username" value="risl" />

</jsp:forward>

<jsp:include> 包含一个静态或动态文件,可以向被包含的页面里传参数。

*******************************************************************************************

JSP的内置对象:

内置对象就是服务器帮我们创建好的实例对象,可以直接使用,不用初始化之类的。

request 请求对象 javax.servlet.ServletRequest的子类

response 响应对象

pageContext 页面上下文对象

session 会话对象 javax.servlet.http.HttpSession的子类。

application 应用程序对象 javax.servlet.ServletContext的子类

out 输出对象

config 配置对象

page 页面对象

exception 异常对象

out.println()的换行是指源代码的换行,<br>是指页面上的换行。

request对象代表的是来自客户端的请求,例如哦我们在FORM表单中填写的信息。最常用的是getParameter(),getParameterNames()返回一个枚举(Enumeration),getParameterValues()返回一个String[]

getParameter 方法是getParameterValues方法的特例,表示请求参数只有一个,如果请求参数有多个,请使用getParameterValues方法。在多选框的情况下,需要使用getParameterValues方法来获取用户所选择的多个复选框的值。

resopnse对象代表的是对客户端的响应,也就是说可以通过response对象来组织发送到客户端的数据。但是由于组织方式比较底层,所以不建议普通读者使用,需要向客户端发送文字时直接使用out 对象即可。

pageContext对象直译时可以称作"页面上下文"对象,代表的是当前页面运行的一些属性,常用的方法包括findAttribute,getAttribute等方法。一般Servlet容器会使用该对象,用到的也不是很多。

session 对象代表服务器与客户端所建立的对话,当需要在不同的JSP页面中保留客户信息的情况下使用,比如在购物,客户轨迹跟踪等。 HTTP是无状态的协议,Web Server对每一个客户端都没有历史记忆,session是用来保存客户端的状态信息。session可以突破HTTP的无状态协议。常用的方法有setAttribute和getAttribute。

application对象负责提供应用程序在服务器中运行时的一些全局信息,常用的方法有getMineType和getRealPath等。

out对象代表了向客户端发送数据的对象,与response不同的是,通过out对象发送的内容将是浏览器需要显示的内容,是文本一级的,可以通过out对象直接向可短短写一个由程序动态生成HTML文件。常用的方法除了print和println之外,还包括clear,clearBuffer,flush,getBufferSize等,这是因为out对象内部包含了一个缓冲区。

config对象提供了一些配置信息,常用的方法有getInitParameter和getInitParameterNames以获得Servlet初始化时的参数。

page对象代表了正在运行的由JSP文件产生的类对象,不建议一般读者使用。

exception 对象则代表了JSP文件运行时所产生的异常对象,比对象不能在一般JSP文件中直接使用,而只能在使用了<%@ page isErrorPage="true" %>的JSP文件中使用。

***********************************************************************************

三种最重要的内置对象:

request请求对象:

1.getAttribute 与 getParameter的区别

getAttribute原型:public java.lang.Object getAttribute(java.lang.String name)以对象的形式返回特定名称的属性值。这个方法允许Servlet引擎给出一个客户请求的特定信息。

getAttribute总是获取服务器端设置的内容,跟客户端没有关系。与setAttribute一般是成对出现的。首先setAttribute设置属性与属性值,然后通过getAttribute方法获取属性值(获取到之后一般都要进行向下类型转换,将这个属性值转换为他真正的对象),这两个方法都是在服务器端内部执行的。

getParameter获取客户端的请求参数,是客户端与服务器端之间的交互。服务器端想要获取客户端发送过来的数据就要使用getParameter方法来获取。并没有setParameter方法。

3.request对象内数据的存活范围就是在request对象的存活范围内,当客户端向福务器端发送一个请求,服务器向客户端返回一个响应后,该请求对象就被销毁了;之后再向服务器端发送新的请求时,服务器会创建新的request对象,该request对象与之前的request对象没有任何关系,因此也无法获得在之前request对象中存放的任何数据。

4.session对象内数据的存活范围也就是session对象的存活范围(现在可以简单理解成,只要浏览器不关闭,session就会一直存在,其实这是不正确的)因此在同一个浏览器窗口中,无论向服务器端发送多少个请求,session对象只有一个。

5.application(应用对象):存活范围最大的对象,只要服务器没有关闭,application对象中的数据就会一直存在。在整个服务器运行过程当中,application对象只有一个。

6.request,session以及application这三个对象的范围是逐个增加的:request只有一个请求的范围内:request只在一个请求的范围内,session是在浏览器窗口内(不是很准确),application则是在整个服务器的运行过程中。

getRealPath()方法会返回资源在服务器上的绝对路径

application.getRealPath();
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: