JSP内置对象上.docx

上传人:b****5 文档编号:4956301 上传时间:2022-12-12 格式:DOCX 页数:26 大小:148.34KB
下载 相关 举报
JSP内置对象上.docx_第1页
第1页 / 共26页
JSP内置对象上.docx_第2页
第2页 / 共26页
JSP内置对象上.docx_第3页
第3页 / 共26页
JSP内置对象上.docx_第4页
第4页 / 共26页
JSP内置对象上.docx_第5页
第5页 / 共26页
点击查看更多>>
下载资源
资源描述

JSP内置对象上.docx

《JSP内置对象上.docx》由会员分享,可在线阅读,更多相关《JSP内置对象上.docx(26页珍藏版)》请在冰豆网上搜索。

JSP内置对象上.docx

JSP内置对象上

1、课程名称:

JSP内置对象

2、知识点

2.1、上次课程的主要知识点

1、page指令的使用,设置MIME类型、指定编码、导包操作;

2、两种包含的使用:

·静态包含:

<%@include%>,先包含后处理;

·动态包含:

forward>,先处理后包含结果,可以向被包含页传递参数。

3、跳转操作:

foward>,跳转之后地址栏不发生任何的改变,所以此种称为服务器端跳转,可以向跳转的页面中传递参数。

4、现在的参数都使用request.getParaemter()进行接收,此操作返回String型的数据,如果没有参数返回的内容就是null;

5、使用JSP+JDBC完成的登陆程序必须可以编写熟练;

6、理解分页程序的操作原理,并且可以使用分页组件进行操作。

2.2、本次预计讲解的知识点

1、JSP中的九个内置对象的概览;

2、背下JSP中四种属性范围的操作;

3、request内置对象的使用;

4、response内置对象使用;

5、将JSP的程序进行一个整体的开发项目的操作。

3、具体内容

3.1、内置对象(重点)

之前如果要想使用一个对象,则首先必须使用关键字new进行对象的实例化操作,对象的名称也由用户自己决定,而所谓的内置对象指的是,在WebContainer之中已经为用户提供好了若干个对象,用户直接使用即可,例如:

之前接收参数操作时使用的request.getParameter()中的request就是一个内置对象,在JSP中一共有以下九个内置对象。

背以上九个内置对象的时候,一定要记住的是背下对应的包.接口名称。

3.2、属性的操作(核心重点)

属性操作可能现阶段感觉不到其作用,但是其作用必须结合到标准的开发或者是实际的应用中来解释,下面先记住这四种属性范围的特点,慢慢的消化。

所谓的属性范围就是指一个保存的对象(属性),可以保存的JSP页面的范围,在JSP中提供了如下三个方法进行属性的操作:

·设置属性:

publicvoidsetAttribute(Stringname,Objectvalue);

·取得属性:

publicObjectgetAttribute(Stringname);

·删除属性:

publicvoidremoveAttribute(Stringname);

但是以上的三个方法在四个内置对象中都有:

pageContext(page)、request、session、application。

3.2.1、page属性范围(pageContext)

所谓的page属性范围指的就是一个对象只能保存在一个JSP页面之中,跳转之后无效,但是如果要想进行page属性的操作必须使用pageContext的这个内置对象完成。

范例:

设置和取得page属性

<%@pagecontentType="text/html"pageEncoding="GBK"%>

<%@pageimport="java.util.*"%>

<%//设置属性

pageContext.setAttribute("username","SMITH");

pageContext.setAttribute("birthday",newDate());

%>

<%//取得属性

Stringname=(String)pageContext.getAttribute("username");

DatemyDate=(Date)pageContext.getAttribute("birthday");

%>

姓名:

<%=name%>

生日:

<%=myDate%>

现在是在当前页中设置的属性,所以也可以直接在当前页中取得,但是如果现在发生了跳转的话,则无法取得。

范例:

第一个页面设置属性

<%@pagecontentType="text/html"pageEncoding="GBK"%>

<%@pageimport="java.util.*"%>

<%//设置属性

pageContext.setAttribute("username","SMITH");

pageContext.setAttribute("birthday",newDate());

%>

forwardpage="scope_b.jsp"/>

范例:

第二个页面取得属性

<%@pagecontentType="text/html"pageEncoding="GBK"%>

<%@pageimport="java.util.*"%>

<%//取得属性

Stringname=(String)pageContext.getAttribute("username");

DatemyDate=(Date)pageContext.getAttribute("birthday");

%>

姓名:

<%=name%>

生日:

<%=myDate%>

现在由于已经发生了跳转的操作,所以在一个页面上设置的属性就不存在了。

3.2.2、request属性范围

如果现在希望属性在一次服务器端跳转后可以继续取得的话,那么就可以将属性范围扩大到request范围上。

范例:

设置属性

<%@pagecontentType="text/html"pageEncoding="GBK"%>

<%@pageimport="java.util.*"%>

<%//设置属性

