web编程jsp总结

为什么要使用JSP

    Servlet存在以下缺陷:

    1.Servlet的编码、部署和调试任务繁琐

    2.生成动态网页繁琐,不利于项目分工

    可以使用JSP来弥补Servlet的这些缺陷

 

什么是JSP

    JSP(Java Server Pages),是由HTML语句和嵌套在其中的Java代码组成的一个普通文本文件,其扩展名为.jsp。使用jsp技术编写的页面为动态页面

    JSP通常用于简化创建产生文本的Servlet,而Servlet更适合于发送原生字节到客户端或需要用Java源代码完全控制源代码的场合。二者可以很好的分开

 

JSP引擎

    容器厂商定义的一个类,用于帮助我们翻译JSP文件,如:org.apache.jasper.servlet.JspServlet

    Ps:所有的JSP翻译后的类都必须实现HttpJspPage接口,而HttpJspPage接口是Servlet的子接口,所以从这个意义上来说,JSP的本质是Servlet

 

JSP生命周期

    1. Web容器第一次接收到对某个JSP页面的请求后,首先自动将该JSP页面翻译为Servlet代码

    2. Web容器负责将Servlet代码编译为字节码。与源文件放在同一个目录下

    3. Web容器装载新生成的servlet类

    4. Web容器创建servlet实例

    5. Web容器调用Servlet示例的jspInit()方法,JSP页面装载资源

    6. 容器创建一个新线程来处理这个客户的请求 ,servlet对象的_jspService()方法运行

    7. 容器调用生成的servlet对象的jspDestroy()方法,销毁装载的资源

 

JSP隐式对象

    实质上就是翻译后的Servlet中的局部变量,一共有9个,其中

    属于作用域范畴的有4个:

    pageContext – 代表pageContext对象,只在当前页面有效 

    request – 代表HttpServletRequest对象,在一次请求中有效

    session – 代表HttpSession对象,在一次会话中有效

    application – 代表ServletContext对象,在整个web应用中有效

    属于输出范畴的有2个

    response -- 代表与响应相关的HttpServletResponse对象

    out -- 代表与响应输出流相关的JspWriter对象,可输出字符流

    其它有3个

    config – 代表ServletConfig,用于配置servlet对象

    page – 当前jsp对象,相当于this

    exception – 代表Throwable对象,只能在JSP错误页面中使用

脚本元素

    声明  <%! 声明内容 %>

    – 主要用于定义,可以定义全局变量、静态变量和方法

    脚本  <% Java程序代码 %>

    – 书写Java代码,丰富_jspService()方法

    表达式  <%= 脚本表达式%>

    – 等价于out.print(“脚本表达式”)

注释

    JSP注释   <%--  注释内容 --%>

    – 在服务器端翻译后的代码中和客户端均不可见,安全性高

    Html注释  <!--  注释内容 -->

    – 在服务器端翻译后的代码中和客户端均可见

    Java注释   //

    – 在服务器端翻译后的代码中可见,客户端不可见

 

JSP指令

    JSP指令用于提供整个JSP页面的相关信息,用于JSP页面与容器之间的通信,有三种类型的指令

    Page指令

    <%@ page attribute1=”value1” attribute2=”value2” %>

    -- 用于设定整个JSP页面的属性和相关功能,page指令共有11个属性,较常用的有:

    contentType:设定MIME类型和JSP编码

    import:在JSP中引入Java的包和类,多个包之间以逗号隔开

    session:指定当前页面是否能获得当前用户的session对象

    errorPage:如果当前页面发生异常,网页会重定向到errorPage所指定的页面进行处理

    isErrorPage:允许指定的JSP页面为错误处理页面

include指令

    表示在JSP编译时插入一个包含文件或者代码的文件,是一种静态包含

    <%@ include file="relativeURL" %>

    Ps:1)include指令所包含的文件名不能是一个变量url,只能是静态的文件名。

        2)在被包含页面中,一般不包含<html><body>标记,两个页面之间不能存在相同的局部变量

 

    taglib指令

    让用户能够自定义标签

    <%@ taglib prefix="tagprefix" uri="url" %>

