尚学堂马士兵servlet/JSP笔记(四、JSP)

来源:互联网 发布:windows7查看443端口 编辑:程序博客网 时间:2024/04/26 03:04


目录(?)[+]

一、JSP简介

JSP本身就是一个servlet;直接在HTML中内嵌JSP代码;

JSP程序由JSP Engine先转换成servlet代码,接着编译成类文件载入执行;只有当客户端第一次请求JSP时,才需要将其转换、编译


HelloWorld.jsp

[java] view plaincopy
  1. <?xml version="1.0" encoding="ISO-8859-1" ?>  
  2. <%@ page language="java" contentType="text/html; charset=ISO-8859-1"  
  3.     pageEncoding="ISO-8859-1"%>  
  4. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">  
  5. <html xmlns="http://www.w3.org/1999/xhtml">  
  6. <head>  
  7. <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" />  
  8. <title>Hello World JSP</title>  
  9. </head>  
  10. <body>  
  11. <%  
  12.     out.println("Hello World!");  
  13.     out.println(new java.util.Date());  
  14. %>  
  15. </body>  
  16. </html>  

二、JSP的基本语法

1.JSP有四种语法:

1)JSP传统语法。(使用<%%>嵌套java语言)

2)JSTL。(和标签语言类似,没有%)

3)JSF。(JSTL的替代品)

4)其他tablib(如struts)。


2.JSP的传统语言:

1)Declaration。    2)Scriptlet。    3)Expression。   4)Comment。   5)Directives。   6)Action动作指令。    7)内置对象

Declaration 基本语法:<%!  %>

在此声明的变量、方法都会被保留成唯一的一份,直到JSP程序停止执行;类似java中的成员变量和成员方法。

示例:

[html] view plaincopy
  1. <body>  
  2. <h1>JSP Declaration</h1>  
  3.   
  4. <%!   
  5.     int accessCount = 0; //此处声明的是成员变量,每次刷新页面,都会递增1  
  6. %>  
  7.   
  8. <%  
  9.     int accessCount2 = 0;  //此处声明的是局部变量,每次刷新页面,程序执行一次,就新生成一个变量,故每次刷新值都不会变。  
  10. %>  
  11.   
  12. <h2>Access to page since server reboot:  
  13. <%= ++accessCount %>  
  14. <br />  
  15. <%= accessCount2 %>  
  16. <br />  
  17. </h2>  
  18. </body>  

Scriptlet基本语法:<%  程序代码区  %>

可以放入任何的java程序代码

注释格式: <%--... ... --%>

<%//... ...%>

<%/*... ...*/%>

示例:(链接后面跟参数示例 url?bgColor=red)

[html] view plaincopy
  1. <!--  
  2.     客户端可以看见的html注释 
  3.  -->  
  4.    
  5.  <%  
  6.     // java单行注释,客户端看不见  
  7.     /*  
  8.     java多行注释  
  9.     客户端看不见  
  10.     */  
  11.       
  12.     String bgColor = request.getParameter("bgColor");  
  13.     boolean hasColor;  
  14.     if(bgColor == null) {  
  15.         hasColor = false;  
  16.         bgColor = "white";  
  17.     } else {  
  18.         hasColor = true;  
  19.     }  
  20.  %>  
  21.   
  22. <body style = "background-color:<%= bgColor %>;">  
  23. <h1>Test BGColor</h1>  
  24. <p>  
  25. <%   
  26.     if(hasColor) {  
  27.         out.println("You have choosed " + bgColor + " as backgroud color");  
  28.     } else {  
  29.         out.println("You have the default backgroud color \"white\"");  
  30.     }  
  31. %>  
  32. </p>  
  33. </body>  

Expression 基本语法:<%=... ...%>

=后面必须是字符串变量或者可以被转换成字符串的表达式;不需要以“;”结束;只有一行;

示例:Expressions.jsp

[html] view plaincopy
  1. <body>  
  2. <h1>JSP Expressions</h1>  
  3. <p>Current time: <%=  new Date() %></p>  
  4. <p>You Host Name: <%=  request.getRemoteHost() %></p>  
  5. <p>You Session ID: <%=  session.getId() %></p>  
  6. <p>The testParam is: <%=  request.getParameter("testParam") %></p>  
  7.   
  8. </body>  

Directive 基本语法格式:<%@Directive属性="属性值"%>
directive(编译指令)相当于在编译期间的命令

常见的Directive:1)page     2)include     3)taglib

1)Directive — page

指明与JSP Container的沟通方式

基本格式:

<%@page language="script language"|        --目前值只能取java,默认为java。
        extends="className"|    --说明该JSP页面从谁继承,不需要指定。
        import="importList"|    --*!引入进来哪些包,相当于java的import语句
        buffer="none|kb size"|    --缓冲区,none为不缓冲,默认8k的缓冲。
        session="true|false"|    --页面能不能使用session,默认能使用。指定较少。
        autoFlush="true|false"|        --页面输出完是否flush到客户端,默认true。
        isThreadSafe="true|false"|    --相当于servlet实现了singleThreadMode(已废弃)
        info="infoText"|    --JSP的描述信息,很少用
        errorPage="errorPageUrl"|    --*!这个页面出错了,显示哪个页面。
        isErrorPage="true|false"|    --*!这个页面是否是显示错误的页面
        contentType="contentTypeInfo"    --*!通常为"text/html"
