JSP学习笔记

 JSP 技术是SERVLET技术的延伸
***************************************************************************************************
1、什么是JSP
JSP: Java Server Page, Java EE组件,运行在Web Container.接收Http Request,
生成Http Response

Jsp文件的组成--->html+jsp脚本元素

Jsp使用的2个阶段:
编译阶段
请求处理阶段

当接收到第一次请求时,WEB容器会将JSP编译成SERVLET并载入到WEB服务器中,如果JSP没有改变,WEB容器在运行时不会再对其编译

转换成SERVLET时要继承org.apache.jasper.runtime.HttpJspBase和实现javax.servlet.jsp.HttpJspPage接口

***************************************************************************************************
基本语法(声明、脚本、表达式、指令、动作)

a.Jsp声明  <%!  %>
声明类成员
<%!int i=9;%>
<%!String word="Hello, Jsp World!";%>
<%!public void hello(){}%>


b.Jsp脚本  <%  %>
_jspService()中的局部代码
<%System.out.println("abc");%>
<%Connection con=DriverManager.getConnection();
  Statement st=con.createStatement();
  String sql="select ...";
  ResultSet rs=st.executeQuery(sql);
%>

<%!int i=99;%>
<%int k=88;%>

<%!public void hello(){}%>
<%public void hello(){}%>  error


c、表达式  <%=  %>
输出数据至页面的当前位置
<%="Hello"%>
<%=name%>
<%=new java.util.Date()%>
<%=ps.executeUpdate(sql)%>

 

d、指令   <%@  %>
page   
include
taglib

page指令---->import,session,isThreadSafe,errorPage,etc

import--->导入其它的包或类
<%@page import="java.util.Date"%>
<%@page import="java.sql.*"%>
<%@page import="java.util.*,java.io.*,java.net.*"%>
<%@page import="java.util.Date" import="java.sql.Connection"%>

session--->当前Jsp是否参与会话  default--->true
<%@page session="true"%>  request.getSession();
<%@page session="false"%>
session="true"时,可用内建对象session直接访问会话
<%=session.getAttribute("name")%>

isThreadSafe--->当前Jsp页面是否线程安全 default--->true
<%@page isThreadSafe="true"%>  普通的Servlet,可以并发处理用户请求
<%@page isThreadSafe="false"%>  相当于Servlet实现了SingleThreadModel
接口,不能并发处理请求

errorPage
isErrorPage--->Jsp页面中出现异常的处理方式
对于有可能出现异常的页面
<%@page errorPage="error.jsp"%>

对于处理异常的页面
<%@page isErrorPage="true"%>

contentType--->设置Jsp内容的MIME类型
<%@page contentType="text/html; charset=gbk"%>
Servlet:  response.setContentType("text/html; charset=gbk");

include指令--->file
把目标页面的内容包含到当前页面,产生页面叠加以后的输出效果
<%@include file="title.html"%>
<%@include file="booter.jsp"%>

在Jsp编译的时候被处理

taglib指令--->uri prefix
Custom tag

e.动作 (动作在运行期处理)  <jsp:actionName attributeName=attributeValue/>
jsp:forward
jsp:include
jsp:useBean
jsp:setProperty
jsp:getProperty

<jsp:forward page=""/>
a.jsp b.jsp
<jsp:forward page="b.jsp"/>相当于Servlet中通过RequestDispatcher.forward()

<jsp:include page=""/>
<jsp:include page="b.jsp"/>相当于Servlet中通过RequestDispatcher.include()

 

Jsp中的注释:
1、java comments   编译器会忽略掉此类注释中的内容
<%--ur comments--%>
<%//ur comments%>
<%/*ur comments*/%>
<%//new java.util.Date()%>

2、html comments   编译器会执行此类注释中的代码
<!--ur comments-->
out.println("<!--ur comments-->")
<!--new java.util.Date()-->

***************************************************************************************************
Jsp调用JavaBean,把业务工作留给后台,减少Jsp页面中的脚本代码,便于整个应用的
维护和复用.
Java Bean对于 boolean类型的属性,应该使用is/set命名方式(也可以使用get/set命名方式)


jsp:useBean--->在Jsp页面中使用一个JavaBean
<jsp:useBean id="" class="" scope=""/>
id:javaBean对象名(在特定范围内的属性名session.getAttribute("**"))
class:bean class的位置
scope:javaBean对象的共享范围(page,request,session,application)

