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.0\work\Catalina\localhost\jsp\org\apache\jsp\index_jsp.java

localhost是一个主机名,jsp是这个web应用的名,org\apache\jsp这个目录结构是固定的,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:\MyEclipse\Common\plugins\com.genuitec.eclipse.j2eedt.core_10.0.0.me201110301321\templates\velocity\welcome

posted @ 2013-12-02 15:10  剑握在手  阅读(310)  评论(0编辑  收藏  举报
返回顶部↑