JSP回顾

  • JSP指令

    • page指令
    • include指令
  • JSP声明
  • java程序片段
  • java表达式
  • 隐含对象
  • JSP的请求转发
  • 包含
    • 静态包含
    • 动态包含
  • PageContext抽象类
  • JSP访问javabean
    • javabean
    • 基本语法
  • EL表达式
    • 基本语法
    • 隐含对象
    • 命名变量
  • 定义和使用EL函数
  • 自定义JSP标签
  • JspTag接口
  • JSP CORE库(JSTL)
  • 一般用途的标签
    • <c:out>标签
    • <c:set>标签
  • 条件标签<c:if|choose|when|otherwise>
    • <c:if>
    • choose when otherwise标签
  • 迭代标签
    • <c:forEach>标签
    • <c:forTokens>标签
  • form表单的格式

?

servlet源文件就是 .java

jsp文件可以包含:

* html

* JSP指令

* JSP声明

* java程序片段

* java表达式

* JSP隐含对象

JSP指令

<%@ 指令名 属性=”值“ %>

常见三个指令 page include taglib(比较多,后面写)

page指令

?

?

include指令

<%@ include file = "url" %>

JSP声明

<%! %>用于声明与JSP对应的servlet的变量和方法

<%! int v =0 %>
<%!
public String method(int i)
{
}
%>

java程序片段

<% %> 嵌入任何有效的java代码,成为Scriptlet.如果在page指令中没有声明方法,那默认这段为JSP对应的servlet的service()中的代码块。

java表达式

<%= %> 将表达式的值输出到网页。int或者float会转换成字符串在输出

<html>
<head><title>hitCounter</title></head>
<body>
   <H1>
   You hit the page:
   <%! int hitcount=1;%>
   <%
     int count=0;
     hitcount=count++;
   %>
   <%=hitcount++ %>

   times
   </H1>
</body></html>

上述输出始终为 0 times

在<%! %> JSP声明中定义的变量为实例变量,程序片段<%%>中定义则为局部变量。

隐含对象

servletcontext servletrequest servletresponse等对象,在JSP中称为隐含对象,每个对象都被固定的引用变量引用。JSP不需要声明,可以直接使用。

?

<%String username = request.getParameter("username")%> 获取请求参数

<%= username %> 打印参数值

JSP的请求转发

<jsp:forward page="target.jsp">
<jsp:param name="username" value="TOm">
</jsp:forward>

在taget.jsp中可以使用request.getParameter("username")获得参数值。

包含

上面写过包含指令:<%@ include file="URL">

包含标签:<jsp:include page="URL">

指令用于静态包含,标签用于动态包含。源组件和目标组件都共享请求范围内的共享数据。

静态包含

遇到<%@ include file="URL"> 时,把代码融合到源组件中,然后翻译成servlet,在编译执行。两个对应同一个servlet 就可以共享局部变量数据。

所以静态包含目标组件只能是HTML和JSP,不能是servlet。

动态包含

两个对应不同的servlet 不能共享局部变量,但是请求范围的数据是可以共享的。

目标组件可以是HTML,JSP,servlet

还有一个flush属性,如果为true意味着在包含目标组件前就会把响应结果先发给客户。

PageContext抽象类

主要应用场合:

*JSP文件中的java程序片段

*JSP文件中自定义标签的处理类

PageContext类中的方法:

*用于向各种范围内存取属性

*用于获得由容器提供的其他对象的引用的方法

*用于请求转发和包含的方法

JSP访问javabean

javabean

表示业务数据,粗暴就是实体类。

是一个public的类

有一个不带参数的构造方法

get获取属性,set设置属性

基本语法

导入bean类 <%@ page import="mypack.CounterBean" %>

声明对象 <jsp:useBean id="mybean" class="mypack.CounterBean" scope="session"/>

与下面的java片段是等价的:

mypack.CounterBean myBean = null;

myBean = (mypack.CounterBean)session.getAttribute("myBean")

if(myBean == null){

myBean = new mypack.CounterBean();

session.setAttribute("myBean",myBean);

}

访问javabean属性

<jsp:getProperty name="myBean" property="count"/>

