本文将对JSP进行概述,在详细讨论JSP页面中的注释,隐式对象以及三个句法元素:指令、脚本元素、动作


JSP概述:

第一次请求一个JSP页面时,Servlet/JSP容器要做两件事:


1.将JSP页面转换成一个JSP页面实现类

2.如果转换成功,Servlet/JSP容器将会编译Servlet类。容器加载和实例化java字节码,并执行它通常对Servlet所做的生命周期


一、备注


JSP页面可以使用两种备注:


1、JSP备注

以<%--    --%>为备注,JSP备注不会被发送到浏览器,也不能进行嵌套

2、HTML/XHTML备注

<!--   -->为备注,该备注不是有容器处理,而是发送到浏览器


二、隐式对象


1、pageContext 提供了有用的context信息,并通过一些方法来访问与Servlet有关的各种对象

例如:getRequest,  getResponse,  getServletContext,  getSession,  getServletConfig

pageContext中的setAttribute方法:

void setAttribute (String name,Objext value,int scope)

scope可以是PAGE_SCOPE , REQUEST_SCOPE,  SESSION_SCOPE,  APPLICATION_SCOPE,

page 属性只能在同一个JSP页面使用,request是指当前的ServletRequest ,session是指当前的HttpSession ,application是指ServletContext

2、out  类似与HttpServletResponse中调用getWrite方法

3、另外还有request、response,session,application、config、page、exception隐式对象



例;

</head>
  
  <body>
   <b>Http headers:</b> <br>
   <%
   for(Enumeration<String> e=request.getHeaderNames();e.hasMoreElements();){
        String header=e.nextElement();
        out.println(header+":"+request.getHeader(header)+"<br/>");
   }%>
   <hr/>
   <%
      out.println("Buffer size:"+response.getBufferSize()+"<br>");
      out.println("Session id:"+session.getId()+"<br>");
      out.println("Servlet name:"+config.getServletName()+"<br>");
      out.println("Server info"+application.getServerInfo()); 
   %>
  </body>
</html>

三、指令

1,page指令

语法如下:

<%@page  attribute1=" value1" attribute2="value2" ...%>

page指令的属性列表:

    import: import=“java.util.List.*”    多个类型用逗号隔开,*通式符可以导入整个包

    session:值为true时,表明这个页面参与session管理,默认是true;值为false时,不参与Session管理

    buffer:指定隐式对象out的缓冲区的大小,kb为单位

    autoFlush:默认值为true,表示缓冲区为满时自动刷新输出,值为false时,只有调用response隐式对象的flush方法才会刷新,溢出时抛出异常

    errorPage:表示处理可能出现的错误的页面

    isErrorPage:表明这个页面是否处理错误

    contentType:指定该页面response对象的内容类型,默认“text/html”

    pageEncoding:指定该页面的字符编码


page指令可以出现在页面任何位置,只有当包含contextType,pageEncoding类型时,必须放在模板前面


2、include指令:

语法:<%@include  file="url"%>      url是表示一个文件的相对路径,如果以正斜线/开头,则表示绝对路径

可以将另一个文件的内容放在当前的jsp页面中

如:<%@include file="copyright.jspf"%> 为了使该指令成功,copyright.jspf必须放在同一个目录下

按照规范,include文件的拓展名为jspf,表示JSP fragment 


四、脚本元素

1、java代码块

<%  %>

2、表达式

<%= %>

3、声明

<%! public String getTodaysDate(){

    return new java.util.Date();  

     }

 %>

我们可以通过声明一个jspInit方法来覆盖实现类的init方法,声明一个jspDestroy方法来覆盖实现类的destroy方法

<%!

public void jspInit(){

}

public void jspDestroy(){

}

%>


五、动作

1,useBean

<jsp: useBean  id="today" class="java.util.Date"/ >


<jsp: setProperty name="today" property="firstName" value="admin">

该动作在today对象中保存一个属性


2,include

<jsp:include page="menu.jsp">

include动作动态地包含另一个资源,可以包含另一个jsp页面,一个Servlet或者一个静态的html页面

include动作与include指令的区别:

include指令使用时是发生在页面转换的时候,使用include动作时时发生在请求时,include动作相当于请求转发

使用include指令时,被包含的资源的文件拓展名并不重要,而使用include动作时,文件拓展名必须为jsp


3、forward

<jsp: forward  page="login.jsp">

forward动作时将当前页面跳转到另一个资源



Logo

权威|前沿|技术|干货|国内首个API全生命周期开发者社区

更多推荐