JSP技术

一.JSP基本元素
二.JSP隐式对象
三.EL表达式(表达式语言)
四.JSTL(Java标准标签库)

       JSP作为Java Web开发中比较重要的技术, 一般当作视图(View)的技术所使用,即用来展现页面Servlet由于其本身不适合作为表现层技术,所以一般被当作控 制器(Controller)所使用,而JavaBean作为模型(Model)层使用。这就是经典的MVC模型。

       在具体讲述JSP之前,先把JavaBean简单介绍一下。JavaBean其实就是一个Java普通类,定义了类的属性和行为(get、set方法)。在MVC设计模式当中,并没有提及数据库交互操作,其 实就是通过JavaBean实现具体的数据库操作的。至于为什么叫JavaBean,据说还有一个故事。Java之父在一次喝咖啡的时候看到桌子上的咖啡 豆,突发奇想就给起了个JavaBean的名字(Bean是豆子的意思)。

        提到MVC,顺便说一下三层(分层、多层)架构,很多人搞不清之间的关系,感觉MVC与三层架构非常相似,认为它们没有什么太大的区别。其实用一句 话概括,MVC是设计模式而三层架构是分层模型MVC包含模型-控制器-视图,注意这里没有“层”,它强调的是将开发代码分为这几个部分,通过这种模 型来实现应用程序的开发。MVC也不是Web开发的专属,其实在早期的C/S开发中已经用到了MVC设计模式。而三层架构指的是DAL(数据访问层)、 BLL(业务逻辑层)、UI(用户界面层),它强调的是程序开发的结构。理清上面的关系,利用Java语言就可以处理后台所有相关的操作,而使用JSP就可以处理前台页面所有相关的操作。


一、JSP基本元素

一个JSP包含以下基本元素:

1、html部分:就是指JSP(Java Server Pages,Java服务端页面)页面的静态部分。

2、指令:主要有如下3种指令:

    page指令(每个JSP页面都需要有,设置页面编码,导入需要jar包都需要page指令):<%@ page language="java"          import="java.util.*" pageEncoding="utf-8"%>

    taglib指令(导入JSTL或者自定义标签时使用):<%@taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>

    include指令(包含页面):<%@include file="test.jsp" %>

3、表达式:<%=方法(参数...)%>

    <%=getTime() % >   

4、脚本段(scriptlet):格式:<%...%>。比如:

< % Calendar  c  =  Calendar .getInstance(); % >   
     < %if (c.get(Calendar.AM_PM) == Calendar.AM) {% >   
        上午  
     < %} else {% >   
        下午  
     < %}% >  

5、声明格式:<%!...%> 比如:

<%!public String getTime(){  
    return new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date());  
} % >   

6、动作

使用JavaBean:<jsp:useBean id="..." class="包名.类名" scope="page"/>

获取属性:<jsp:getProperty property="Bean的属性名称" name="使用的Bean的ID" />

设置属性:<jsp:setProperty property="Bean的属性名称" name="使用的Bean的ID" value="为属性指定的显式值"/>

页面包含:<jsp:include page="test.jsp"/>

页面跳转:<jsp:forward page="test.jsp"/>

...


7、注释:分两种注释:

    a、<!--客户端可以看到的注释-->

    b、<%--客户端看不到的注释%>

       基本上上面的这7个元素,稍微复杂一点的jsp页面都会包括。这里特别提及一下,include指令和include动作的区别,两者都可以在主页 面中引入别的页面,达到嵌入页面的目的。主要区别在于include指令会影响主jsp页面的构造,对主页面定义的变量会有影响,本质上是跟主页面编译为 一个新的页面,因此页面执行效率更高。而include动作是将新的页面嵌入到主页面当中,在执行时会先加载主jsp页面,再加载include动作嵌入 的页面,执行效率比include指令低一点,但是这是更灵活的选择。实际开发中,使用include动作更多一点。


二、JSP隐式对象

隐式对象的含义就是指不需要显式new一个类的对象的对象,可以在JSP页面直接使用。主要有四类:

1、输入输出对象:request、response、out

request.getParameter("name");

request.getParameterValues("name");

response.setContentType("text/html;charset=gbk");

response.sendRedirect("url");

out.println("...");

2、作用域对象:pageContext、request、session、appplication

pageContext.getAttribute("name");

pageContext.setAttribute("name","value");

request.getAttribute("name","value");