%>

示例:

[html] view plaincopy
  1. <%@ page language="java" contentType="text/html; charset=gb2312"  
  2.     pageEncoding="ISO-8859-1"  import="java.util.Date,java.text.*"  
  3.     errorPage="ErrPage.jsp"  
  4. %>  

2)Directive — include

将指定的JSP程序或者HTML文件包含进来

格式:<%@ include file="fileURL"%>

JSP Engine会在JSP程序的转换时期先把file属性设定的文件包含进来,然后开始执行转换编译工作。

不能向fileURL中传参数。


3)Directive — taglib

后续项目中再讲。


Action 基本语法:<jsp: .. />    严格上来讲它属于jsp的第二种语法。

动作指令是在运行期间的命令

常见的:

jsp:useBean
    jsp:setProperty
    jsp:getProperty
jsp:include
jsp:forward
    jsp:param
jsp:plugin        //往网页里面插入一个applet小程序,基本不用了。


jsp:include/jsp:param

用于动态包含JSP程序或者HTML文件等

除非这个指令被执行,否则它是不会被Tomcat等JSP Engine编译。

格式:

<jsp:include page="URLSpec" flush="true" />或者

<jsp:include page="URLSpec" flush="true">

           <jsp:param name="ParamName" value="paramValue" />

</jsp:include>

与Directive include的区别:

1)include编译指令是在JSP程序的转换时期就将file属性所指定的程序内容嵌入,然后再编译执行;而jsp:include在转换期间不会被编译,只有在客户端请求时如果被执行到才会被动态编译载入,所以效率较低

2)include编译指令不能带参数;而jsp:include可以


jsp:forword/jsp:param

用于将一个jsp的内容传送到page所指定的JSP程序或者Servlet中处理

格式:

<jsp:forword page="URLSpec" flush="true" />或者

<jsp:forword page="URLSpec" >

           <jsp:param name="ParamName" value="paramValue" />

</jsp:forword>

forword的页面和forward到的页面用的是同一个request。

与此对应的是:

response.sendRedirect(区别,此为跳转到另一个链接上,不是同一个request;所以跳转后的链接地址不是原来的url)


jsp:useBean

通过jsp:useBean,可以在JSP中使用定义好的Bean

基本用法:

[html] view plaincopy
  1. <jsp:useBean id="beanName" scope="page|request|session|application"  
  2. class="package.BeanClass" type="typeName" />  
  3. <jsp:useBean ...>  
  4.     <jsp:setProperty ...>  
  5.     <jsp:getProperty ...>  
  6. </jsp:useBean>  

示例:

[html] view plaincopy
  1. <jsp:useBean id="cd" scope="page" class="bean.CounterBean" type="Object" />  
  2. /*相当于  
  3. <% Object cb = new bean.CounterBean();%>  
  4. */  
  5. <jsp:setProperty name="cd" property="count" value="23" />  
  6. <jsp:setProperty name="cd" property="count" />  
  7. /*相当于  
  8. <% cd.setcount("23"); %>  
  9. <% cd.getcount; %>  
  10. */  

bean的放置目录同servlet,连包一起放;

³jsp:useBean各项参数含义:
²id:对象实例名称
²scope:Bean作用的范围,默认为page,对整个jsp页面有效
²class:Bean类名称(全名)
²type:Bean实例类型,可以是本类,或其父类,或实现的接口,默认为本类
³Scope各项参数的意义:
²page:仅涵盖使用JavaBean的页面  局部变量
±PageBean.jsp/CounterBean.java
²request:有效范围仅限于使用JavaBean的请求
±RequestBean.jsp/RequestBean2.jsp/CounterBean.java
²session:有效范围在用户整个连接过程中(整个会话阶段均有效)
±SessionBean.jsp/Session2.jsp/CounterBean.java
²application:有效范围涵盖整个应用程序。也就是对整个网站均有效
±Application.jsp/Application2.jsp/CounterBean.java


<jsp : setProperty name = "entry"  property = "discount" param = "discount"> 
<jsp : setProperty name = "entry"  property = "discount" value = "<% =request.getParam("discount")%>"/> 
以上两句话相等。
<jsp : useBean id = "hello" class = "bean.HelloBean scope = "reqest">
<jsp : setProperty name ="hello" property = " *">
意思是爱这盘的接受参数,存到name属性里面。

3.jsp_characterEncoding

<% request.setCharacterEncoding("GBK"); %>传过来就是GBK

或者在单个的显示上用:

<%

String name = request.getParameter("name");

new String(name.getBytes("ISO8859_1"),"GBK");

%>

<%= new String(hello.getName().getBytes("ISO8859_1"),"GBK")%>

4.JSP内置对象

out

request

response

pageContext   //用得很少

session

application

config    //用得较少;一般指web.xml对于这个JSP或者它编译成功之后的servlet的配置

exception

page   //page里面的所有东西可以直接使用,一般不用它


5.servlet和JSP的相互跳转

JSP跳转到Servlet:使用<jsp:forword>或者response.sendRedirect

Servlet跳转到JSP:getServletConfig().getServletContext().getRequestDispatcher("/servlet_jsp/SercletUseJsp.jsp").forword(req,resp);


0 0
原创粉丝点击