• JavaWeb学习笔记--2.jsp指令元素、动作元素、内置对象


    目录:
    一.指令
      1.1 page指令 :page指令有13种属性
      1.2 include指令:include指令有1种属性,为file。(注意<%@ include%>和<jsp:include>的区别)
      1.3 taglib指令:taglib指令有2种属性,prefix、uri
    二.JSP动作组件 
      2.1 <jsp:include>:
      2.2 <jsp:param>:
      2.3 <jsp:forward>:
      2.4 <jsp:setProperty>:
      2.5 <jsp:getProperty>:
      2.6 <jsp:useBean>:
    三.JSP内置对象
    四.表达式语言

    一.指令

    指令是从JSP向web容器发送的消息,它用来设置页面的全局属性,

    格式<%@ 指令名 属性="属性值"%>

    指令名有 page include taglib三种

    1.1 page常用指令表 

    属性

    定义

    language=”ScriptLanguage”

    extends=”className”

    import=”importList”

    session=”true|false”

    buffer=”none|size in kb”

    autoFlush=”true|false”

    isThreadSafe=”true|false”

    errorPage=”url”

    isErrorPage="true|false”

    contentType="text/html;charset=gb2312”

    pageEncoding=”ISO-8859-1”

    isELLgnored=”true|false”

    指定JSP Container用什么语言编译,目前只支持JAVA语言。默认为java

    定义此JSP网页产生的Servlet是继承哪个父类

    指定导入的java包

    决定此页面是否使用session对象。默认为true

    决定输出流(Input stream)是否有缓冲区。默认为8kb

    决定输出流缓冲区是否自动进行强制输出。true则缓冲区满时正常输出,false缓冲区满会发生异常

    是否支持多线程。默认为true  <%@page isThreadSafe="true"% >

    如果此页发生异常,网页会重新指向一个url

    表示此页面是否为错误处理页面。默认为false

    表示MIME类型和JSP的编码方式。默认编码格式为 ISO-8859-1

    指定网页的编码方式。

    表示是否在此JSP页面中EL表达式。true则忽略,false则支持。默认false

    1.2 include指令
      用于在JSP文件中插入一个包含文本或代码的文件,在转换成Servlet时,将指定的文件和当前的文件进行合并。包含的文件可以是一个HTML文件文本文件JSP文件。使用include指令可以将一个网页分成几个不同的模块进行编辑。

    语法格式:<%@ include file="被包含文件地址"%>
    注意include指令只有一个属性值file

    例子:

    <%@ page language="java" import="java.util.*" pageEncoding="gb2312"%>
    <%@ page import="java.text.*"%>
    
    <html>
      <head>    
        <title>文本文件</title>
      </head>  
      <body>
      包含文本文件,内容如下:</br>
        <%@ include file="content"%>
      </body>
    </html>

    这里"content"和index.jsp在同一层文件夹,因此url直接为"content"
    content内容:this.is.a.text

    页面运行结果:

    包含文本文件,内容如下:
    this.is.a.text

    注意:<%@ include%>和<jsp:include>的区别 

    1.3 taglib指令

    用来声明次jsp文件使用了自定义标签。JSP中可以使用根据业务需要定义的标签,这样比较便于页面功能的实现。同时引用所指定的标签库并设置标签库的前缀。
    格式如下<%@ taglib uri = "URIToTagLibrary" prefix="tagPrefix"%>
    taglib指令包含两个属性,分别为uri和prefix

    其中uri属性用来指定标签库的存放位置。prefix属性指定该标签库使用的前缀。 

    <%@ page language="java" import="java.util.*" pageEncoding="gb2312"%>
    <!--声明页面中要用到的标签库 -->
    <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>    
    <html>
      <head>    
        <title>使用标签库</title>
      </head>  
      <body>    
        <!-- 使用JSTL标签输出字符串 -->
        <c:out value="hello world"/>        
      </body>
    </html>

    解释:代码第3行使用taglib指令,表示在该jsp文件中将使用JSTL的核心标签库同时指定该标签库的前缀为c。第10行通过使用JSTL核心标签库的<c:out>标签输出"hello world"

    补充:JSTL核心标签库的使用

    ========================================================================

    二.JSP动作组件

    是一些xml语法格式的标记,被用来控制Web容器的行为

    <jsp:include>:

    <jsp:param>:

    <jsp:forward>:

    <jsp:setProperty>:

    <jsp:getProperty>:

    <jsp:useBean>:

    在页面被请求的时候引入一个文件 <jsp:include page="文件名" flush="true"/>

    在动作组件中引入参数信息  <jsp:param name="参数名称" value=值 />

    把请求转到一个新的页面   <jsp:forward page="网页名称">

    设置JavaBean的属性

    输出某个JavaBean的属性

    寻找或者实例化一个JavaBean

    2.1<jsp:include>动作元素
    用来包含静态和动态的文件。如果包含的为静态文件,那么只是单纯的加到JSP页面中,不会进行任何处理。如果包含的文件为动态文件,那么会先处理,然后将结果加到JSP页面中
    语法格式:<jsp:include page="包含文件URL地址" flush="true | false"> 其中flush指定缓冲区满时,是否进行清空。

    注意:<%@ include%>和<jsp:include>的区别

    (a)使用<%@ include%>
    index.jsp

    <%@ page language="java" import="java.util.*" pageEncoding="gb2312"%>
    <%@ page import="java.text.*"%>    
    <html>
      <head>    
        <title>包含一个含JSP代码的文本文件</title>
      </head>  
      <body>    
        使用include动作元素包含一个含有JSP代码的文本文件<br>
        <%@ include file = "content2.txt" %>    
      </body>
    </html>

    content2.txt

    <%@ page import="java.util.*"%>
    <%=new Date()%>

    页面结果:

    使用include动作元素包含一个含有JSP代码的文本文件
    当前时间与日期: Sun Jun 28 13:34:22 CST 2015


    (b)使用<jsp:include>

    index.jsp

    <%@ page language="java" import="java.util.*" pageEncoding="gb2312"%>
    <%@ page import="java.text.*"%>
    <html>
      <head>    
        <title>包含一个含JSP代码的文本文件</title>
      </head>  
      <body>
        使用include动作元素包含一个含有JSP代码的文本文件<br>
        当前时间与日期:
        <jsp:include page="content2.txt"></jsp:include>
      </body>
    </html>

    页面结果:

    使用include动作元素包含一个含有JSP代码的文本文件
    当前时间与日期: <%@ page import="java.util.*"%> <%=new Date()%>

    可见,使用<jsp:include>把txt文件直接输出了。因为<jsp:include>动作动态地包含文件。
    如果被包含的文件是静态的,则直接包含内容,不会进行处理。
    如果被包含的文件是动态的,则先执行,然后包含结果并进行显示。

    在上例中,content2.txt是静态文件,里面的jsp代码没有执行,而是原样输出。

    小结:
    对于(a),使用<%@ include%>指令元素是将所有的被包含文件包含进来之后,再进行编译等处理,可以理解为“先包含再处理”
    对于(b),使用<jsp:include>动作元素师将所有的代码处理完成后,在将处理完成的代码结果包含进行,可以理解为“先处理再包含”

    ======================================================

    2.2 使用forward动作组件时的问题   

    <jsp:forward>动作元素用来转移用户的请求,使得用户请求的页面从一个页面跳转到另一个页面。这种跳转为服务端的跳转,因此地址栏不会发生变化

    语法格式:<jsp: forward page="跳转文件url地址"> 只有page一个属性

    <%@ page language="java" pageEncoding="GB2312"%>
    <%@ page contentType = "text/html;charset=GB2312" %>
    <html>
      <head>
        <title>forward</title>
      </head>
      <body>
      	<p>
      		<%double i = Math.random();
      		if(i>0.5){
      		%>
      		<jsp:forward page = "catalog1.html"></jsp:forward>
      		<%
      		}else{
      		%>
      		<jsp:forward page = "catalog2.html"></jsp:forward>
      		<%
      		}
      		%>   
      </body>
    </html>
    

     如果

    <jsp:forward page = "catalog1.html"></jsp:forward>
    
    写成不在一行的
    <jsp:forward page = "catalog1.html">
    </jsp:forward>
    

     则出错。

    原因:当<jsp:include>标签没有参数时,<jsp:include page="include/header.jsp">的配对标签</jsp:include>不能换行
    
    
    ======================================================
    2.3 param动作组件
    param动作组件用于传递参数信息,必须配合includeforward动作组件一起使用
    语法如下:<jsp:param name="参数名称" value=值 />
    index.jsp
    param与include结合(与forward结合和include类似)
    <%@ page language="java" pageEncoding="GB2312"%>
    <%@ page contentType = "text/html;charset=GB2312" %>
    <html>
      <head>
        <title>param</title>
      </head>
      <body>
      	<p>加载文件效果
      	<jsp:include page="add.jsp">
      	    <jsp:param name = "start" value="0"></jsp:param>
      	    <jsp:param name = "end" value="100"></jsp:param>
      	</jsp:include>
      		   
      </body>
    </html>
    
    add.jsp
    <%@ page language="java" pageEncoding="GB2312"%>
    <%@ page contentType = "text/html;charset=GB2312" %>
    <html>
      <head>
      </head>
      <body>
      	<%
      	String start=request.getParameter("start");
      	String end=request.getParameter("end");
      	int s = Integer.parseInt(start);
      	int e = Integer.parseInt(end);
      	int sum =0;
      	for (int i = s ; i <=e ; i++){
      		sum+=i;
      	}  	
      	 %>
      	 <p>
      	 从<%=start %>到<%=end %>的连续和是<%=sum %>  		   
      </body>
    </html>

     结果效果

    加载文件效果
    
    从0到100的连续和是5050

     

    ====================================================== 

    2.4 plugin动作组件

    用来在JSP中嵌入java插件。语法格式:

    <jsp:plugin
      type="bean|applet"
      name="applet名称"
      code="java类名"
      codebase="java类所在目录"
      align="对齐方式"
      height="高度"
      width="宽度"
      hspace="水平间距"
      vspace="垂直间距"
      archieve="预先加载的类列表"
      jreversion="jre版本"
      iepluginurl="URL"
      nspluginurl="URL"
    ></jsp:plugin>

    index.jsp 

    <%@ page language="java" pageEncoding="GB2312"%>
    <%@ page contentType = "text/html;charset=GB2312" %>
    <html>
      <head>
        <title>plugin动作组件</title>
      </head>
      <body>
      	<jsp:plugin type="applet" code="webapp.Circle" codebase=".">
      		<jsp:fallback>
      			Plugin tag OBJECT or EMBED not supported by browser.
      		</jsp:fallback>
      	</jsp:plugin>
      </body>
    </html>

     Circle.java 

    public class Circle extends Applet{
    	public  void paint(Graphics g){
    		g.setColor(new Color(255,0,255));
    		g.fillArc(0, 0, 50, 50, 0, 360);
    	}
    }

    ========================================================================  

    三.JSP内置对象

    内置对象为Servlet API的类或接口的实例,JSP规范已经将内置对象完成了初始化,可以直接使用

    包含request、response、out、session、application、config、pagecontext、page、exception

    解释: 参考 虽然我很菜的博客  http://blog.csdn.net/titilover/article/details/6800782 

        摘自:李刚 著 《轻量级 Java EE企业应用实战 Struts2+Spring+hibernate整合开发》

    (1)applicationjavax.servlet.ServletContext的实例,该实例代表JSP所属的WEB应用本身,可用于JSP页面,或者Servlet之间交换信息。常用的方法有getAttribute(String attName), setAttribute(String attName,String attValue)和getInitParameter(String Param)等。 

    (2)configjavax.servlet.ServletConfig的实例,该实例代表JSP的配置信息,常用的方法有getInitparameter(String paramName)及getInitParametername()等方法。事实上,JSP页面通常无需配置,也就不存在配置信息。因此该对象更多地在Servlet中有效。 

    (3)exceptionjava.lang.Throwable的实例,该实例代表其他页面中的错误和异常。只有当页面时错误处理页面,即编译指令的isErrorPage属性是true,该对象才可以使用。常用的方法有getMessage()和printStackTrace()等。 

    (4)outjavax.servlet.jsp.JspWriter的实例,该实例代表Jsp页面输出流,用于输出内容,形成HTML页面。 

    (5)page:代表页面本身,通常没有太大的用处,也就有是Servlet中的this,其类型就是生成Servlet。 

    (6)pageContextjavax.servlet.jsp.PageContext的实例,该实例代表JSP页面的上下文,使用该实例可以访问页面中的共享数据。常用的方法getServletContext()和getSevletConfig()等。 

    (7)requestjavax.servlet.http.HttpServletRequest的实例,该对象封装了一次请求,客户端的请求都被封装在该对象里。这是一个常用的对象,获取客户端请求参数必须使用该对象。常用的方法有:getParameter(String paramName),getParamValues(String paramName),setAttribute(String attributeName,String attributeValue),getAttribute(String attributeName)和setCharacterEncoding(String env)等。 

    (8)responsejavax.servlet.http.HttpServletResponse的实例,代表服务器对于客户端的响应。通常,很少使用该对象直接响应,输出响应对象使用out对象,而response对象常用于重定向。常用的对象有sendRedirect(java.lang.String location)等。 

    (9)sessionjavax.servlet.http.HttpServlet的实例,该对象代表一次会话。从客户端浏览器和站点建立连接起,开始会话,直到关闭浏览器结束会话。常用的方法有getAttribute(String attName),setAttribute(String attName,String attValue)等 

     

    3.1 request对象

    最常用的对象,代表的是来自客户端的请求

    主要方法

    getAttribute(String name)  :返回由name指定的属性值
    getAttributeNames() :返回request对象所有属性的名字集合,结果是一个枚举的实例
    getCookies()        :返回客户端的所有Cookie对象,结果是一个Cookie数组
    getCharacterEncoding()  :返回请求中的字符编码方式
    getContentLength()  :返回请求的Body的长度实例
    getInputStream()    :返回请求的输入流,用于获得请求中的数据
    getMethod()         :获得客户端向服务器端传送数据的方法
    getParameter(String name)  :获得客户端传送给服务器端的有name指定的参数值
    getParameterNames()  :获得客户端传送给服务器端的所有参数的名字,结果是一个枚举的实例
    getParameterValues(String name)  :获得有name指定的参数的所有值
    getProtocol()  :获取客户端向服务器端传送数据所依据的协议名称
    getQueryString()  :获得查询字符串
    getRequestURI()  :获取发出请求字符串的客户端地址
    getRemoteAddr()  :获取客户端的IP地址
    getRemoteHost()  :获取客户端的名字
    getSession([Boolean create])  :返回和请求相关Session
    getServerName()   :获取服务器的名字
    getServletPath()  :获取客户端所请求的脚本文件的路径

     

    index.jsp 

    <%@ page language="java" pageEncoding="GB2312"%>
    <%@ page contentType = "text/html;charset=GB2312" %>
    
    
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
    <html>
      <head>
         <title>My JSP 'index.jsp' starting page</title>
      </head>
      
      <body>
        <br>客户使用的协议是:
        <%String protocol = request.getProtocol();
        out.println(protocol);
         %>
         
         <form action ="getParam.jsp">
         	姓名:<input type="text" name = "Username"><br>
         	选出你喜欢的水果:
         	<input type ="checkbox" name ="fruit" value = "苹果">苹果
         	<input type ="checkbox" name ="fruit" value = "西瓜">西瓜
         	<input type ="checkbox" name ="fruit" value = "桃子">桃子
         	<input type ="checkbox" name ="fruit" value = "葡萄">葡萄
         	<br>
         	<input type ="submit" name="Submit" value="提交">
         </form>
      </body>
    </html>

     getParam.jsp 

    <%@ page language="java" pageEncoding="GB2312"%>
    <%@ page contentType = "text/html;charset=GB2312" %>
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
    <html>
      <head>
        <title>My JSP 'getParam.jsp' starting page</title>
      </head>
      <body>
    	你好!
    	${param.Username}
    	你好!
    	<%String Name; %>
    	<%
    	Name = request.getParameter("Username");
    	String stars = new String("你喜欢的水果有:");
    	String[] paramValues = request.getParameterValues("fruit");
    	for(int i = 0 ; i <paramValues.length ; i++){
    		String x = new String(paramValues[i].getBytes("ISO-8859-1"),"GBK");
    		stars=stars+x+" ";
    		//stars=stars+paramValues[i].getBytes("ISO-8859-1")+" ";
    	}
    	%>
    	
    	<%=Name %>
    	<br>
    	<%=stars %>
    	<br>
    	<%=paramValues.length %>
      </body>
    </html>

    3.2 application对象

      该对象代表web应用本身,整个web应用共享一个application对象,该对象主要用于在多个JSP页面或者Servlet之间共享变量。application通过setAttribute()方法将一个值放入某个属性,该属性的值对整个Web 应用有效,因此Web 应用的每个JSP 页面或Servlet都可以访问该属性,访问属性的方法为getAttribute 。 

    application对象常用方法

    方法名称 方法说明

    getAttribute(String name)

    setAttribute(String name)

    getattributeNames()

    getInitParamter(String name)

    getServerInfo()

    getMimeType()

    getRealPath()

    返回由name指定名字的application对象属性的值,这是一个Object对象

    用object来初始化某个属性值,该属性值由name指定

    返回所有application对象属性的名字,结果是一个枚举类的实例

    返回application初始化参数属性值,属性由name指定

    获得当前版本servlet编译器的信息

    获取组件MIME类型

    获取组件在服务器上的真实路径

  • 相关阅读:
    BZOJ1051 [HAOI2006]受欢迎的牛 强连通分量缩点
    This blog has been cancelled for a long time
    欧拉定理、费马小定理及其拓展应用
    同余基础
    [LeetCode] 73. Set Matrix Zeroes
    [LeetCode] 42. Trapping Rain Water
    [LeetCode] 41. First Missing Positive
    [LeetCode] 71. Simplify Path
    [LeetCode] 148. Sort List
    [LeetCode] 239. Sliding Window Maximum
  • 原文地址:https://www.cnblogs.com/gnivor/p/4238467.html
Copyright © 2020-2023  润新知