request.setAttribute("name","value");

session.getAttribute("name");

session.setAttribute("name","value");

application.getAttribute("name");

application.setAttribute("name","value");

作用域对象的生命周期:pageContext(页面)<request(请求)<session(会话)<application(应用)。

3、Servlet对象:page、config

((HttpJspPage)page).getServletInfo();

config.getInitParameter("name");

4、错误对象:exception

exception.printStackTrace(out);


三.EL表达式(表达式语言)

       虽然能够通过表达式在JSP页面嵌入Java代码实现结果输出,但是这并不是最好的开发方式。从开发角度来讲,前台JSP页面应该不出现Java代码(Java代码应该在后台出现)。为了解决这个问题,推出了JSP表达式语言。

语法:${...} 。

举个简单点的例子:

<jsp:useBean   id = "bean"   class = "com.JspPractise.bean.City"   scope = "page" />   
  
< jsp:setProperty   property = "name"   name = "bean"   value = "测试EL" />   
  
${bean.name}   or    ${bean["name"]}  

       通过jsp的useBean动作使用了某个JavaBean,再通过setProperty动作给name属性赋值,最后通过${bean.name}或者${bean["name"]}输出:测试EL。

再比如form表单提交:

       我们可以使用<%=request.getParameter("name") %>输出结果,但是更好的方式是通过${param.name}来输出。由于该作用域为page,所以也可以通 过${pageScope.bean.name}EL隐式对象输出。从作用域从小到大排序其它还有requestScope、sessionScope、 applicationScope等各种EL隐式对象(区别于JSP隐式对象)。

此外,EL表达式还有运算功能,比如:

${10+1.0} <!-- 11.0 -->   
${90E2-120}  <!-- 8880.0 -->   
${23.8*7}  <!-- 166.6 -->   
${1/0}  <!-- Infinity  -->   
${10 div 5}  <!-- 2.0 -->   
${10%4}  <!-- 2 -->   
${10 mod 4}  <!-- 2 -->   
${10*10 eq 100}  <!-- true -->   
${'c' gt 'b'}  <!-- true -->   
${9 le 8}  <!-- false-->   

四.JSTL(Java标准标签库)

       JSTL也是JSP页面中使用的技术,这套标签库设置的目的就是在JSP页面中面对一些判断(条件标签:if)、循环(迭代标 签:foreach)、数据库操作(SQL标签库:update、param、query等)操作的时候,总不可避免的要嵌入Java代码,而使用这些标 签则让JSP页面代码“清爽”了许多。除了上面的这些标签之外,还有一些通用标签,比如:set、remove、out等。

使用JSTL,首先要使用taglib指令,导入JSTL。

<%@taglib  uri = "http://java.sun.com/jsp/jstl/core"   prefix = "c" % >   
       导入之后就可以在JSP页面中使用JSTL了。 下面用JSTL将上面的输出“上午/下午”的嵌入Java代码的例子,改用JSTL实现。
<c:set   var = "cc"   value = "<%=Calendar.getInstance().get(Calendar.AM_PM)%>"   />   
< c:set   var = "pm"   value = "<%=Calendar.PM%>"   />   
< c:set   var = "am"   value = "<%=Calendar.AM%>"   />   
< c:if   test = "${cc==am}" >   
     < c:out   value = "上午" > </ c:out >   
</ c:if >   
< c:if   test = "${cc==pm}" >   
     < c:out   value = "下午" > </ c:out >   
</ c:if >   

       除了value里面的代码是Java代码之外(这里为了简单演示没有将Java代码存放到后台代码中去),再也看不到Java的身影了,取而代之的是JSTL。
再看看foreach标签如何使用。  
  • <%  
  •     String[] colors = new String[] { "red", "green", "yellow", "black","silver" };  
  •     pageContext.setAttribute("colors", colors);  
  • %>  
  •   
  • <c:forEach var="color" items="${pageScope.colors}">  
  •     <c:if test="${color=='yellow'}">  
  •         <c:out value="${color}" />  
  •     </c:if>  
  • </c:forEach> 
       将一个String数组存放到了pageContext(JSP作用域对象)当中,然后通过JSTL结合EL表达式pageScope(EL作用域对象)取出并循环输出。

JSTL还提供了SQL标签库,由于我们开发一般都会在后台封装这部分代码,所以基本上用不着,这里也就不再演示。






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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值