request.setAttribute("username","SMITH");

request.setAttribute("birthday",newDate());

%>

forwardpage="scope_b.jsp"/>

范例:

取得属性

<%@pagecontentType="text/html"pageEncoding="GBK"%>

<%@pageimport="java.util.*"%>

<%//取得属性

Stringname=(String)request.getAttribute("username");

DatemyDate=(Date)request.getAttribute("birthday");

%>

姓名:

<%=name%>

生日:

<%=myDate%>

如果现在设置的是request属性范围的话,那么不管有多少个页面,只要是在一次服务器端跳转上都会继续保留下来。

但是如果说现在换成了超链接呢?

<%@pagecontentType="text/html"pageEncoding="GBK"%>

<%@pageimport="java.util.*"%>

<%//设置属性

request.setAttribute("username","SMITH");

request.setAttribute("birthday",newDate());

%>

链接

由于现在发生的是客户端跳转,所以没有了,一个request只能保存在一个请求之中。

3.2.3、session属性范围

如果现在希望某一个属性不管是服务器端还是客户端跳转都可以继续取得属性操作的话,那么就可以使用session属性范围完成。

范例:

设置属性

<%@pagecontentType="text/html"pageEncoding="GBK"%>

<%@pageimport="java.util.*"%>

<%//设置属性

session.setAttribute("username","SMITH");

session.setAttribute("birthday",newDate());

%>

链接

范例:

取得属性

<%@pagecontentType="text/html"pageEncoding="GBK"%>

<%@pageimport="java.util.*"%>

<%//取得属性

Stringname=(String)session.getAttribute("username");

DatemyDate=(Date)session.getAttribute("birthday");

%>

姓名:

<%=name%>

生日:

<%=myDate%>

链接

通过session设置的属性范围不受跳转的限制,但是如果现在新打开了一个浏览器的话,就无法保存了。

因为对于服务器来讲,每一个新打开的浏览器都是一个新的session,而且在之前的oracle也学习过,一个session就表示一个用户,例如:

在实际的生活之中,要想发送邮件需要登陆邮箱,登陆之后无论怎么发送,发送人永远是这个登陆帐号。

session用于保存每一个用户自己的信息,一个属性保存的范围越大,占用的资源就越多。

3.2.4、application属性范围

如果将一个属性保存在了application范围,则就意味着这个属性保存在服务器上,这样,每一个用户(每一个用户就是一个session)都可以访问此属性。

范例:

设置属性

<%@pagecontentType="text/html"pageEncoding="GBK"%>

<%@pageimport="java.util.*"%>

<%//设置属性

application.setAttribute("username","SMITH");

application.setAttribute("birthday",newDate());

%>

链接

范例:

取得属性

<%@pagecontentType="text/html"pageEncoding="GBK"%>

<%@pageimport="java.util.*"%>

<%//取得属性

Stringname=(String)application.getAttribute("username");

DatemyDate=(Date)application.getAttribute("birthday");

%>

姓名:

<%=name%>

生日:

<%=myDate%>

链接

由于application的属性是保存在服务器上的,所以每个用户都可以访问,但是如果在此属性范围中保存的内容过多,则肯定将会过多的占用服务器端的资源,这样对于服务器的性能肯定有所影响。

从实际应用来讲,application属性范围出现的比较少,只有在保存公共属性的时候才会用到。

3.2.2、page属性范围深入(pageContext)

通过以上的代码可以感觉出page属性范围似乎是一个没有用处的玩意,但是从实际来讲,page属性范围是最有用一个,这一点必须结合标准设计模式来讲,而且如果再深入的话,实际上四种属性范围都是通过pageContext指定的,在pageContext中定义了如下一个属性设置方法:

publicvoidsetAttribute(Stringname,Objectvalue,intscope)

此方法之中多了一个设置的范围,而这个范围需要指定一个int型的数据,而这个数据由PageContext类中的以下常量提供:

·PAGE范围:

publicstaticfinalintPAGE_SCOPE

·REQUEST范围:

publicstaticfinalintREQUEST_SCOPE

·SESSION范围:

publicstaticfinalintSESSION_SCOPE

·APPLICATION范围:

publicstaticfinalintAPPLICATION_SCOPE

如果使用了普通的属性设置方法,则默认的范围就是PAGE范围。

范例:

通过pageContext指定request属性范围

<%@pagecontentType="text/html"pageEncoding="GBK"%>

<%@pageimport="java.util.*"%>

<%//设置属性

pageContext.setAttribute("username","SMITH",PageContext.REQUEST_SCOPE);

pageContext.setAttribute("birthday",newDate(),PageContext.REQUEST_SCOPE);

%>

forwardpage="scope_b.jsp"/>

范例:

取得属性的时候依然使用普通的request对象完成

<%@pagecontentType="text/html"pageEncoding="GBK"%>

<%@pageimport="java.util.*"%>

<%//取得属性

Stringname=(String)request.getAttribute("username");

