JSP/Servlet相关
1 简介
JSP(Java Server Page)和Servlet是JavaEE规范的两个基本成员,是JavaWeb开发的重点。
JSP的本质是Servlet,当用户向指定的Servlet发送请求时,Servlet利用输出流动态的生成HTML页面,包括每一个静态的HRML标签和所有在HTMl页面中出现的内容。
JSP页面内容由2个部分构成
- 静态部分:标准的HTML标签、静态的页面内容。
- 动态部分:受Java程序控制的内容,有Java脚本动态生成。
2 工作原理
1. JSP文件必须在JSP服务器内运行。
2. JSP文件必须生成Servlet才能执行。
3. 每个JSP页面的第一个访问者速度很慢,因为必须等JSP编译生成Servlet。
4. JSP页面的访问者无需安装任何客户端(包括Java环境),因为JSP页面输送到客户端的是标准的HTML页面。
3 基本语法
JSP的基本语法与JAVA类似,以下为特殊的几个语法。
3.1 注释
<%-- JSP注释部分,生成HTML后不显示 --%> <!-- 增加JSP注释,生成HTML后显示 -->
3.2 声明部分
<%! 声明部分 %> <%-- 例子 --%> <%! public int count = 0; public String Greet() { count++; return "Hello for " + count + " times!"; } %>
该声明的部分所声明的成员变量及成员方法会转换成对于Servlet类的成员变量及成员方法。
当多次进入包含该声明部分的JSP页面时,可以发现count成员变量的值在持续改变。因为所有的客户端共享了同一个Servlet类,即共享同一个成员变量及成员方法等。这些变量及方法只有在Servlet类销毁后才不再保存。
3.3 输出表达式
<%= 表达式 %> <%-- 例子 --%> <%-- 将在页面输出3 --%>
<%= 1 + 2 %> <%-- 将在页面输出1 --%>
<%!
public int a = 1;
%> <%= a %>
3.4 JSP脚本
可以利用<%%>中包含任何可执行的java代码。并且所有可执行的Java代码都可以利用JSP脚本嵌入HTML页面之中。
<ul>
<%
for (int i = 0; i < 10; i++)
{
%>
<li><p>这是第<%= i %>行</p></li>
<%
}
%>
</ul>
需要注意的是,在JSP脚本部分声明的变量为局部变量,不能使用public,private这些访问控制符修饰,也不可使用static修饰。
3.5 JSP的3个编译指令
- page:该指令是针对当前页面的指令
- include:用于指定包含另一个页面
- taglib:用于定义和访问自定义标签
使用以上编译指令格式如下
<%@ 编译指令名 属性名="属性值" %>
3.5.1 page指令
page指令位于JSP页面代码顶端,一个JSP页面可使用多条page指令。
属性名 | 属性值 | 默认值 |
language | 声明当前JSP页面使用脚本语言的种类 | JAVA |
extends | 指定JSP页面编译所产生的JAVA类所基础的父类 | 无 |
import | 用来导入包 | 默认导入java.lang.*、javax.servlet.*、javax.servlet.jsp.*、javax.servlet.http.* |
contentType | 设定生成网页的文件格式和编码字符集 | 格式:text/html,字符集:ISO-8859-1 |
pageEncoding | 生成网页的编码字符集 | 无 |
session | 设定这个JSP页面是否需要HTTPSession | 无 |
buffer | 指定输出缓冲区的大小,可设置none | 8KB |
autoFlush | 当输出缓冲区即将溢出时,是否需要强制输出缓冲区的内容,true为正常输出,false溢出时抛出溢出 | 无 |
info | 设置该JSP程序的信息,可看作说明,调用getSerletInfo()可获取 | 无 |
errorPage | 指定错误处理页面 | 无 |
isErrorPage | 设定本JSP页面是否为错误处理程序,若该页面已是错误处理程序,则无需设置errorPage值 | 无 |
<%-- 例子 --%> <%@ page contentType="text/html; charset=utf8" language="java" errorPage=""> <%@ page import="java.util.*" %>
3.5.2 include指令
该指令可以使用在文件的任何位置。使用该指令,可以将一个外部文件嵌入到当前的JSP文件中,同时解析这个页面中的JSP语句。
include可以包含静态页面,也可以包含动态的JSP页面。
若被嵌入文件经常需要改变,则建议使用<jsp:include>,因为它是动态的包含。
<%-- 例子 --%>
<%@ include file="exampleJSP" %> <jsp:include file="exampleJSP">
3.6 JSP的7个动作指令
- jsp:forward
- jsp:param
- jsp:include
- jsp:plugin
- jsp:useBean
- jsp:setProperty
- jsp:getProperty
3.6.1 forward指令
用于将页面响应转发到另外的页面(静态、动态或者Servlet)。
<%-- 例子 --%> <%-- jsp 1.0 --%>
<jsp:forward page=""> <%-- jsp 1.1 及以上 --%>
<jsp:forward page="xxx.jsp">
<jsp:param name="xx" value="xxx" />
</jsp:forward>
该指令转发请求,但客户端的请求参数不会改变,即用户请求的地址不会改变。
3.6.2 include指令
该指令是一个动态include指令。
<%-- 例子 --%>
<jsp:inlcude page="xx.jsp" flush="true">
<jsp:param name="xxxx" value="xxx" />
</jsp:include>
flush属性用于指定输出缓存是否转移到被导入文件中。
true,则包含在其中。false,反之。
3.6.3 useBean、setProperty、getProperty
待更新
3.7 JSP脚本中的9个内置对象
待更新
4 Servlet介绍
Servlet为服务器端小程序,是运行在服务器端的程序,用于处理及响应客户端的请求。
Servlet提供不同的方法用于响应客户端请求。
- doGet:响应客户端Get请求。
- doPost:响应客户端POST请求。
- doPut:响应客户端的PUT请求。
- doDelete:响应客户端的DELETE请求。
另外两个方法。
- init(ServletConfig config):创建Servlet实例时,调用该方法的初始化Servlet资源。重写该方法时,需首先调用super.init(config)。
- destroy():销毁Servlet实例时,自动调用该方法的回收资源。
5 Filter介绍
可看作“加强版“的Servlet,主要用于对用户请求进行预处理,也可以对HttpServletResponse进行后处理。
作用:
- 在HttpServletRequest到达Servlet之前,拦截客户的HttpServletRequest。
- 根据需要检查HttpServletRequest,也可以修改HttpServletRequest头和数据。
- 在HttpServletResponse到达客户端之前,拦截HttpServletResponse。
- 根据需要检查HttpServletResponse,也可以修改HttpServletResponse头和数据。
种类:用户授权的Filter,日志Filter,负责解码的Filter,能改变XML内容的XSLT Filter等等。
三种基本方法:
- void init(FilterConfig config):用于完成初始化。
- void destroy():用于Filter销毁前,完成某些资源的回收。
- void doFilter(ServletRequest request, ServletResponse response, FilterChain chain):实现过滤功能,对每个请求及响应增加的额外处理。
5.1 Url Rewrite
利用url rewrite可实现url的伪静态。
6 Listener
常用的Web事件监听器接口:
- ServletContextListener:用于监听Web应用的启动和关闭。
- ServletContextAttributeListener:用于监听ServletContext范围(application)内属性的改变。
- ServletRequestListener:用于监听用户请求。
- ServletRequestAttributeListener:用于监听ServletRequest范围(request)内属性的改变。
- HttpSessionListener:用于监听用户session的开始和结束。
- HttpSessionAttributeListener:用于监听HttpSession范围(session)内属性的改变。
JSP/Servlet相关的更多相关文章
- jsp/servlet相关技术及知识
JSP页面的内容由两部分组成: 静态部分:标准的HTML标签.静态的页面内容, 动态部分:受Java程序控制的内容,这些都由java语言动态生成 简单的jsp页面代码: <%@ page lan ...
- 第二章.JSP/Servlet及相关技术详解
JSP的4种基本语法: 1.JSP注释: <%-- JSP注释部分 --%> 2.JSP声明: <%! //声明一个整型变量 public int count; //声明一个方法 p ...
- 基于jsp+servlet图书管理系统之后台万能模板
前奏: 刚开始接触博客园写博客,就是写写平时学的基础知识,慢慢发现大神写的博客思路很清晰,知识很丰富,非常又价值,反思自己写的,顿时感觉非常low,有相当长一段时间没有分享自己的知识.于是静下心来钻研 ...
- 从0开始学Java——JSP&Servlet——Tomcat和Apache的区别
从<JSP & Servlet 学习笔记>的第一章,了解到web容器:“Web容器是Servlet/jsp唯一认得的http服务器”. 在Java中,容器的类型有多种,这里要说的是 ...
- JSP/SERVLET入门教程--Servlet 使用入门
现在的JSP书籍有的是直接讲述JSP的使用,然后再讲解SERVERLET的使用;也有书籍是先讲述SERVERLET的使用,然后讲解JSP使用.个人认为第二种相对好一些,至于原因大家可以在学习体会到!所 ...
- JSP/Servlet基础语法
相关学习资料 http://my.oschina.net/chape/blog/170247 http://docs.oracle.com/cd/E13222_01/wls/docs81/webapp ...
- JSP&Servlet学习手册
JSP&Servlet学习手册 沙琪玛 书 目录 JSP 指令... 3 书写方式... 3 指令列表... 3 JSP 内置对象... 3 内置对象特点... 3 常用内置对象... 3 o ...
- JSP中使用的模式——JSP+Servlet+JavaBean
上一篇博文写到模式一:JSP+JavaBean 链接地址:http://wxmimperio.coding.io/?p=155 JSP中两种模式的总结 链接地址:http://wxmimperio.c ...
- Java面试题精选(三) JSP/Servlet Java面试逻辑题
-- JSP/Servlet Java面试逻辑题 -- 很显然,Servlet/JSP的WEB前端动态制作的重要性比HTML/CSS/JS的价值高很多,但我们都知道他们都是建立在HT ...
随机推荐
- bool 类型存在数据库中为 0 和 1
bool 类型存在数据库中为 0 和 1 但是在程序中应该使用 true 和 false 查询. 例如: bIsStart = 0 在数据中bIsStart为 0 sql 查询的时候,使用:sele ...
- c++ c# java 调用 c++ 写的dll
1. vs 中新建win32 dll 项目 testdll 添加实现文件 test.cpp #include "stdafx.h" #include <ios ...
- Python2.7如何安装numhttp://www.cnblogs.com/yuanzm/p/4089856.htmlpy
numpy是python一个函数库,做数据挖掘是很好的.但是一般是不带这个函数库的,所以接下来我要讲下如何安装这个函数库, 首先有一种方法是: 傻瓜式安装法:https://sourceforge.n ...
- socket选项总结(setsocketopt)
功能描述: 获取或者设置与某个套接字关联的选 项.选项可能存在于多层协议中,它们总会出现在最上面的套接字层.当操作套接字选项时,选项位于的层和选项的名称必须给出.为了操作套接字层的选项, ...
- android Activity绑定Service
activity可以绑定Service,并且可以调用Service中定义的方法 Service代码:在里面多了一个IBinder;个人理解是用来与Activity绑定的主要通道: public cla ...
- VBA 小知识
1. 循环 Dim i As Integer 'body Next 'body Wend 2. 键值数据结构 'create dictionary object Set dictMembers = C ...
- excel中的TEXT函数
TEXT 函数可将数值转换为文本,并可使用户通过使用特殊格式字符串来指定显示格式. TEXT(value, format_text) value 必需.数值.计算结果为数值的公式,或对包含数值的单元 ...
- Android之设置横屏竖屏
方案一:在AndroidManifest.xml中配置 在项目的AndroidManifest.xml中找到你所指定的activity中加上Android:screenOrientation属性,它有 ...
- XmlDocument解析Soap格式文件案例:
private static string Analysis(string strResult) { var doc = new System.Xml.XmlDocument(); //加载soap文 ...
- C/C++ 记录时间
http://stackoverflow.com/questions/2808398/easily-measure-elapsed-time https://github.com/picanumber ...