JSP基础

来源:互联网 发布:linux nexus 启动 编辑:程序博客网 时间:2024/05/02 00:09

JSP (Java Server Pages)是服务器端的脚本语言,是一种在HTML页面中加入Java语言而生成动态页面的技术:加入了新的标签(<%,%>,…)。
JSP是以Java和Servlet为基础开发而成的动态网页生成技术,它的底层实现是Java Servlet。
JSP页面由HTML代码和嵌入其中的Java代码所组成。服务器在页面被客户端所请求以后对这些Java代码进行处理,然后将生成的HTML页面返回给客户端的浏览器。


二、JSP的执行过程
客户端请求JSP页面——>JSP Parser解析*.jsp编译为*.java——>javac命令编译成*.class——>执行class文件——>响应返回结果给客户端
JSP代码中包含JSP元素和Template data两类。Template data指的是JSP引擎不处理的部分,就是JSP引擎会把除在标记<%...%>以外的部分直接传递出去而不进行任何处理。
JSP在第一次或修改JSP文件后执行都会调用JSP Parser将*.jsp文件编译成servlet程序,所以会比较慢。


三、JSP基本语法
1. 两种注释类型
(1)HTML注释
可以在JSP代码中添加一段HTML格式的注释,此注释发生到客户端,但不在页面上显示,语法如下:
<!-- HTML格式的注释,在客户端查看源代码时可见 -->
<!-- 此注释由<%=programmer%>添加-->

如果programmer为hackiller,则在客户端返回的注释是<!-- 此注释由hackiller添加-->
(2)JSP注释
写在JSP代码中,但不发送到客户端。
<%-- JSP注释,该注释会在JSP编译时被忽略掉 --%>
<%-- /*Scriptlet中的多行注释*/ --%>
<%-- /**Scriptlet中的多行注释,可以用javadoc从java文件中提取出来*/ --%>
<%-- JSP的单行注释 --%>

 


2. 3个脚本元素
(1)声明(Declaration)全局变量
<%! int i=0; String str="Hello World!"; %>
(2)表达式(Expression)
在JSP代码中,经常使用表达式来输出变量的值,可以在任何地方
<%! int a=1; int b=2; String str="Hello World!"; %>
<%=a+b%>  <%=str>

PS:不能用“;”号来作为表达式的结束符。但同样的表达式在Scriptlet中必须以分号来结尾。
(3)脚本段(Scriptlet)
脚本段用来包含一个有效地Java程序段
<% int b=3; %>局部变量


3. 3个指令元素
(1)page指令
<%@ page contentType="text/html;charset=utf-8"%>
定义JSP文件的全局属性,属性包括:language、extends、import、session、buffer、autoflush、isThreadSafe、info、errorPage、isErrorPage、contentType(服务端到客户端的输出格式)
其位置可以在页面的任何位置,但推荐放在页首。
language:声明脚本语言的种类,目前只能用"java"。
extends:标明JSP编译时需要加入的Java Class的全名,它会限制JSP的编译能力,慎用!
import:需要导入的java包列表。
session:设定客户是否需要HTTP Session。默认为true。
buffer:buffer的大小被out对象用于处理执行后的JSP对客户浏览器的输出。默认值为8Kb。
autoFlush:设置如果buffer溢出,是否要强制输出,如果定义其为true(默认值),输出正常;如果定义为false,会导致一个意外错误的发生。
isThreadSafe:设置JSP文件是否能多线程使用。默认为true。
info:文本信息。能够使用Servlet.getServletInfo()方法取回。
errorPage:设置处理异常事件的JSP文件
sErrorPage:设置此页是否为处理异常事件的页面,如果设置为true,就能使用exception对象。
contentType:设置MIME类型和字符编码集。MIME类型默认为text/html,字符集默认为charset=ISO-8859-1。
可以在一个页面中使用多个<%@page %>指令,但是除了import属性,其他的属性只能使用一次。
JSP缺省引入的包,下面这些包在JSP编译时已经导入了,所以在JSP文件中无需再用page指令引入:
java.lang.*
javax.servlet.*
javax.servlet.jsp.*
javax.servlet.http.*

 

(2)include指令

Html代码
  1. <%@ include file = "相对路径" %>  

 使用include指令可以在JSP中包含一个静态的文件,同时解析这个文件中JSP语句。
如果路径以“/”开头,那么此路径主要是参照jsp应用的上下文关系路径。
如果路径以文件名或文件目录开通,那么此路径就是正在使用的JSP文件的当前路径。

 

(3)taglib指令

Html代码
  1. <%@ taglib uri = "TagLibrary" prefix = "mypfx" %>  

 是用taglib指令定义一个标签库及其自定义的前缀。