等价于

<%=myBean.getCount() %>

在一定的范围内(声明时候,scope指定),处于同一个会话中的web组件共享这个会话范围内的javaBean对象。

EL表达式

JSP2.0提出,用于替代传统的<%= %>的表达式,以及部分<%%>程序片段。

还可以作为JSP标签的属性的值。

<jsp:useBean id="myPageBean" scope="page" class="mypack.CounterBean">

<jsp:setProperty name="mypageBean" property="count" value="${myPageBean.count+1}">

基本语法

\({var}

访问对象的属性:`\){customer.name}等价于

\({customer["name"]}`

访问数组:`\){customer[0]}`

隐含对象

?

上述11个隐含对象可以分为4种类型:

* http请求中的特定数据

${header["user-agent"]} 不能用. 因为有-特殊字符

${header.host}

${cookie.username.value}调用名为"username"的cookie对象的getValue方法

* 表示特定范围

${sessionScope.cart.total}调用会话范围内对象名为cart的getTotal方法

* 表示PageContext对象

${pageContext.servletContext.servletInfo}application.getServerInfo()

${pageContext.request.requestURL}request.getRequestURL()

*表示web应用的初始化参数集合

${initParam.driver}application.getInitParameter("driver")

不能直接访问JSP的隐含对象

命名变量

EL表达式中的变量称为命名变量,它不是JSP文件中的局部变量或实例变量。

定义和使用EL函数

定义函数(就是java类),

jsp中声明<%@ taglid prefix="mm" uri="/mytaglib" %>

使用${mm.add(param.x,param.y)}来调用函数

在WEB-INF中创建mytaglib.tld 配置映射关系

在web.xml 配置

自定义JSP标签

(1)创建自定义标签的处理类

(2)创建TLD标签的描述文件

如何使用:

(1)把标签的处理类放到WEB-INF\classes

(2)将描述文件放在WEB-INF目录或者其子目录下

(3)在web.xml中声明

(4)在JSP中使用

JspTag接口

所有的标签处理类都要实现JspTag接口。

JSP CORE库(JSTL)

?

使用方式:

将standard.jar导入到WEB-INF/lib下,在JSP中通过taglib指令声明。

一般用途的标签

<c:out>把一个表达式的结果打印到网页

<c:set>设定明明变量的值

<c:remove>删除一个命名变量

<c:catch>用于捕获异常

<c:out>标签

<c:out value="表达式"/>

<c:out value="${param.username}"/>

<c:out value="<%=username%>"/>

以上代码与单纯的EL表达式${param.username}等价

设置默认值<c:out value="表达式" default="默认值"/>

<c:set>标签

*为String类型的命名变量设置值

*如果命名变量为javabean,就为这个对象的特定属性设置值

*如果命名变量为map类型,就为这个对象特定的key设定值。

1 <c:set var="命名变量的名字" value=“表达式” scope=“page|request|session|application”/>

2 <c:set target="javabean的命名变量" property="javbean属性名" value="表达式"/>

?

3.与2一致

条件标签<c:if|choose|when|otherwise>

<c:if>

<c:id test="逻辑表达式" var="代表逻辑表达式值的命名变量的名字" scope=""/>

该标签会把逻辑表达式的值存放在var属性指定的命名变量,scope默认是page

<c:if test="${param.username==‘Tom‘}" var="result" scpe="request"/>

等价于

<%String username=request.getParameter("username");
if(username!=null&&username.equals("Tom"))
    request.setAttribute("result",true);
else
    reques.setAttribute("result",false);%>

<c:if>标签还可包含标签主体,当逻辑表达式为true时才会执行主体。

<c:if test="${param.save==`user`}">
Saving user
<c:set var="user" value="Tom">

等价于

<%
String save=request.getParameter("save");
if(save!=null && save.equals("user")){
out.print("saving user")
pageContext.setAttribute("user","Tom");
}
%>

choose when otherwise标签

<c:choose>
    <c:when test="${empty param.username}">
    Nuknown user
    </c:when>
    <c:when test="${param.username==‘tom‘}">
    ${param.username} is manager
     </c:when>
     <c:otherwise>
     ${param.username} is employee
     </c:otherwise>
</c:choose>

等价于

<%
String username=request.getParameter("username");
id(username==null){
out.print("Nuknown user")
}else if(username.equals("Tom")){
out.print(username+"is manager")
}else{
out.print(username+"is memployee")
}
%>

一些相关语法规则:

?

<c:otherwise>必须位于<c:when>标签之后

迭代标签

*<c:forEach>:用于遍历集合中的对象,并且能重复执行标签主体

*<c:forTokens>:用于遍历字符串中用特定分隔的字符串,并且重复执行标签主体

<c:forEach>标签

<c:forEach var="代表集合中的一个元素的命名变量的名字" items="集合">
标签主体
</c:forEach>

例子:

<%@ page import="java.util.HashSet" %>
<%
HashSet names= new HashSet();
names.add("tom")
names.add("mike")
names.add("linda")
%>
<c:forEach var="name" items="<%=names %>" >
${name}
</c:forEach>

标签每次从集合中取出一个元素,并且把它放在NESTED范围的命名变量中,在标签主体中可以访问这个命名变量。

等价于

<%@ page import="java.util.HashSet" %>
<%
Iterator it=name.iterator();
while(it.hasNext()){
String name=(String)it.next();
pageContext.setAttribute("name",name);
}

name=(String)pageContext.getAttribute("name");
out.print(name+"")
pageContext.removeAttribute("name");
%>

<c:forEach>标签的varStatus属性

varStatus属性用于设定一个javax.servlet.jsp.jstl.core的LOopTagStaus类型的命名变量,这个命名变量包含了从集合中取出的当前元素的状态信息。

*count 元素在集合中的序号 从1开始计数

*index 元素在集合中的索引,从0开始计数

*first 元素是否为集合的第一个元素

* last 元素是否时集合中的最后一个元素

<%@ page contentType="text/html; charset=GB2312" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ page import="java.util.HashSet" %>

<%
HashSet names=new HashSet();
names.add("Tom");
names.add("Mike");
names.add("Linda");
%>

<table border="1">
  <tr>
   <td>序号</td>
   <td>索引</td>
   <td>是否为第一个元素</td>
   <td>是否为最后一个元素</td>
   <td>元素的值</td>
  </tr>

<c:forEach var="name" items="<%=names %>" varStatus="status">
  <tr>
    <td>${status.count} </td>
    <td>${status.index} </td>
    <td>${status.first} </td>
    <td>${status.last} </td>
    <td>
      <c:choose>
        <c:when test="${status.last}">
          <font color="red">${name} </font>
        </c:when>
        <c:otherwise>
          <font color="green">${name} </font>
        </c:otherwise>
      </c:choose>
    </td>
  </tr>
</c:forEach>
</table>

<c:forTokens>标签

用于便利字符串中用特定分隔符分隔的子字符串,并且能重复执行标签主体

<c:forEach var="代表字符串命名变量的名字" items="被分隔的字符串" delims="分隔符">

标签主体

</c:forEach>

 <c:forTokens var="name" items="Tom:MIke:Linda" delims=":">
 ${name}
 </c:forTokens>

form表单的格式

表单提交格式与浏览器有关

时间: 2024-12-26 01:28:54

JSP回顾的相关文章

不用动手术的肝脏清洗法

几乎每个人体内都有肝胆结石,或许很多人只知道胆结石,不知道肝脏内也有结石,也不知道其实很多胆结石的初期就是在肝脏内形成的,更不知道吃夜宵.晚饭在7点之后吃.吃油炸食品.甚至喝水较少也会导致肝胆结石.就以上几个不良生活习惯,我们每个人占多少?简单的讲,肝脏是人体内最大的器官,它是人体的解毒工厂,它的构造极其复杂,所以至今为止,人类无法设计出人造肝脏,它的复杂度仅次于脑组织.所以让肝脏维持正常功能直接关系着人体的健康.肝脏可以使激素,酒精以及某些有害药物在体内失效.各种人体无法代谢的毒素都会由肝脏负

导演与明星老婆离婚 恋亲手捧红干女儿

http://www.ehotelier.cn/Thread.jsp?tid=182934http://www.ehotelier.cn/Thread.jsp?tid=182940http://www.ehotelier.cn/Thread.jsp?tid=182946http://www.ehotelier.cn/Thread.jsp?tid=182951http://www.ehotelier.cn/Thread.jsp?tid=182957http://www.ehotelier.cn/T

【Web基础】JSP/Servlet 简单回顾

HTTP状态码: 2XX:请求成功 3XX:重定向 4XX:客户机中出现错误. 403-禁止--即使有授权也不需要访问.404 服务器找不到指定资源,文档不存在. 4XX:服务器出现错误.500 服务器内部错误--因为意外情况,服务器不能完成请求. JSP部分: JSP内置对象: 1 page Context --javax.servlet.jsp.PageContext 2.request--javax.servlet.http.HttpServletRequest 接口定义:public i

jsp总结

用了差不多一个月吧,从春节到现在开学也差不多半个月了.jsp的视频算是看完了.  看完之后的感受, jsp很强大. 然后我什么都忘了. 对于网页web编程来说, jsp是必须要学的.并且要学好的.在这段学习的历程里. 我做了很多笔记.也做了一些思维导图. 接下来的计划就是完成jsp的一个小项目当是练练手. 趁着学完没多久,现在回顾一下所学的内容,  我记忆深刻的是  pagecontext, request, session ,application .  其中request和session 好

javaweb回顾第九篇EL表达式

前言:关于EL表示式开发用的非常多,现在我们回顾一下关于如果去操作EL表达式 1:EL表达式语法 所有EL表达式都是由{开始}结束,表达式中用.和[]操作符来访问数据比喻${user.userName}.${user["userName"]}是等效的. 2:几个重要的操作符 算术,逻辑,关系操作符和我们java语法操作的一样. 2.1:Empty操作符 Empty操作是判断一个值是否为null或者"",写法如${!empty user} 2.2:三目运算符 EL表达

jsp 以及javabean内省技术

l JSP l JavaBean及内省 l EL表达式 1.1 上次课内容回顾 会话技术: Cookie:客户端技术.将数据保存在客户端浏览器上.Cookie是有大小和个数的限制. Session:服务器端技术.将数据保存在服务器端.Session没有大小和个数限制.Session基于Cookie回写了一个JSESSIONID. Cookie的分类: * 会话级别的Cookie:浏览器关闭了,Cookie就销毁了! * 持久化的Cookie: * cookie.setMaxAge(时间); --

Java Web开发之详解JSP

JSP作为Java Web开发中比较重要的技术,一般当作视图(View)的技术所使用,即用来展现页面.Servlet由于其本身不适合作为表现层技术,所以一般被当作控制器(Controller)所使用,而JavaBean作为模型(Model)层使用.这就是经典的MVC模型. Servlet和JSP的关系上篇博客已经讲过了,并演示了一个相当简单的例子.在具体讲述JSP之前,先把JavaBean简单介绍一下. JavaBean其实就是一个Java普通类,定义了类的属性和行为(get.set方法).在M

【黑马程序员】第11课:JSTL标签+JSP开发模式

<pre> day11 昨天内容回顾 (1)jsp *jsp的三个指令 *jsp里面九个内置对象 request response session config application exception page out:out输出机制 pageContext (2)javabean *jsp的动作标签 *beanutils框架 (3)el表达式 *el表达式获取域对象里面的值 *el表达式获取域对象里面数组,集合,对象的属性的值  思维导图 1.jstl的简介 *和指令taglib一起使用

【黑马程序员】第10课:JSP+EL表达式+JavaBean

<pre> day10 上节内容回顾 1.jsp的入门 *在jsp里面如何嵌入java代码 **有三种 <%!  %>  <%= %> <%  %> *jsp就是servlet,最终也会被编译成servlet,放到tomcat的work目录里面 2.el入门 *获取域对象里面的值 *${域对象的名称} 3.cookie *cookie分类 **有两种:会话级别的cookie和持久性的cookie(使用方法setMaxAge方法) *创建cookie:new