JavaWeb_JSP_语法

来源:互联网 发布:vs2013 for mac 编辑:程序博客网 时间:2024/05/09 11:18
本博文为子墨原创,转载请注明出处!
http://blog.csdn.net/zimo2013/article/details/9097289

1.JSP工作原理

         当浏览器首次请求浏览jsp页面时,服务器先将该jsp页面编译成对应的Servlet,在_jspService()方法中将逐行读取jsp文件数据,并写入新生成的Servlet的response中,最后客户端接收到的是与Servlet对应response的数据。为避免用户首次访问消耗太多时间,可以自己请求一下这个页面,目的是生成与jsp页面对应的servlet。

//index.jsp-->会在tomcat服务器的work目录下生成与之对应的servlet即index_jsppublic final class index_jsp extends org.apache.jasper.runtime.HttpJspBase    implements org.apache.jasper.runtime.JspSourceDependent {//将逐行读取jsp页面数据,写入response中public void _jspService(HttpServletRequest request, HttpServletResponse response)        throws java.io.IOException, ServletException {PageContext pageContext = null;HttpSession session = null;ServletContext application = null;ServletConfig config = null;JspWriter out = null;Object page = this;JspWriter _jspx_out = null;PageContext _jspx_page_context = null;out.write("\r\n");out.write("\r\n");out.write("<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\">\r\n");out.write("<html>\r\n");out.write("  <head>\r\n");}}

         JSP成分主要有如下四种:注释(Comment)、指令(Directive)、脚本元素(Scripting Element)、动作(Action)。JSP指令用来从整体上控制Servlet的结构;脚本元素用来嵌入Java代码,这些Java代码将成为转换得到的Servlet的一部分;动作用来引入现有的组件或者控制JSP引擎的行为。

2.注释

         解释:JSP隐藏注释语句在JSP页面执行的时候会被忽略,不会执行(不会被送到客户端的浏览器中),HTML注释和JSP注释的不同之处在于HTML注释在客户端浏览器能通过查看源文件而被查看到。
         语法:<%--comment--%>

3.指令

         三种指令:page,include,taglib

         语法:<%@ directive attribute=”value”%>

         (1).page指令
                  <%@ page 
                  [ language="java" ] 
                  [ extends="package.class" ] 
                  [ import="{package.class | package.*}, ..." ] 
                           默认导入(多个以逗号隔开)java.lang.*,javax.servlet.*,javax.servlet.jsp.*,javax.servlet.http.*
                  [ session="true | false" ] 
                           默认值为"true",定义是否在JSP页面使用HTTP的session。如果值为true,则可以使用session对象,相反则不能使用
                  [ buffer="none | 8kb | sizekb" ] 


                            默认8kb,设置页面是否缓冲,在out在写入数据过程中,数据会写到JSPWriter缓冲区
                 [ autoFlush="true | false" ] 
                  [ isThreadSafe="true | false" ] 
                           如果设置为false,JSP页面在一个时刻就只能响应一个请求。
                  [ info="text" ] 
                  [ errorPage="relativeURL" ] 
                           表示如果发生异常错误,网页会被重新指向一个URL页面,前提isErrorPage="true"
                  [ contentType="mimeType [ ;charset=characterSet ]" | "text/html ; charset=ISO-8859-1" ] 
                  [ isErrorPage="true | false" ] 
                  %> 
                  pageEncoding="UTF-8" //jsp文件以什么方式打开,还需告诉浏览器以什么方式显示


         (2).include指令
                  语法:<%@ include file="relativeURL" %>
                  解释:<%@ include file="/test.jsp" %> //静态包含,在编译时期包含,因为生成一个Servlet
                           request.getRequestDispatcher("/test.jsp").include(request, response);//动态包含,运行时包含,生成多个Servlet

         (3).taglib指令
                  功能:使用标签库定义新的自定义标签

                 语法:<%@ taglib uri="URIToTagLibrary" prefix="tagPrefix" %>

                 jsp配置
                          <%@ taglib uri="tool" prefix="c" %> //前缀为后面使用的命名空间

                 web.xml配置
                          <jsp-config>
                                     <taglib>
                                               <taglib-uri>tool</taglib-uri>
                                               <taglib-location>/tool.tld</taglib-location>
                                     </taglib>
                          </jsp-config>

                 tool.tld配置
                              <uri>tool</uri>
                              <tag>
                                  <name>for</name>
                                   <tag-class>com.baidu.web.tag.ForTag</tag-class>
                                   <body-content>scriptless</body-content>
                                   <attribute>
                                         <name>count</name>
                                         <required>true</required>
                                        <rtexprvalue>true</rtexprvalue>
                                   </attribute>
                             </tag>
                 自定义标签详细>>

