JSP/Servlet相关

1 简介

JSP(Java Server Page)和Servlet是JavaEE规范的两个基本成员,是JavaWeb开发的重点。

JSP的本质是Servlet,当用户向指定的Servlet发送请求时,Servlet利用输出流动态的生成HTML页面,包括每一个静态的HRML标签和所有在HTMl页面中出现的内容。

JSP页面内容由2个部分构成

  • 静态部分:标准的HTML标签、静态的页面内容。
  • 动态部分:受Java程序控制的内容,有Java脚本动态生成。

工作原理

1. JSP文件必须在JSP服务器内运行。

2. JSP文件必须生成Servlet才能执行。

3. 每个JSP页面的第一个访问者速度很慢,因为必须等JSP编译生成Servlet。

4. JSP页面的访问者无需安装任何客户端(包括Java环境),因为JSP页面输送到客户端的是标准的HTML页面。

基本语法

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脚本部分声明的变量为局部变量,不能使用publicprivate这些访问控制符修饰,也不可使用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)内属性的改变。
时间: 2024-10-25 20:50:52

JSP/Servlet相关的相关文章

SSH框架学习笔记(一)----JSP/servlet相关技术

开发自定义标签步骤: 开发自定义处理类: 继承javax.servlet.jsp.tagext.SimpleTagSupport类 如果有属性,每个属性都必须实现getter,setter方法 重写doTag方法 建立TLD文件: 文件放在WEB-INF目录下 定义<uri>标签 定义<tag>标签 <tag> <name>标签名</name> <tag-class>标签处理类</tag-class> <body-c

【Hibernate学习笔记】第二章节:JSP/Servlet及相关技术详解

JSP(Java Servr Page)和Servlet是Java EE规范的两个基本成员,他们是Java Web开发的重点知识,也是Java EE开发的基础知识.JSP和Servlet的本质是一样的,因此JSP最终必须编译成Servlet才能运行,或者说JSP只是生成Servlet的"草稿"文件.JSP的特点是在HTML页面中嵌入了Java代码片段,从而可以动态的提供页面内容. 1.Web应用和web.xml文件 JSP.Servlet.Listener和Filter等都必须运行在W

第二章.JSP/Servlet及相关技术详解

JSP的4种基本语法: 1.JSP注释: <%-- JSP注释部分 --%> 2.JSP声明: <%! //声明一个整型变量 public int count; //声明一个方法 public String info(){ return "hello"; } %> 3.输出JSP表达式: <%=count++%> 这句话代替了Java中的out.print(count++);但是注意输出表达式后面不能有分号. 4.JSP脚本: 1 <%@ pa

基于JSP+Servlet+JavaBean的图片或文件上传

基于JSP+Servlet+JavaBean的图片或文件上传 一.概述 现在不管是博客论坛还是企业办公,都离不开资源的共享.通过文件上传的方式,与大家同分享,从而达到大众间广泛的沟通和交流,我们既可以从中获得更多的知识和经验,也能通过他人的反馈达到自我改进和提升的目的. 下面我就为大家介绍 web项目中的这一上传功能,那么文件是如何从本地发送到服务器的呢?大家可以在在线视频课程进修学习<基于JSP+Servlet+JavaBean的人力资源管理系统开发>中第22课-项目开发-其它功能完善-图片

JSP/Servlet基础语法

相关学习资料 http://my.oschina.net/chape/blog/170247 http://docs.oracle.com/cd/E13222_01/wls/docs81/webapp/web_xml.html http://blog.csdn.net/liaoxiaohua1981/article/details/6761053 http://computer.c.blog.163.com/blog/static/102524482012314537670/ http://ww

Jsp&Servlet知识点

(*****)Servlet的生命周期,并说出Servlet和CGI的区别? web容器加载servlet,生命周期开始. 通过调用servlet的init()方法进行servlet的初始化. 通过调用service()方法实现,根据请求的不同调用不同的do***()方法. web容器调用servlet的destroy()方法. 与cgi的区别在于servlet处理服务器进程中,它通过多线程方式运行其service方法,一个实例可以服务于多个请求,并且其实例一般不会销毁,而CGI对每个请求都产生

Without SSH/JSP/Servlet,不走寻常路,Java可以更酷

不过此文并不是用来批判SSH(Struts.Spring.Hibernate)/JSP/Servlet的, 也不是为某品牌做广告,而是用来分享这将近一年来的研究心得. 去年圣诞节时曾在JavaEye发过一两篇文章,不过现在找不到了, 文章内容提到要在3个月左右的时间内设计出一个有别于SSH的新型MVC框架, 设计的起点最初是以JSP/Servlet为基础的,虽然在两个多月后有了个雏形, 但是跟Rails这样的框架相比还是没有明显的优势, 比如在不使用反射的情况下, 很难将不同的uri对应到Ser

JSP/Servlet Web 学习笔记 DayThree

JSP内置对象 使用JSP语法可以存取这些内置对象来执行JSP网页的Servlet环境相互作用.内置对象其实是由特定的Java类所产生的.每一种内置对象都映射到一个特定的Java类或者端口,在服务器运行时根据情况自动生成. 下表列出了所有的JSP内置对象: 对象名 描述 作用域  分类 appliction 显示相应网页是有应用程序的对象 整个应用程序执行期间 作用域通信对象:检索JSP页面的Servlet相关信息 session 保存个人信息的个人所有对象 会话期间 pageContext 提

Struts2系列:(5)与Servlet API解耦(Servlet相关对象访问)

在程序里面,讲究"高内聚,低耦合".Struts2采用MVC架构,使用Action来处理http请求并进行响应,而不使用Servlet. 但是,我们知道,Servlet的含义就是"服务器端的小应用程序",它包含了HttpServletRequest.HttpServletResponse.HttpSession和ServletContext等对象.当我们使用Struts2的Action处理Http请求时,虽然不用写Servlet,但是需要获取到Servlet相关的一