uri:Uniform Resource Identifier根据标签的前缀对自定义的标签进行唯一的命名,可以是一个相对或绝对的路径
prefix:自定义标签的前缀。不要使用jsp、jspx、java、javax、servlet、sun、sunw作为前缀,这些已被Sun公司声明保留。

 

4. 8个动作指令
(1)页面跳转:<jsp:forward>
<jsp:forward>标签从一个jsp文件向另外一个文件传递一个包含用户请求的request对象。
共包含2个属性
page属性是一个表达式或是一个字符串用于说明将要定向的文件或URL。
<jsp:param>向一个动态文件发送一个或多个参数。如果使用了<jsp:param>标签,目标文件必须是动态的文件(如Servlet或者JSP等)

Html代码 复制代码
  1. <jsp:forward page=test.jsp>  
  2.  <jsp:param name="username" value="<%=user%>"/>  
  3.  <jsp:param name="password" value="12345678"/>  
  4. </jsp:forward>  

 通过request.getParameter("username")获取用户名

(2)包含页面:<jsp:include>
<jsp:include>允许包含静态和动态Web资源,这两种包含的结果是不同的。
如果包含的仅是静态文件,那么这种包含仅仅是把包含文件的内容加到JSP文件中去,类似于<%@include%>;
如果包含的是动态web资源,那么这个被包含的文件也会被JSP编译器执行。
如果这个包含文件是动态的,那么还可以使用<jsp:param》传递参数和参数值。

(3)创建Bean:<jsp:useBean>
创建一个Bean实例并指定她的名字和作用范围。
<jsp:useBean id="beanInstanceName" scope="page|request|session|application" class="package.className"/>
包含5个属性。
id:在所定义的范围中确认Bean的变量,程序中用id来使用此Bean实例。id的值对大小写敏感。
scope:Bean存在的范围及id变量名的有效范围。默认值为page。
class:使用new关键字及class构造器从一个class中实例一个bean。这个class不能是抽象的,并且必须有一个公用的,没有参数的构造器。
type:如果这个Bean已经指定范围中存在,使用type将赋予这个Bean一个数据类型。如果使用type的同时没有使用class或beanName,Bean将不会被实例化。
beanName:beanName可以是字符串的package.class,也可以是jsp表达式,它的值会传递给Beans.instantiate方法。type的值可以与beanName相同也可以是它的基类,或者是它所实现的接口。

(4)设置Bean属性:<jsp:setProperty>
<jsp:setProperty name="beanInstanceName" property="*"|property="propertyName" value="string|<%=expression%>"|param="parameterName"/>
name:表示已经在<jsp:useBean>中创建的Bean实例的名字,即id。
property:匹配Bean中的属性
param:指request对象中的参数名,将对应的值设定给Bean的属性。
value:使用指定的值来设定Bean属性。这个值可以是字符串,也可以是表达式。如果是字符串,那么就会被转换成Bean属性的类型(如"0.98"会转化成double类型0.98)。如果是表达式,则要求它的类型与Bean属性的类型一致。
PS:在同一个<jsp:setProperty>中不能同时使用param属性和value属性

(5)取得Bean属性:<jsp:getProperty>
获取已经存在的Bean对象中的属性值,在页面中显示。
<jsp:getProperty name="beanInstanceName property="propertyName"/>
name:与存在的对象实例的名字相同。
property:对象中属性名


(6)使用Applet插件:<jsp:plugin>

Html代码
  1. <jsp:plugin type="applet" code="MeidaPlay.class" codebase="../classes">  
  2.  <jsp:parmas>  
  3.   <jsp:param name="way" value="Hall"/>  
  4.  </jsp:params>  
  5.  <jsp:fallback>  
  6.   <p>Unable to load applet!</p>  
  7.  </fallback>  
  8. </jsp:plugin>  

使用<jsp:plugin>插入一个applet或Bean,必要的话还要下载一个Java插件用于执行它。


(7)定义参数:<jsp:param>
可以在<jsp:include>、<jsp:forward>、<jsp:plugin>中使用。

(8)插件错误提示:<jsp:fallback>
当<jsp:plugin>插件不能够正常显示时显示提示信息。

 

三、JSP内置对象
1. Request:请求对象
该对象封装了用户提交的信息,通过调用该对象相应方法可以获取封装的信息。
当request对象获取客户提交的汉字字符是,会出现乱码,必须进行特殊处理。
常用方法:
getParameter(String parameterName):获取表单提交的信息。
getProtocol():获取客户使用的协议。
getServletPath():获取客户提交信息的页面。
getMethod():获取客户提交信息的方式。
getHeader(String str):获取HTTP头文件中的accept、accept-encoding和Host的值。
getRermoteHost():获取客户的IP地址。
getServerName:获取服务器名称。
getServerPort:获取服务器的端口号。
getParameterNames():获取客户段提交的所有参数的名字。

 

