我们在做javaweb开发的时候经常会用到jsp的内置对象, 会用到一些常用的内置对象的方法, 对此, 本文总结一下常用内置对象的常用方法.
request对象:
使用场合:
当我们的系统被用户使用的时候,就需要从用户那得到用户的需求, 而根据用户的需求生成一个用户可以看到结果的页面,就这样实现了系统与用户的交互。在web中,用户的需求被抽象成为一个request对象,这个对象的“身上”包括用户的需求。例如我们通常通过表单提交数据,通过url方式传递参数,这就是用户的需求,request就是用来收集类似这些用户的输入数据和参数。
同时,request对象中还包括一些服务器端口信息,例如端口,真实路径,访问协议等信息。通过request对象可以访问服务器这些信息。
reuqeust对象的主要方法:
request对象主要方法 | 方法的作用 |
---|---|
getAttribute(String name) setAttribute(String name,Object o) |
可以取出指定名称的属性值. 需要用setAttribute(String name,Object o)对这个方法进行赋值. |
getContextpath() | 获取服务器上上下文的路径 |
getCookies() | 这个方法取出客户端的cookies |
getHeader(String name) | 取出指定的Http包头的属性值. |
getParameter(String name) | 取出客户单提交到服务器的参数(经常被用到) |
getServerName() | 取得服务器的名称 |
getServerPort() | 取得服务器端口号 |
removeAttribute(String name) |
移除指定名称的一个属性
|
getRemoteAddr() |
返回客户端机器的IP地址.
|
request.getContextpath():
这个属性也经常被用到,如果查看api文档,你很快就能明白,他是用于取得根目录的。
例如我们的页面完整的链接路径为: http://localhost:80/JavaWeb/User/login
request.getContextPath(): 返回的是 /JavaWeb -------根目录名称
request.getSchema(): 返回的是 http ----------使用的协议
request.getServerName(): 返回的是 localhost --------服务器名字
request.getServerPort(): 返回的是 80 -------端口号
我们一般这样使用:
String path = request.getContextPath();
//默认成为根了.
String basePath = request.getScheme() + "://"
+ request.getServerName() + ":" + request.getServerPort()
+ path + "/";
配合jsp的base标签 :<base href="<%=basePath%>"> 这样来解决相对路径中层次太多的问题。
再说说getAttribute和getParameter()用法的区别,我们经常会用到.
理解了一下,可以这样理解,很简单。
request.getAttribute(string name);
getAttribute就像是如果你去外企公司工作,有的公司会给你起一个英文的名字,当你发工资的时候就会找你的英文的名字,通
过这个英文名字,得到你整个人的信息。在这个过程中,可以把你请求发工资看做是一次request请求,你传递给公司一个英文名
字,(request.setAttribute("love", ZHANG) ),公司就通过这个英文名字找到你((ZHANG)request.getAttribute("love") ) ,当然同时已经
给你的银行卡属性赋值啦(打钱啦) 。 在这个过程公司可以看做是服务端,你可以看做是客户端,这就是setAttribute和getAttribute
了。
我们看到了,在使用getAttribute属性的时候,必须在一次请求的过程中,前面已经通过setAttribute属性给这个对象起了一个“名
字”了,这样才能去得到,否则为null值。
request.getParameter(String name);
而getParameter在一个request请求过程中,请求的是表单或者URL字符串相对应的值。就相当于,你request,公司发工资给
你,你request的时候一定会把银行卡号也提交上去,这让可以让财务部得到你的卡号,再返回给你了。
比较 | request.getParameter | request.getAttribute |
生命周期 | 一次请求过后消失 | 一次请求过后消失 |
返回值类型 | 返回是字符串类型 | 返回是一个对象类型,一般需要进行强制转换 |
取得的东西 |
取得的是表单中 一个对象名字的value值。 或者是通过URL传递过来的字符串的值。 |
取得一次请求,给对象取名,取得这个对象。 |
重定向 |
客户端重定向时,点击链接或提交按钮 |
服务器端重定向,在servlet中使用了forward |
例如我们的test1.java文件中,我们设置Model对象,同时通过转发到我们的item_maint.jsp页面。代码如下:
//设置参数.
request.setAttribute("pageModel", pageModel);
//转到.
request.getRequestDispatcher("/basedata/item_maint.jsp").forward(request, response);
我们的item_maint.jsp页面:
//得到服务器端设置的对象。
PageModel pageModel = (PageModel) request.getAttribute("pageModel");
getParameter例子
request获取表单中的数据:
<%@ page language="java" contentType="text/html; charset=GB18030"
pageEncoding="GB18030"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=GB18030">
<title>request获取表单提交的数据</title>
</head>
<body>
下面是表单的内容:
<form>
用户名:<input type="text" name="userName" size="10"/>
密 码:<input type="password" name="password" size="10"/>
<input type="submit" value="提交">
</form>
下面是表单提交后通过request取得的到的表单数据。
<%
out.println("表单输入的用userName为" +request.getParameter("userName"));
out.println("表单输入的用户密码为" + request.getParameter("password"));
%>
</body>
</html>
显示:
当然也可以是从另一个页面取得表单的值,就需要在另一个页面写方法了。
通过截取URL字符串获得值:
例如下面的jsp文件:
<%@ page language="java" contentType="text/html; charset=GB18030"
pageEncoding="GB18030"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=GB18030">
<title>request获取url传递的字符串值。</title>
</head>
<%
// 获取客户端提交的参数。
String paramString = request.getParameter("param");
%>
<body>
<a href="testFile.jsp?param=Hello">单击链接</a>
您提交的参数为:<%=paramString %>
</body>
</html>
结果:
虽然是看似简单的小应用,却贯彻我们java web开发始终,这也是为什么jsp作为j2ee一个标准,成为j2ee开发不可或缺的一部分。虽然有API文档,随时可以查阅,但是一些常用的我们理解了就更容易上手了。加油!越来越喜欢java了嘻嘻