page---------->当前页面范围
request------->同一个请求范围  forward,include
session------->同一个会话
application--->同一个应用   ServletContext


<jsp:useBean id="abc" class="com.User" scope="session"/>
<%=abc.getName();%>

jsp:setProperty---->对JavaBean的属性赋值

1、<jsp:setProperty name="" property="" value=""/>
name:JavaBean对象名
property:JavaBean属性名
value:属性值

<jsp:setProperty name="abc" property="name" value="Tom"/>
<==>   abc.setName("Tom");


2、<jsp:setProperty name="" property="" param=""/>
param:对应着request中输入域的名

------------------------------------------------------------------------------
例:
<form>
 name:<input type="text" name="myName"/>
 ...
</form>

package com;
public class User implements java.io.Serializable{
private String name;
public void setName(String name){this.name=name}
public void getName(){return name;}
}

<jsp:setProperty name="abc" property="name"  param="myName"/>
-----------------------------------------------------------------------------

3、<jsp:setProperty name="" property="*"/>
-----------------------------------------------------
<form>
 name:<input type="text" name="name"/>
 age:<input type="text" name="age"/>
 gender:<input type="text" name="gender"/>
</form>

package com;
public class User implements java.io.Serializable{
private String name;
public void setName(String name){this.name=name}
public void getName(){return name;}
private int age;
...
}

<jsp:setProperty name="abc" property="*"/>

jsp:getProperty
<jsp:getProperty name="" property=""/>
<jsp:getProperty name="abc" property="name"/> <%=abc.getName()%>
------------------------------------------------------------------------

一定要为JavaBean指定一个包,否则JSP无法调用JavaBean

***************************************************************************************************
JSP中的异常处理
1、try/catch/finally/throws/throw

2、errorPage, isErrorPage
<%@page errorPage="error.jsp"%>  hello.jsp

<%@page isErrorPage="true"%>   error.jsp
<%=exception%>
产生内建对象exception,可通过它获得异常信息

3、声明的方式处理异常
web.xml
  <error-page>
    <exception-type>java.lang.ArithmeticException</exception-type>
    <location>/MathError.jsp</location>
  </error-page>

  <error-page>
    <error-code>404</error-code>
    <location>/404.jsp</location>
  </error-page>

java中的RuntimeException及其子类是不需要处理的(try/catch),因为所有的
RuntimeException总是可以通过优化代码来避免


***************************************************************************************************
JSP中的隐含对象

隐含对像是在_jspService()方法中定义的,所以只能在脚本段和表达式中使用

// JspWriter out                  -- to write to the browser,不需要显式地调用close方法,由JSP容器自动生成
// HttpServletRequest  request    -- the request object.
// HttpServletResponse response   -- the response object.
// PageContext pageContext        -- the page context for this JSP
// HttpSession session            -- the session object for the client (if any)
// ServletContext application     -- The servlet (application) context
// ServletConfig config           -- The ServletConfig for this JSP
// Object page                    -- the instance of this page's implementation class (i.e., 'this')
// exception   <%@page isErrorPage="true"%>


欢迎文件
缺省情况下,一个Web App中的index.html,index.htm,index.jsp可作为默认的欢迎
文件.当用户请求没有指明要访问的资源时,Web Container会用欢迎文件响应客户端
请求.
手工设置欢迎文件
web.xml
  <welcome-file-list>
    <welcome-file>/welcome.jsp</welcome-file>
    <welcome-file>/test.jsp</welcome-file>
    <welcome-file>/end.jsp</welcome-file>
  </welcome-file-list>


***************************************************************************************************
EL(表达式语言)JSP2.0的新特性

所有的EL表达式都是以“${”开始,以“}”结束

<%=  %> -------> ${}
<%=name%> -------> ${name}

1、syntax

2、变量和JavaBean属性数据输出
表达式语言输出变量,是到范围对象(pageContext,request,session,
application)中查找相应属性。而非直接在页面中查找实例或局部变量.

表达式语言查找变量的顺序是 pageContext ---> request ---> session --->
application,所有范围都未找到时,赋值null

empty --> 判断一个变量是否为null或是否包含有效数据
if(name==null)
String name="";
if(name.equals(""))

${empty name}  返回true  or  false