DatemyDate=(Date)request.getAttribute("birthday");

%>

姓名:

<%=name%>

生日:

<%=myDate%>

通过以上的代码可以发现,pageContext算是一个最全能的对象,这一点会随着课程的深入而继续深入讲解。

但是从实际的使用来讲,每种属性范围还是习惯于使用指定的对象,例如:

request范围就使用request对象设置,而基本上不会通过pageContext设置。

3.3、request内置对象(核心重点)

在B/S的程序之中都是基于请求(request)/回应(response)的操作流程,如果现在服务器端要想取得客户端的某些信息就只能依靠request内置对象完成,request内置对象对应的接口是javax.servlet.http.HttpServletRequest,此接口定义:

publicinterfaceHttpServletRequest

extendsServletRequest

HttpServletRequest接口是javax.servlet.ServletRequest接口的子接口,而且ServletRequest也只有一个子接口,那么为什么在设计的时候不将这两个接口合成一个接口呢?

之所以这样设计,主要的原因是因为现在的JSP中使用的是HTTP协议,如果以后再有新的协议出现的话,那么就可以让新的协议定义成一个接口,并将一些公共的操作直接从ServletRequest接口中继承而来。

3.3.1、接收单个参数

在request对象之中使用最多的就是在于参数的接收上,例如,之前编写表单都可以传递参数,这些参数都直接使用:

publicStringgetParaemeter(Stringstr)的方法进行接收。

范例:

下面定义表单

JavaScript程序

请输入内容:


选择性别:


以上表单中定义了三个参数,所以下面在input.jsp页面中也应该接收这样三个参数。

范例:

接收参数

<%@pagecontentType="text/html"pageEncoding="GBK"%>

HELLO.jsp

<%//此处编写java程序

Stringstr=request.getParameter("msg");

Stringsex=request.getParameter("sex");

Stringid=request.getParameter("id");

%>

信息:

<%=str%>

性别:

<%=sex%>

ID:

<%=id%>

发现现在的信息可以正常的显示,但是这里面有一个问题,在使用表单提交的时候使用过一个属性指定过表单的提交方式,method的属性,method有两种提交方式:

post、get,这两种区别如下:

·post提交:

提交之后的地址栏为目标地址栏不改变,由于不显示,所以可以提交一些比较大的数据,例如:

小型的图片,实际中使用最多的就是此种提交方式;

·get提交:

提交之后的地址栏改变会加入一些信息,由于地址栏的输入长度为4K~5K的范围,所以不能提交太大的数据;

但是,下面继续来分析一下get提交的形式:

input.jsp?

msg=fdsafsad&sex=FEMALE&id=30

后面自动加入了一些信息,这些信息的组成:

xxx.jsp?

var=value&var=value,而这种方式在开发上来讲,就称为地址重写的方式,即:

对于参数的提交也可以直接通过超链接完成。

范例:

编写超链接

id=1&msg=hello&sex=male">链接

这种参数的传递方式经常使用再,无法使用表单而又必须传递参数的形式。

注意点:

关于getParaemter()和getAttribute()的区别

·getParameter()主要的功能是接收参数,那么参数的来源一共有三种:

表单提交、标签传递、地址重写;

·getAttribute()主要用于属性接收上,使用getAttribute()接收的属性一定是先使用过setAttribute()设置过的。

getParameter()方法现在是在接收参数,但是每次只接收了一个参数,如果现在传递的是多个参数的话,则无法接收,例如:

复选框。

JavaScript程序

请输入内容:


选择性别:


兴趣:

跑步

看书

音乐

id=1&msg=hello&sex=male">链接

现在使用getParameter()根本就无法接收,因为现在复选框一旦提交只能够接收第一个,所以必须按照数组的形式接收,此时使用的方法:

publicString[]getParameterValues(Stringname)

<%@pagecontentType="text/html"pageEncoding="GBK"%>

HELLO.jsp

<%//此处编写java程序

Stringstr=request.getParameter("msg");

Stringsex=request.getParameter("sex");

Stringid=request.getParameter("id");

Stringinst[]=request.getParameterValues("inst");

%>

信息:

<%=str%>

性别:

<%=sex%>

ID:

<%=id%>

兴趣:

<%

if(inst!

=null){

for(intx=0;x

%>

<%=inst[x]%>、

<%

}

}

%>

对于JSP的开发而言,一定要考虑到数据可能不传递的情况。

3.3.2、乱码解决

在Java的开发之中编码绝对是一个头疼的问题,而且也是非常迫切需要解决的问题。

JavaScript程序

请输入内容:


如果这种代码按照最早的getParameter()接收的话,则如果是中文,肯定是乱码,因为现在的程序所有的编码都是使用了ISO8859-1的编码,所以无法识别中文,这种情况下可以采用request对象中的方法:

·指定统一的编码:

publicvoidsetCharacterEncodi

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 高等教育 > 军事

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1