JSP-表单与request对象
1 在html表单中,表单用于用户填写数据并通过提交实现数据的请求,提交有2种方式:1 POST 2 GET。区别如下:
比较 | POST | GET |
是否在url中显示参数 | 否 | 是 |
数据传递是否有长度限制 | 无 | 有 |
数据安全性 | 高 | 低 |
url是否可以传播 | 否 | 是 |
2 request对象:(请求对象)跟out对象一样,是jsp的一个内置对象,可以在jsp中直接调用。该对象的主要方法如下
getParameter(String name) 获得请求中名为name的参数的值,如果请求中没有这个参数,返回null
getParameterValues(String name) 返回请求中名为name的参数值,这个值往往是checkbox控件提交的,因此返回的是一个String数组
getMethod() 返回这个请求使用的HTTP方法(例如:GET、POST、PUT)
2 response对象(响应对象)
3.内置对象:jsp已经准备好的,可以直接使用的对象。
4. 中文乱码问题
4-1 POST方式提交时的解决方案:
设置请求的编码方式: request.setCharacterEncoding("UTF-8");
设置响应的编码方式: response.setCharacterEncoding("UTF-8");也可以在page指令中contentType中的charset设置成"UTF-8"。
4-2 GET方式提交时的解决方案:
1在读取数据时对数据进行修改:new string(s.getbytes(“iso-8859-1”,“utf-8”)) ;
在配置文件中设置:comcat\conf\server.xml文件
〈connector ......URIEcoding="utf-8">
5.页面间的数据传递
5-1 使用属性存取数据:setattribute()方法和getattribute()方法
setattribute()方法:在请求中保存属性值。
语法:setattribute(string name,Objcet o);
该方法没有返回值,参数name表示属性名称,参数0为属性的值,为Object类型。
例如:request.setattribute("mess","注册失败");
getattribute()方法:在请求中获取属性。
语法:getattribute(string name);
该方法返回object类型的值,获取时应先做非null判断,并且要做类型转换。
例如:string mess=(string)request.getattribute(“mes”);
if(mess!=null){}else{};
6.转发和重定向实现的页面跳转
转发又被称为服务器端跳转,重定向又被称为客户端跳转
转发和重定向的区别
Session对象(会话对象,可以在多次请求中保存数据)
保存数据 session.setattribute("属性名",obj属性值);
读取数据 session.getattribute("属性名"); 返回值为object类型,要做类型强转和非空判断
数据是保存在服务器端的。服务器端保存了很多session每个都有一个唯一的id,随着服务器响应传给浏览器,浏览器向服务器请求时,会和服务器的sessionid匹配。
可以用session.getsessionid()查看
会话的清除和过期
程序主动清除session数据
session.invalidate();使会话无效
session.removeattribute("属性名");清除会话的某个属性
服务器主动清除长时间没请求的session
设置会话过期时间
session.setMaxInactiveInterval(int 秒数);
在WEB.XML中设置所有session过期时间
在web.xml中加入<session-config><session=timeout>30</session-timeout></session-config> --单位为分钟数
cookie对象 以文件形式保存在客户端。
需创建对象 Cookie cookie =New Cookie("名称",值);
添加数据 response.addCookie(Cookie cookie)
获取数据 request.getCookie() 返回Cookie[] for循环遍历,cookie.getname(),cookie.getvalue()
设置有效期 setMaxAge(int expiry) 单位为妙
可以在浏览器隐私中禁用COOKIE
application对象:可在整个web项目中共享数据
语法:
setattribute()方法:在请求中保存全局性属性值。
语法:setattribute(string name,Objcet o);
该方法没有返回值,参数name表示属性名称,参数0为属性的值,为Object类型。
例如:request.setattribute("mess","注册失败");
getattribute()方法:在请求中获取属性。
语法:getattribute(string name);
该方法返回object类型的值,获取时应先做非null判断,并且要做类型转换。
例如:string mess=(string)request.getattribute(“mes”);
if(mess!=null){}else{};
page,request,session,application的区别
application:全局作用范围,整个应用程序共享,就是在部署文件中的同一个webApp共享,生命周期为:应用程序启动到停止。
session:会话作用域,当用户首次访问时,产生一个新的会话,以后服务器就可以记住这个会话状态。生命周期:会话超时,或者服务器端强制使会话失效。
request:请求作用域,就是客户端的一次请求。
page:一个JSP页面。
以上作用范围使越来越小, request和page的生命周期都是短暂的,他们之间的区别就是:一个request可以包含多个page页(include,forward以及filter)。举个简单的例子:
jsp1.jsp
<jsp:useBean id="beanID" class="xxx .xxx.BeanClass" scope="request" />
<jsp:include page="jsp2.jsp" />
jsp2.jsp
<jsp:getProperty name="beanID" property="sample" />
运行jsp1.jsp可以正常显示数据,因为作用范围是request,相当于调用了request.setAttribute()方法,
jsp2页通过request.getAttribute来获得这个bean.如果把request改为page,就会抛出NullPointerExceptioin.
一个请求可以跨好几个JSP(include和forword)和Servlet(如filter).不过这里有一个需要注意的就是区别
<jsp:include> 和<%@ include %>.如果上面的<jsp:include page="jsp2.jsp" />改为<%@ include file="jsp2.jsp" %>,即使scope为page也是正确的,<%@ include %>是编译时包含,<jsp:include>是运行时包含.前者就相当于宏,编译时替代,后者相当于函数,运行时返回.