[]----->输出对象属性值,输出数组或集合中对应索引值
. ----->输出对象属性值
${user1["name"]}  <==> ${user1['name']} <==> ${user1.name}

[] 和. 的区别:
对于包含连字符(-)或其它一些特殊字符的字符串只能用[]操作符,不能用.操作符


  List list = new ArrayList();
  list.add("summer");
  list.add(new Integer(87));
  session.setAttribute("list", list);

${list[0]}

3、内建对象(11个)
el提供了自己的一套内建对象,方便在页面内对各种常用数据信息的访问.
 pageContext
 pageScope
 requestScope
 sessionScope
 applicationScope
 param      request.getParameter()
 paramValues
 header      request.getHeader()
 headerValues
 cookie      request.getCookies()
 initParam

http://localhost:8080/elWeb/testEL.jsp?name=Kim&name=Joe

<%@page isELIgnored="false"%> ---> default:false
${name}

4.操作符
+  -  *  /(div)  %(mod)
==(eq)  !=(ne)  <(lt)  >(gt)  <=(le)  >=(ge)
&&(and)  ||(or)  !(not)
?:  ()  empty

5.函数
EL中,允许定义和使用函数
ns:func(a1,a2…an)
其中前缀ns必须匹配包含了函数的标签库前缀(类名),func是函数的名字,a1,a2是函数的参数

${fn:toGBK(str,"GBK")}

***************************************************************************************************
JSTL(JSP标准标签库)

jstl.jar        ----->包含JSTL规范中定义的接口和相关的类
standard.jar    ----->包含Jalarta小组对JSTL的实现和JSTL中5个标签库的TLD文件
使用JSTL要把这两个JAR包复制到%CATALINA_HOME%/common/lib目录下或%CATALINA_HOME%/shared/lib

JSTL的目标是为了简化JSP页面的设计

JSTL由5个不同功能的标签库组成
core (一般用途标签、条件标签、跌代标签、URL相关的标签)
一般用途标签:
<c:out>              ----->用于计算一个表达式并将结果输出到当前的JspWriter对象
<c:set>              ----->用于设置范围变量的值或JavaBean对象的值
<c:remove>      ----->移除范围变量
<c:catch>      ----->用于捕获在其中嵌套的操作所抛出的异常对象,并将异常对象信息保存到变量中
             把可能抛异常的代码放到<c:catch></c:catch>标签对中
条件标签
<c:if>               ----->用于实现JAVA语句中的IF语句功能
<c:choose>           -----><c:if>的子标签,要和<c:if>一起使用,类似JAVA的 if else
<c:when>             -----><c:choose>的子标签,要和<c:choose>一起使用,表示一个可选的条件,类似JAVA的 if else
<c:otherwise>        -----><c:choose>的子标签,要和<c:choose>一起使用,表示最后的选择,类似JAVA的 if else

迭代标签
<c:forEach>          ----->用于对包含了多个对象的集合进行迭代,重复执行它的标签体,或者重复迭代固定的次数
<c:forTokens>        ----->用于迭代字符串中由分隔符分隔的各成员

URL相关的标签
<c:import>           ----->用于导入一个基于URL的资源,可以是不同应用中的,甚至可以是其他网站的
<c:url>              ----->使用正确的URL重写规则构造一个URL
<c:redirect>         ----->将客户端的请求重定向到另一个资源
<c:param>            ----->为一个URL添加请求参数


I18N(国际化标签、格式化标签)
国际化标签
<fmt:setLocale>          ----->用于设定用户本地语言环境,并将指定的Locale保存到javax.servlet.jsp.jstl.fmt.locale环境变量中
<fmt:bundle>             ----->用于创建它的标签体使用的I18N本地上下文环境
<fmt:setBundle>          ----->用于创建一个I18N本地上下文环境,并将它保存到范围变量中或保存到javax.servlet.jsp.jstl.localizationContext配置变量中
<fmt:message>            ----->从资源包中查找一个指定的值,用于显示本地化的消息
<fmt:patam>              ----->提供一个参数,用于<fmt:message>中的参数置换
<fmt:requestEncoding>    ----->设置请求的字符编码