2. Response:响应对象
对客户的请求做出动态的响应,向客户端发生数据。
(1)动态响应contentType属性
用page指令静态地设置页面的contentType属性,动态设置这个属性时使用response.setContextType("text/html;charset=utf-8");
(2)Response重定向
response.sendRedirect("index.jsp");

 

3. Session:会话对象
(1)什么是Session对象?
Session对象在第一个JSP页面被装载时自动创建,完成会话期管理。
从一个客户打开浏览器并连接到服务器开始,到客户关闭浏览器离开这个服务器结束,被称为一个会话。
(2)Session对象的ID
当一个客户首次访问服务器上的一个JSP页面时,JSP引擎产生一个Session对象,同时分配一个String类型的ID号,JSP引擎同时将这个ID号发送到客户端,存放在Cookie中,这样Session对象,直到客户关闭浏览器后服务器端改该客户的Session对象才取消,并且和客户的会话对应关系消失。
(3)常用方法
public String getId():获取Session对象的编号。
public void setAttribute(String str,Object obj):将参数对象添加到Session对象中。
public Object getAttribute():根据属性名获取在Session对象中的属性。
public boolean isNew():判断是否是一个新的客户。

 

4. Application:应用程序对象
(1)什么是Application对象?
在服务器启动后就产生了这个Application对象,当客户在所访问的网站的各个页面之间浏览时,这个Appliaction对象都是同一个,所有的客户共享这个内置的Application对象。
(2)常用方法
setAttribute(String key,Object obj):将参数对象添加到Application对象中。
getAttibute(String key):根据属性名获取Application对象中的属性

 

5. Out:输出对象
out对象是一个输出流,用来向客户输出数据。
out.print():输出各种类型数据。
out.newLine():输出一个换行符。
out.close():关闭流。

 

6. Config:配置对象
一般我们使用Config对象获取一些初始化配置信息,常用的方法有getInitParameter和getInitParameterNames,以获得Servlet初始化时的参数。

 

7.Page:页面对象
page对象代表了正在运行的由JSP文件产生的类对象,不建议一般读者使用。

 

8.PageContext:页面上下文对象
JSP引入的PageContext的类,通过它可以访问页面的许多属性。pageContext变量存储与当前页面相关联的PageContext对象的值。PageContext类拥有getRequest、getResponse、getOut、getSession等方法。

 

9.Exception:例外对象
exception对象代表了JSP文件运行时所产生的例外对象,此对象不能在一般的JSP文件中直接使用,而只能在使用了

<%@page isErrorPage="true"%>的JSP文件中使用。这是因为JSP文件运行时产生的错误对象被向外抛出,只能被使用了<%@page isErrorPage="true"%>标记从而具有拦截错误对象功能的JSP所拦截。最常用的方法就是getMessage,用来获取错误信息。

 

四、实例
登陆页面:index.jsp