JSP标准动作

    <jsp:include>动作

    实现一种动态包含,把显示的结果插入到当前页面来显示

    <jsp:include page="localURL" flush="true"/>

    page:表示一个相对路径

    flush:必需属性,且只能为真,表示当缓冲区满时会自动清空

    Ps:静态包含与动态包含的区别:

    1)静态包含是文件原样的拷贝,所以在被包含页面中,一般不包含<html>和<body>标记,两个页面之间不能存在相同的局部变量;动态包含包含的是结果,在两个页面之间,可以存在相同的变量

    2)静态包含在编译时发生,只能包含文件;动态包含在请求时发生,可包含JSP及Servlet请求的url

    <jsp:forward>动作

    相当于内部转发

    <jsp:forward page="relativeURL">

EL表达式

    EL(expression_r_r Language) -- 表达式语言

语法:${...}

EL的主要目标是从JSP页面中消除Java代码,因此,EL表达式不能在脚本中定义变量。

EL表达式隐式变量:

 

 

类别

隐式变量名

描述

JSP pageContext 用来访问JSP的隐式对象
作用域 pageScope 与page作用域属性的名称和值相关联的Map类
requestScope 与request作用域属性的名称和值相关联的Map类
sessionScope 与session作用域属性的名称和值相关联的Map类
applicationScope 与application作用域属性的名称和值相关联的Map类
请求参数 param 包含请求参数字符串的Map类
paramValues 包含请求参数字符串数组(String[])的Map类
请求头 header 包含请求头字符串的Map类
headerValues 包含请求头字符串数组(String[])的Map类
Cookie cookie 按名称存储请求附带的Cookie的Map类

 

自定义标签

    1.新建一个类继承BodyTagSupport类,BodyTagSupport类实现了Tag接口,重写需要实现的方法,一般是doEndTag()

    2.在WEB-INF下面新建一个.tld文件,完成注册 

    <?xml version="1.0" encoding="UTF-8"?>
    <taglib>
      <tlib-version>1.0</tlib-version>
      <jsp-version>1.2</jsp-version>
      <uri>http://www.baidu.com</uri>
      <tag>
        <name>tagTast</name>
        <tag-class>com.lovo.MyTag</tag-class> 

      </tag>
    </taglib>

    3.在jsp页面添加taglib指令

    <%@ taglib prefix="my" uri="com.lovo.MyTag">

    4.在jsp页面使用自定义标签

 

为自定义标签设置属性

 

    1.定义属性,并且生成get和set方法

    2.在tld文件里<tag>标签内注册

    <attribute>
      <name>属性名<name>
      <required>true</required>
    </attribute>

    3.在jsp页面里面设置标签属性的值 

标准标记库JSTL:

    需要两个Jar文件:jstl.jar、standard.jar;构建成功后须在JSP中添加如下指令;
    < %@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>

    常用标记:

    <c:if>  -- 判断 

    <c:forEach>  -- 循环

 

 

在JSP中使用JavaBean:

 

1、<jsp:useBean>动作

语法:<jsp:useBean id="beanName" scope="page|request|session|applicaion"  class="className">

id -- 对象的属性名

scope -- 作用域

class -- 类的全路径名。

  

2、<jsp:getProperty>动作

  语法:<jsp:getProperty name="beanName" property="propertyName">

  name -- 对应<jsp:useBean>里的id。

  property -- 要获取的属性名

 

3、<jsp:setProperty>动作

   语法:<jsp:setProperty name="beanName" property="属性名">

         <jsp:setProperty name="beanName" property="属性名" param="参数名">

         <jsp:setProperty name="beanName" property="属性名" value="属性值"> //获取请求参数

         <jsp:setProperty name="beanName" property="*">

 

你可能感兴趣的:(编程,Web,jsp,servlet,脚本)