王朝网络
分享
 
 
 

JSP基础

王朝学院·作者佚名  2009-12-11  
宽屏版  字体: |||超大  

一、JSP简介

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代码

<%@ include file = "相对路径" %>

使用include指令可以在JSP中包含一个静态的文件,同时解析这个文件中JSP语句。

如果路径以“/”开头,那么此路径主要是参照jsp应用的上下文关系路径。

如果路径以文件名或文件目录开通,那么此路径就是正在使用的JSP文件的当前路径。

(3)taglib指令

Html代码

<%@ 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代码

<jsp:forward page=test.jsp>

<jsp:param name="username" value="<%=user%>"/>

<jsp:param name="password" value="12345678"/>

</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代码

<jsp:plugin type="applet" code="MeidaPlay.class" codebase="../classes">

<jsp:parmas>

<jsp:param name="way" value="Hall"/>

</jsp:params>

<jsp:fallback>

<p>Unable to load applet!</p>

</fallback>

</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文件运行时产生的错误对象被向外抛出,只能被使用了<%@pageisErrorPage="true"%>标记从而具有拦截错误对象功能的JSP所拦截。最常用的方法就是getMessage,用来获取错误信息。

四、实例

登陆页面:index.jsp

Html代码

<%@ page language="java" pageEncoding="UTF-8" contentType="text/html; charset=UTF-8" %>

<html>

<head>

<title>系统登录</title>

<meta http-equiv="Content-Type" content="text/html; charset=gb2312">

<link href="css/vbulletin.css" rel="stylesheet" type="text/css">

<style type="text/css">

.btn {

font-family: "Tahoma", "宋体";

font-size: 9pt;

color: #001E3C;

BORDER-BOTTOM: #6794BC 1px solid;

BORDER-LEFT: #8BB8E0 1px solid;

BORDER-RIGHT: #6794BC 1px solid;

BORDER-TOP: #8BB8E0 1px solid;

background-image: url(image/buttonbg.gif);

CURSOR: hand;

font-style: normal;

padding-left: 3px;

padding-right: 3px;

}

</style>

<script type="text/javascript">

function doLogin(){

var vform = document.loginform;

if(!loginform.username.value){

alert("请输入用户名!")

return;

}

if(!loginform.password.value){

alert("请输入密码!")

return;

}

vform.submit();

}

</script>

</head>

<body topmargin="0" leftmargin="0" >

<form action="receive.jsp" name="longinForm" method="post">

<table width="100%" height="100%">

<tr>

<td align="center" valign="middle">

<TABLE id="form1"

cellspacing="0" cellpadding="0" border="0" style="width: 500;">

<CAPTION style="display: none">

</CAPTION>

<TR>

<TD>

<TABLE width="100%" height="100%" cellspacing="0"

cellpadding="0" border="0" style="table-layout: fixed">

<TR>

<TD valign="top">

<FIELDSET id="form1_group0" style="width: 100%;">

<LEGEND>系统登录</LEGEND>

<DIV>

<DIV style="width: 100%; height: 100%">

<TABLE width="100%" cellspacing="0"

cellpadding="4" border="0" style="table-layout: fixed;">

<COLGROUP>

<COL width="100"></COL>

<COL width="50%"></COL>

<COL width="100"></COL>

<COL width="50%"></COL>

</COLGROUP>

<TR>

<TD align="right">

用户名

</TD>

<TD class="InnerTableContentCell">

<input type="text" name="username"

style="width: 100%;">

</TD>

<TD align="right">

密码

</TD>

<TD>

<input type="password" name="password"

style="width: 100%;" />

<input type="hidden" name="action2" value="0">

</TD>

</TR>

<TR>

<TD colSpan="4"

align="right">

<input type="button" name="login" value="登录" onclick="this.form.submit();" class="btn"/>

</TD>

</TR>

</TABLE>

</DIV>

</DIV>

</FIELDSET>

</TD>

</TR>

</TABLE>

</TD>

</TR>

</TABLE>

</td>

</tr>

</table>

</form>

</body>

</html>

接收数据页面:receive.jsp

Html代码

<%@ page language="java" pageEncoding="UTF-8" contentType="text/html; charset=UTF-8" info="动作标签"%>

<jsp:useBean id="userVo" class="exercise.vo.UserVo" scope="request">

<jsp:setProperty name="userVo" property="name" param="username"/>

<jsp:setProperty name="userVo" property="password" param="password"/>

</jsp:useBean>

<html>

<head>

<meta http-equiv="Content-Type" content="text/html;charset=UTF-8" >

<link href="css/vbulletin.css" rel="stylesheet" type="text/css">

</head>

<body>

This is my JSP page. <br>

<hr>用&lt;jsp:getProperty&gt;获取表单中提交过来的值<br>

name:<jsp:getProperty property="name" name="userVo"/><br>

password:<jsp:getProperty property="password" name="userVo"/>

<br><br><hr>

<%

out.println("从vo对象中直接获取:<br> name:"+userVo.getName()+

"<br>password:"+userVo.getPassword()+"<br>");

String serviceName = request.getServerName();//1.jsp内部的request对象

out.println("<br><hr>服务器名: "+serviceName);

out.println("<br>MIME类型: "+response.getContentType());//2.jsp内部的response对象

session.setAttribute("sessionName","jsp内部的session对象");//3.jsp内部的session对象

out.println("<br>session对象: "+session.getAttribute("sessionName"));//4.jsp内部的out对象

pageContext.setAttribute("pageContext","上下文环境的引用");//5.jsp内部的pageContext对象

//6. application

//7. config ServletConfig的实例

//8. page java.lang.Object的实例

//9. exception 必须在page指令中isErrorPage=true的页面使用 java.lang.Throwable的一个实例

String info = pageContext.getServletContext().getServerInfo();

out.println("获取page指令中的info属性:"+info);

%>

</body>

</html>

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
>>返回首页<<
推荐阅读
 
 
频道精选
静静地坐在废墟上,四周的荒凉一望无际,忽然觉得,凄凉也很美
© 2005- 王朝网络 版权所有