从小白到到精通,一文带你搞懂JSP文件标识

  • Post author:
  • Post category:其他


动作标识应该在哪里使用?

在JSP的请求处理阶段按在页面出现的

顺序

来执行动作标识的时候。

JSP动作元素是用

XML语法

写成的,所以必须符合XML标准。它的作用是可以动态地插入文件、重用JavaBean组件、将用户重定向到另外的页面、为Java插件生成相应的HTML代码等。也用于一些特殊用处,譬如,

操作JavaBean

、包含其他文件或执行请求转发等。开发中比较

常用

的动作标识来介绍:

#怎么用呢?

使用格式:

<jsp:action_name attribute="value" />

如下的

标准动作标识

,这些基本上就是预定义的

函数

,只是前面多了JSP作为前缀;

语法 描述
jsp:include 在页面被请求的时候引入一个文件。
jsp:useBean 寻找或者实例化一个JavaBean。
jsp:setProperty 设置JavaBean的属性。
jsp:getProperty 输出某个JavaBean的属性。
jsp:forward 把请求转到一个新的页面。
jsp:plugin 根据浏览器类型为Java插件生成OBJECT或EMBED标记。
jsp:element 定义动态XML元素
jsp:attribute 设置动态定义的XML元素属性。
jsp:body 设置动态定义的XML元素内容。
jsp:text 在JSP页面和文档中使用写入文本的模板

jsp:include

作用是用来

包含其它JSP页面

的。你可能会说include指令,它们是否相同呢?了下节会解释它们两者有什么区别,并且它所包含的文件可以是

动态文件,也可以是静态的文件

include指令是在编译级别完成的包含,

把当前JSP和被包含的JSP

合并成一个JSP,然后再编译成一个Servlet。

该标签是在运行时完成的包含,即当前JSP和被包含的JSP都会

各自生成

Servlet,然后在执行当前JSP的Servlet时完成

包含另一个

JSP的Servlet。它与RequestDispatcher的

include()方法

是相同的!

参数说明:



用法如下:

<jsp:include page=”url” flush=”flase|true” />
\\ 或者
<jsp:include page="url" flush="false|true" >
    子动作标识<jsp:param>
</jsp:include>