Html代码 复制代码
  1. <%@ page language="java" pageEncoding="UTF-8" contentType="text/html; charset=UTF-8" %>  
  2. <html>  
  3.  <head>  
  4.   <title>系统登录</title>  
  5.   <meta http-equiv="Content-Type" content="text/html; charset=gb2312">  
  6.   <link href="css/vbulletin.css" rel="stylesheet" type="text/css">  
  7.   <style type="text/css">  
  8.    .btn {   
  9.     font-family: "Tahoma", "宋体";   
  10.     font-size: 9pt;   
  11.     color: #001E3C;   
  12.     BORDER-BOTTOM: #6794BC 1px solid;   
  13.     BORDER-LEFT: #8BB8E0 1px solid;   
  14.     BORDER-RIGHT: #6794BC 1px solid;   
  15.     BORDER-TOP: #8BB8E0 1px solid;   
  16.     background-image: url(image/buttonbg.gif);   
  17.     CURSOR: hand;   
  18.     font-style: normal;   
  19.     padding-left: 3px;   
  20.     padding-right: 3px;   
  21.    }   
  22.   </style>     
  23.   <script type="text/javascript">  
  24.    function doLogin(){   
  25.     var vform = document.loginform;   
  26.     if(!loginform.username.value){   
  27.      alert("请输入用户名!")   
  28.      return;   
  29.     }   
  30.         
  31.     if(!loginform.password.value){   
  32.      alert("请输入密码!")   
  33.      return;   
  34.     }   
  35.       
  36.     vform.submit();   
  37.        
  38.    }   
  39.   </script>  
  40.  </head>  
  41.  <body topmargin="0" leftmargin="0" >  
  42.   <form action="receive.jsp" name="longinForm" method="post">  
  43.    <table width="100%" height="100%">    
  44.     <tr>  
  45.      <td align="center" valign="middle">  
  46.       <TABLE id="form1"       
  47.        cellspacing="0" cellpadding="0" border="0" style="width: 500;">  
  48.        <CAPTION style="display: none">  
  49.        </CAPTION>  
  50.        <TR>  
  51.         <TD>  
  52.          <TABLE width="100%" height="100%" cellspacing="0"    
  53.           cellpadding="0" border="0" style="table-layout: fixed">  
  54.           <TR>  
  55.            <TD valign="top">  
  56.             <FIELDSET id="form1_group0" style="width: 100%;">  
  57.              <LEGEND>系统登录</LEGEND>  
  58.              <DIV>  
  59.               <DIV  style="width: 100%; height: 100%">  
  60.                <TABLE  width="100%" cellspacing="0"  
  61.                 cellpadding="4" border="0" style="table-layout: fixed;">  
  62.                 <COLGROUP>  
  63.                  <COL width="100"></COL>  
  64.                  <COL width="50%"></COL>  
  65.                  <COL width="100"></COL>  
  66.                  <COL width="50%"></COL>  
  67.                 </COLGROUP>  
  68.                 <TR>  
  69.                  <TD  align="right">  
  70.                   用户名   
  71.                  </TD>  
  72.                  <TD class="InnerTableContentCell">  
  73.                   <input type="text" name="username"  
  74.                    style="width: 100%;">  
  75.                  </TD>  
  76.                  <TD  align="right">  
  77.                   密码   
  78.                  </TD>  
  79.                  <TD>  
  80.                   <input type="password" name="password"  
  81.                    style="width: 100%;" />  
  82.                   <input type="hidden" name="action2" value="0">  
  83.                  </TD>  
  84.                 </TR>  
  85.                 <TR>  
  86.                  <TD colSpan="4"  
  87.                   align="right">  
  88.                   <input type="button" name="login" value="登录" onclick="this.form.submit();"   class="btn"/>  
  89.                  </TD>  
  90.                 </TR>  
  91.                </TABLE>  
  92.               </DIV>  
  93.              </DIV>  
  94.             </FIELDSET>  
  95.            </TD>  
  96.           </TR>  
  97.          </TABLE>  
  98.         </TD>  
  99.        </TR>  
  100.       </TABLE>  
  101.      </td>  
  102.     </tr>  
  103.    </table>  
  104.   </form>  
  105.  </body>  
  106. </html>  

 

接收数据页面:receive.jsp

Html代码 复制代码
  1. <%@ page language="java" pageEncoding="UTF-8" contentType="text/html; charset=UTF-8" info="动作标签"%>  
  2.   
  3. <jsp:useBean id="userVo" class="exercise.vo.UserVo" scope="request">  
  4.   <jsp:setProperty name="userVo" property="name" param="username"/>  
  5.   <jsp:setProperty name="userVo" property="password" param="password"/>  
  6. </jsp:useBean>  
  7.   
  8. <html>  
  9.   <head>  
  10.     <meta http-equiv="Content-Type" content="text/html;charset=UTF-8" >  
  11.     <link href="css/vbulletin.css" rel="stylesheet" type="text/css"
  12. jsp基础
  13. jsp 基础
  14. JSP基础
  15. JSP基础
  16. JSP基础
  17. Jsp基础
  18. JSP基础!
  19. JSP基础
  20. JSP基础
  21. JSP基础
  22. JSP基础
  23. JSP基础
  24. JSP基础
  25. JSP基础
  26. JSP基础
  27. JSP基础
  28. jsp基础
  29. JSP基础
  30. 《Windows核心编程》读书心得——内核对象(2)
  31. 只有mdf文件的恢复技术(已实践成功)
  32. 局域网传文件
  33. 网易面试中的几个概念
  34. SQL SERVER 2000连接字符串
  35. JSP基础
  36. POJ 2125 Destroying The Graph
  37. Python Django 第一步:安装配置 windows环境
  38. Squid-Imposter: A Squid Based Sidejacking Proxy!
  39. VS2010安装到 "VsaEnv_Setup_x86_chs" 卡住的解决办法
  40. 无聊周末
  41. 查找元素问题
  42. 稀疏矩阵相加(十字链表实现)
  43. [原创]解决Unicode的乱码问题