4.脚本元素

         (1).声明
                  语法:<%! declaration; %> 
                  作用:把声明加入到方法外,从而可以声明变量定义方法
        (2).表达式
                  语法:<%= %>
                  作用:显示在浏览器窗口,结果被自动转换成字符型数据,内部实际上执行write方法
                  实例:<%=new java.util.Date().toLocaleString() %>
         (3).脚本小程序
                  语法:<% Java Code %>
                  作用:可以包含有效的程序片段,只要是合乎Java本身的标准语法即可。其程序段使用分号作为行语句结束,可以使用隐含的变量。
                  实例:
                          <%
                               String str = request.getRemoteHost();
                               response.getWriter().write(str);
                           %>

5.动作

         解释:动作组件用于执行一些标准的常用的JSP页面。利用JSP动作可以动态地插入文件、重用JavaBean组件、把用户重定向到另外的页面、为Java插件生成HTML代码。
         (1).include动作元素
                  语法:<jsp:include page="path" flush="true" />
                  解释:page="path"表示相对路径,或者为相对路径的表达式。flush="true"表示缓冲区满时会被清空,一般使用flush为true,它默认值是false。使用include指令要比使用<jsp:include>动作的响应速度快
         (2).forword动作元素
                  语法:<jsp:forward page={"relativeURL"|"<%= expression %>"}/>
                  解释:page属性包含的是一个相对URL。
         (3).param动作元素
                  语法:<jsp:param name="参数名1" value="{参数值|<%=表达式 %>}"/>
                  解释:param动作元素用于传递参数,该动作元素必须和<jsp:include>、<jsp:forward>动作一起使用。
                 实例:
                           <jsp:include page="/login.jsp"> 
                               <jsp:param name="username" value="zhang" /> 
                               <jsp:param name="password" value="123456"/> 
                           </jsp:include>
        (4).JavaBean动作元素
                   1).useBean
                           语法:<jsp:usebean id="name" scope="page|request|session|application"  class="java.lang.Integer">Body</jsp:useBean>
                           解释:useBean为单例模式设计,只有当第一次实例化Bean时才执行Body部分,如果是利用已有的Bean实例则不执行Body部分。
                   2).setProperty
                           语法:<jsp:setProperty property="age" name="person" param="age"/>
                           解释:name指明对哪个bean实例对象操作
                                      property指明操作哪个属性,如果property的值是"*",匹配的bean属性中,此时应该带相应的参数/index.jsp?name=zhang&age=20
                                      value给的值,支持8种数据类型的转换
                                      param接收地址参数/index.jsp?name=zhang

                           value和param不能同时使用,但可以使用其中任意一个。如果同时省略value和param,其效果相当于提供一个param且其值等于property的值。
                   3).getProperty
                           语法:<jsp:getProperty name="object" property="propertyName"/>

                           实例:
                               <jsp:useBean id="p" class="com.baidu.web.Person" scope="page"></jsp:useBean>
                               <jsp:setProperty property="age" name="p" param="age"/>///index.jsp?name=zhang
                               <jsp:getProperty property="age" name="p" />

补充:隐式对象out
String name = (String)pageContext.getAttribute("name", PageContext.REQUEST_SCOPE);//可以查找其它与属性
<%=(String)pageContext.findAttribute("name1") %>//自动寻找该属性,范围从小到大直到找到为止

 

原创粉丝点击