格式化标签
<fmt:timeZone>           ----->用于指定时区,其标签体的时间信息就按照这个时区进行格式化或解析
<fmt:setTimeZone>        ----->用于指定时区,并将它保存到范围变量中,或保存到javax.servlet.jsp.jstl.fmt.timeZone配置变量中
<fmt:formatNumber>       ----->按照区域或定制的方式将数字的值格式化为数字、货币或百分数
<fmt:parseNumber>        ----->用于将已经格式化后的字符串形式的数字、货币和百分数转换为数字类型
<fmt:formatDate>         ----->按照区域或定制的方式对日期和时间进行格式化
<fmt:parseDate>          ----->用于将已经格式化后的字符串形式的日期和时间转换成日期类型


SQL
<sql:setDataSource>      ----->用于设置数据源
<sql:query>   ----->用于对数据库进行查询
<slq:param>   ----->用于设置SQL语句中标记为?的参数值,类似于PreparedStatement的setXXX(),是<sql:query>和<sql:update>的子标签
<sql:dateParam>   ----->用java.util.Date类型值设置SQL语句中标签为?的参数,是<sql:query>和<sql:update>的子标签
<sql:update>   ----->用于执行inser、update、delete语句,还可以执行SQL  DDL语句
<sql:transaction>  ----->用于为<sql:query>和<sql:update>子标签建立事务处理上下文


XML(XML核心操作、XML流程控制操作、XML转换操作)
如果需要配置Xalan处理器,将xalan,jar复制到%CATALINA_HOME%/shared/lib目录下即可

XML核心操作
<x:parse>           ----->用于解析XML文档
<x:out>             ----->计算一个XPath表达式,并将结果输出到当前的JspWirter对象,类似〈%=%〉 or <c:out>
<x:set>             ----->计算一个XPath表达式,并将计算的结果保存到一个范围变量中

XML流程控制操作(类似于Core标签库中的流程控制,不同的是,XML流程控制操作应用的是XPath表达式)
<x:if>
<x:choose>
<x:when>
<x:therwise>
<x:forEach>

XML转换操作
<x:transform>       ----->使指定的XSLT样式表转换XML文档
<x:param>           ----->设置转换的参数,在<x:transform>中嵌套使用


Funcions
fn:contains      ----->判断一个字符串是否还包含了指定的子串
fn:containslgnoreCase   ------>判断一个字符串是否包含了指定的子串,忽略大小写
fn:startsWith           ------>判断一个字符串是否以指定的前缀字符串开头
fn:endWith              ------>判断一个字符串是否以指定的后缀字符串结尾
fn:indexOf              ------>在一个字符串中查找子串,并返回最先匹配的字符串的第一个字符的索引
fn:replace              ------>将一个字符串中的某一部分替代另外的字符串,并返回替换都的结果
fn:substring            ------>截取字符串中的某一部分
fn:substringBefore      ------>返回一个字符串中指定子串之前的字符串
fn:substringAfter       ------>返回一个字符串中指定子串之后的字符串
fn:split                ------>将一个字符串拆分为字符串数组
fn:join                 ------>将数组中所有的元素连接为一个字符串
fn:toLowerCase          ------>将字符串中所有的字符都转换成小写字符
fn:toUpperCase          ------>将字符串中所有的字符都转换成大写字符
fn:trim                 ------>去掉字符串前后的空白符
fn:escapeXml            ------>将字符串的字符“〈”、“〉”、“`”,“"”、“&”转换成相对应的字符引用或预定义实体引用
fn:length               ------>返回集合中元素的数目,或者字符串中字符的数目


<jsp:useBean />
<jsp:setProperty />
<jsp:forward />
<tom:hello name="Jack"/> ----->  Custom Tag


如何使用JSTL
1、复制jstl的jar包(jstl.jar,standard.jar)到/WEB-INF/lib
2、在使用jstl功能的jsp页面中增加指令
<%@taglib prefix=“c” uri=“http://java.sun.com/jsp/jstl/core” %>
<%@taglib prefix=“x” uri=“http://java.sun.com/jsp/jstl/xml”%>
<%@taglib prefix=“fmt” uri=“http://java.sun.com/jsp/jstl/fmt>
<%@taglib prefix=“sql” uri=“http://java.sun.com/jsp/jstl/sql”%>
<%@taglib prefix=“fn”uri=“http://java.sun.com/jsp/jstl/functions”%>


String name=request.getParameter("name");
session.setAttribute("name",name)

name:<%=(String)session.getAttribute("name")%>


原型模型

con.setAutoCommit(false);

在WEB开发中,结合JSTL和EL,可以简化WEB程序的开发。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值