zoukankan      html  css  js  c++  java
  • JSP

    原理

    客户端访问服务器,无论是访问servlet,.jsp文件或者.html文件,其实都是在访问servlet。

    对于html和图片:http://blog.csdn.net/hjjk123/article/details/5459268

    .jsp在服务器中被访问的时候,服务器会先把jsp文件翻译成一个servlet,然后再去访问它。

    比如Tomcat服务器,会把翻译好的jsp文件对应的servlet放在其work的Catalina目录下的:

    F:Tomcat 7.0workCatalinalocalhostjsporgapachejspindex_jsp.java

    localhost是一个主机名,jsp是这个web应用的名,orgapachejsp这个目录结构是固定的,index_jsp.java名字中间的"_"相当于"."。

    JSP页面中的HTML内容称之为JSP模板元素

    <%=    %>专门用来输出数据,称为脚本表达式。对应源码out.print();

    <%    %>脚本片段,只能出现java代码,不能出现其他的模板元素,代码会被原封不动的放到Servlet的_jspService方法中。

    <%!    %>JSP声明会被放在service方法外面,service方法所属类中,可以定义方法,声明成员变量,写静态代码块等等。还可以覆盖类的方法,如public void jspInit(),public void jspDestroy()。

    <%-- --%>JSP注释 用JSP注释的东西不会发送给浏览器,而用HTML注释的内容会发送给浏览器。

    服务器中将JSP翻译成servlet的程序,我们称之为JSP引擎

    JSP指令(directive)是为JSP引擎设计的,它们并不直接产生任何可见输出,而只是告诉引擎如何处理JSP页面中的其余部分。JSP2.0规范中共规定了三个指令:

    page,include,taglib

    其基本语法格式<%@ %>

    举例:<%@ page contentType="text/html;charset=gb2312" %>

    同一个指令有多个属性,可以分开写也可以在一个指令中写。

    page指令:

    无论page指令出现在JSP页面中什么位置,都是作用整个JSP页面。

    <%@ page

    [ language="java" ]

    [ extends="package.class" ]

    [ import="{package.class | package.*}, ..." ]

    [ session="true | false" ]

    [ buffer="none | 8kb | sizekb" ]

    [ autoFlush="true | false" ]

    [ isThreadSafe="true | false" ]                                 置为false才是线程安全的implements singleThreadModel

    [ info="text" ]                                                        可以通过info属性带的信息

    [ errorPage="relative_url" ]                                  指定当页面出问题了,比如脚本片段里面有1/0…跳到哪个页面。errorPage属性的设置值必须使用相对路径,如果以“/”开头,表示相对于当前WEB应用程序的根目录(注意不是站点根目录),否则,表示相对于当前页面。

    可以在web.xml文件中使用<error-page>元素为整个WEB应用程序设置错误处理页面,其中的<exception-type>子元素指定异常类的完全限定名,error-code也可以,<location>元素指定以“/”开头的错误处理页面的路径。

    如果设置了某个JSP页面的errorPage属性,那么在web.xml文件中设置的错误处理将不对该页面起作用。

    [ isErrorPage="true | false" ]   如果这个页面是错误处理页面显式声明为true。

    设为true,jsp对应的servlet中会添加类似:

    Throwable exception = org.apache.jasper.ruantime.JspRuntimLibrary.getThrowable(request);

    if(exception != null){

         response.setStatus(HttpServletResponse.SC_INTERNAL_SERVER_ERROR);

    }

    这样的代码,把excepiton传进来。我们可以直接在jsp中拿出来excepiton。

    [ contentType="mimeType [ ;charset=characterSet ]" | "text/html ; charset=ISO-8859-1" ]

    JSP引擎会根据page指令的contentType属性生成相应的调用ServletResponse.setContentType方法的语句。

    page指令的contentType属性还具有说明JSP源文件的字符编码的作用。控制浏览器以什么格式打开

    [ pageEncoding="characterSet | ISO-8859-1" ]     服务器以什么格式翻译当前页面。

    [ isELIgnored="true | false" ]     是否忽略EL表达式,false不不忽略。EL表达式可以很方便的获取域里面数据。

    %>

        

    JSP 引擎自动导入下面的包:

    java.lang.*

    javax.servlet.*

    javax.servlet.jsp.*

    javax.servlet.http.*

    include指令

    静态包含 编译时包含

    包含页头页脚用。

    <%@include file=”/public/foot.jsp” %>静态包含包含的所有JSP会被翻译成一个servlet。

    注意页头页尾文件不要乱写东西。

    动态包含 运行时包含

    <% request.getRequestDispacher(“/public/head.jsp”).include(request,response); %>

    动态包含,每次都要重新去加载,速度慢一些。被包含的JSP会被翻译成多个servlet。

    taglib指令

    用于导入标签库

     <%@taglib uri="/struts-tags" prefix="s" %>

    这句就是导入struts标签库,并使用别名s,以下就是使用示例。

    <s:fielderror fieldName="name" theme="simple"/>

    修改eclipse中jsp模板参考目录:F:MyEclipseCommonpluginscom.genuitec.eclipse.j2eedt.core_10.0.0.me201110301321 emplatesvelocitywelcome

  • 相关阅读:
    第一阶段用户模板和用户场景
    团队开发冲刺第十二天
    第十周总结
    团队开发冲刺第十一天
    团队开发冲刺第十天(实现页面展示评论数与点赞数)
    团队开发冲刺第九天(实现收藏,点赞,关注功能)
    团队开发冲刺第八天(实现评论功能)
    软件用户场景分析
    第九周总结
    团队开发冲刺第六天(新闻详情页的展示)
  • 原文地址:https://www.cnblogs.com/flying607/p/3453145.html
Copyright © 2011-2022 走看看