参数说明:

  • page:用于指定被包含文件的

    相对路径

    。如:指定属性值为top.jsp,则表示包含的是与当前JSP文件相同文件夹中的


    top.jsp文件


    包含在

    当前JSP页面

    中。

  • flush:可选属性,用于设置

    是否刷新缓冲区

    。默认值是false,如果设置为true,在当前页面输出

    使用了缓冲区

    的情况时,则先刷新缓冲区,然后再执行包含工作。

  • < jsp:param >子动作标识:

    用于向被包含的动态页面中

    传递参数



    那我们:

    2

    下面程序所示:

    date.jsp文件:

    <%@ page language="java" contentType="text/html; charset=UTF-8"
        pageEncoding="UTF-8"%>
    <p>
       今天的日期是: <%= (new java.util.Date()).toLocaleString()%>
    </p>

    main.jsp文件:

    <%@ page language="java" contentType="text/html; charset=UTF-8"
      pageEncoding="UTF-8"%>
    <!DOCTYPE html>
    <html>
    <head>
        <meta charset="utf-8">
        <title>码工是小希(https://github.com/Datalong)</title>
    </head>
    

include 动作实例

“` 现将上面两个文件放在服务器的**根目录**,访问main.jsp文件。显示为:

>include 动作实例

今天的日期是: 2021-5-13 13:08:17

小结:

jsp:include动作标识是对包含的动态文件和静态文件的处理方式是

有所不同

的。

如果被包含的是静态文件,则页面执行后,在使用该标识的位置会输出这个文件的内容。如果包含的是一个动态文件,那么JSP编译器将编译并


执行


这个文件。jsp:include动作标识会识别出


文件类型


,而并不是通过文件的名称来判断改文件是静态的还是动态的:

include指令

文件包含指令是JSP的另外一种

指令标识

,写的目的就是和

include动作标识

做一下区分。通过该指令可以在一个JSP页面中去包含

另一个JSP页面

。不过该指令是静态包含,也就是说被包含文件里的所有内容被

原样

包含到该JSP页面中,即使被包含页面中有JSP代码,在包含时也是不会被编译执行的,使用include这个指令,最终会生成一个文件,所以在被包含和包含的文件中,都不能有

相同名称的变量

,所以去包含另外一个页面

只能静态包含

在JSP页面中包含文件的方法有两种:


include指令

:<%@ include file=””%>


include动作

:<jsp:include page=”” />

区分:

<%@ include file=””%>又叫静态包含,使用时要注意以下几点:

1、被包含文件里不能再使用这种标签,否则会与包含页面中的

标签重复

2、被包含文件的路径不能写成

动态

的,譬如:<%@ include file=”<%=xxx%>”%>;

3、被包含文件的路径中

不能携带参数

,如:<%@ include file=”navi.jsp?flag=1″%>。

处理方式不同:

  • include指令在编译时候,就把jsp的代码原封不动就拼到这个页面来了。运行时把jsp的代码,当作本页代码来运行。
  • <jsp:include page=”” />又叫

    动态包含

    运行访问这个页面,把jsp页面的结果拿出来。也就是说,直接

    新写

    一个完整的jsp或html即可,就像html以前已经过时的框架那种写法;

请求转发标识jsp:forward

通过它可以将请求转发到其他的Web资源,例如,另一个

JSP页面,HTML页面,Servlet

等。执行请求转发后,当前页面就不再被执行,而是去执行该标识

指定的目标页面



**

  • 用法:

    <jsp:forward page=”url” />

    参数:

    page:用于指定

    请求转发

    的目标页面。该属性值可以是一个

    指定文件路径的字符串

    ,也可以是表示文件路径的JSP表达式。但是请求

    被转向的目标文件

    必须是内部的资源。

传递参数标识jsp:param

JSP的动作标识jsp:param可以作为其他标识的子标识,用于为

其他标识传递参数

: 用法:

<jsp:param name=”参数名” value=”7” />

参数

name:用于指定

参数名称

value:用于设置

对应的参数值

<jsp:forward >

请求转发标识,通过jsp:forward动作标识可以将请求转发到

其他的Web资源

,例如,另一个JSP页面,HTML页面,Servlet等。执行

请求转发

后,当前页面将不再被执行,而是去执行该标识

指定

的目标页面。

基本语法:

<jsp:forward page="url"/>

参数说明:

page:用于指定请求转发的目标页面。该属性值可以是一个

指定文件路径的字符串

,也可以是表示

文件路径的JSP表达式

。但是请求

被转向

的目标文件必须是内部的资源。

< jsp:param> 设置参数的子动作标识,子动作标识是指作为

其他标识

的子标识。用来向动态的目标文件中

传递参数

。等价于文件名后面加“?参数名=参数值”。

基本语法:

  < jsp:param name="参数名” value="参数值"/>

参数说明:

name:用于指定

参数名称

value:用于设置

对应的参数值

操作JavaBean的动作标识

1、创建JavaBean实例的动作表识 < jsp:useBean >

不存在Body的语法格式:

<jsp:useBean id="实例名" scope="范围" class="完整的类名" beanName="完整类名"  type="数据类型"/>
<jsp:setProperty name="JavaBean实例名" property="属性名" param="请求参数"/>

 ···多个子动作标识····

存在Body的语法格式:

<jsp:useBean id=”实例名“ scope="范围"  class="完整类名" beanName="完整类名" type="数据类型" >
<jsp:setProperty name="JavaBean实例名" property="属性名" param="请求参数"/>
···多个子动作标识····

</jsp:useBean>

语法区别:

在页面用< jsp:useBean >标识创建个

JavaBean实例

时,如果该JavaBean是第一次被

实例化

,那么对于第二种语法格式,被指的内容会被

执行

;若已经存在指定的JavaBean实例时,则标识体内的内容就

不再被执行

。而对于第一种语法格式,无论在指定的范围内是否已经存在一个

指定的JavaBean实例

,其中< jsp:useBean >

标识

后面的< jsp:setProperty >

子标识

都会被执行!

2、读取JavaBean属性值的动作标识<jsp:getProperty >

<jsp: name="实例名" property="属性名">

3、设置JavaBean属性的动作标识 < jsp:setProperty >

<jsp:setProperty name="" property="" vaule=""/param="">
class = beanName +type

//value 与 param 不可同时使用;

实战练习

实现留言板

<%@ page contentType="text/html;charset=gb2312" %>
<HTML><body bgcolor=cyan>
 <form action="example3_18_pane.jsp" method="post" name="form">
   输入名字:<input  type="text" name="peopleName">
   <br>留言标题:<input  type="text"  name="title">
   <br>留言:<br> <textArea name="messages" rows="10" cols=36 
                   wrap="physical"></textArea>
   <br><input type="submit" value="提交" name="submit">
 </form>
 <a href="example3_18_show.jsp">查看留言板</a>
</body></HTML>

<%@ page contentType="text/html;charset=gb2312" %>
<%@ page import="java.util.*" %>
<HTML><body>
     <%! Vector v=new Vector();
         int i=0; 
         ServletContext  application;
         synchronized void leaveWord(String s) { //留言方法
            application=getServletContext();;
            i++;
            v.add("No."+i+","+s);
            application.setAttribute("Mess",v); 
         }
     %> 
     <% String name=request.getParameter("peopleName");
        String title=request.getParameter("title");
        String messages=request.getParameter("messages");
           if(name==null)
              name="guest"+(int)(Math.random()*10000);
           if(title==null)
              title="无标题";
           if(messages==null)
              messages="无信息";
           String s=name+"#"+title+"#"+messages; 
           leaveWord(s);
           out.print("您的信息已经提交!");
     %>
  <a href="example3_18_input.jsp" >返回留言页面 
</body></HTML>
<%@ page contentType="text/html;charset=gb2312" %>
<%@ page import="java.util.*" %>
<%! public String handleStr(String s) {
       try {  byte [] bb= s.getBytes("iso-8859-1");
              s = new String(bb);
       }
       catch(Exception exp){}
       return s;
    }
%>
<HTML><body>
  <% Vector v=(Vector)application.getAttribute("Mess");
     for(int i=0;i<v.size();i++) {
        String message=(String)v.elementAt(i);
        String []a =message.split("#");
        out.print("留言人:"+handleStr(a[0])+","+"<br>");
        out.print("标题:"+handleStr(a[1])+"<br>");
        out.print("留言内容:<br>"+handleStr(a[2]));
        out.print("<br>--------------<br>");
     } 
  %>
</body></HTML> 

运行结果:

留言板1
浏览吧2



版权声明:本文为weixin_45817252原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。