小伙伴们!昨天的课程我们已经初步了解web程序开发---jsp,并且介绍了jsp的九大内置对象,今天将继续追随着昨天脚步,继续jsp的学习,加油!!
response
response是httpservletresponse的实例,它包含了响应客户端的信息。作用域只能对本次页面的响应有效,对其他页面无效。
常用方法:
<%
response.setContentType();//设置响应mime类型
PrintWriter outer = response.getWriter();
outer.print();
//获取response输出对象。但是需要注意的地方是
//和out内置对象区别,如果你同时用这两种方法输出,response的输出在
//内置对象输出之前,除非你使用内置对象的flush();先把out输出内容强制输出到客户端。
out.print();
response.sendRedirect(xxx.jsp);//重定向
%>
请求转发和请求重定向区别
请求重定向:客户端行为。 response.sendRedirect(xxx.jsp),从本质上讲,相当于两次请求,第一次请求对象不会保存,地址栏的url也会变化。
请求转发:服务器行为。 request.getRequestDispatcher().forward(),从本质上讲,相当于一次请求,第一次请求对象会保存,地址栏url不会变化。
session
session:表示客户端和服务器端的一次对话。在web应用程序可以理解为:用户浏览网页到关闭浏览器的时间。session是保存在服务器的内存中,和用户是一一对应的。
用户在多个jsp之间切换,服务器是怎么知道一个用户,就是通过session,session是保存用户状态的机制。
session是httpsession的实例。
<%
long time = session.getCreationTime();//返回session的创建时间。
String id = session.getId();//返回session在jsp创建的时候唯一id。
session.setAttribute(name, value);//给session对象设置属性键值对。
session.getAttribute(name);//根据key拿对应session中的属性值。
session.getMaxInactiveInterval();//返回两次请求间隔多长时间取消session。
session.setMaxInactiveInterval();//设置两次请求间隔时间取消session。
%>
session生命周期
session创建
session活动
- 某次会话中通过超链接打开页面属于同一个会话(注意session不能超时)
- 只要当前页面没有全部关闭,重新打开新的页面,访问该项目还是同一个会话(注意session不能超时)
- 除非全部关闭所有的页面,在访问项目jsp,就是另外的会话(session不超时),当session超时,肯定是另外会话。
注意原来的会话,还存在旧的会话还在服务端,这个就会话是非活动的会话。除非会话设置取消时间到了,就没有。
session销毁
- 调用 session.invalidate();
- session超时,session默认超时时间30分钟。
- 服务器重新启动
application对象
实现数据的共享,相当于全局变量。application对象开始于服务器的启动,到服务器的关闭。
<%
application.setAttribute(arg0, arg1);//给application设置属性
application.getAttribute(name);//根据属性名返回对应的application的属性
%>
page对象(object)
page对象就是指向jsp本身对象,有点像javase的this,指当前对象。
常用方法:
pageContext
- pagecontext提供了jsp页面所有对象,及名字空间访问。
- pagecontext可以访问本页面的session和application的属性值。
- pagecontext是页面所有功能的集大成者
常用方法:
<%
JspWriter jw = pageContext.getOut();//获取客户端的输出。
HttpSession hs = pageContext.getSession();//返回当前页面的httpsession对象。
ject o = pageContext.getPage();//返回当前的object对象
ServletRequest sr = pageContext.getRequest();//返回当前页面的request对象。
ServletResponse sr1 = pageContext.getResponse();//返回当前页面的response对象。
pageContext.setAttribute(name, value);//给当前页面设置属性值。
pageContext.getAttribute(name);//获取当前页面的对应的属性值。
pageContext.forward(relativeUrlPath);//从当前页面跳转另一个页面。
%>
config
config对象是在一个servlet初始化,他的信息包含servlet所包含的参数,以及服务器有关信息。
config.getServletContext();//获取servletcontext对象
config.getInitParameter(name);//获取参数化的值
Enumeration EM = config.getInitParameterNames();//获取参数名的枚举。
Exception对象
exception是一个异常对象,一个页面发生异常,就需要使用这个。如果一个jsp页面要应用此对象,必须把iserrorpage属性值设置为true,才能使用exception内置对象。
<%@ page language="java" import="java.util.*" pageEncoding="ISO-8859-1" contentType="text/html; charset=ISO-8859-1" isErrorPage="true" errorPage="xxxx.jsp"//交给哪个页面去处理 %>
exception.getMessage();//打印异常信息
exception.getStackTrace();//打印异常堆栈信息
经过上面的学习,jsp的九大内置对象已经学习完毕了。
javabean
javabean:就是符合某种特定规范的java类,好处是能减少代码的重复,减少冗余。
java的设计原则:
- 公有类
- 无参的构造方法
- 属性私有
- get和set方法
jsp动作元素
动作元素为请求处理阶段提供信息,动作标签遵循xml语法,有一个包含元素名的开始标签,可以有属性,内容。
<jsp:useBean id="myuser" class="com.example.server.User" scope="page"/>
注意点:
- id后面就是javabean的实例。
- class的类名,需要从包名写起,scope是作用域。
- 注意jsp动作标签不需要在<%%>中。
- 注意jsp动作标签有开始标签也有结束标签。
setproperty(给javabean实例赋值)
<jsp:useBean id="myuser" class="com.example.server.User" scope="page"/>
<jsp:setProperty name="myuser" property="*"/>//自动匹配,跟表单关联
<jsp:setProperty name="myuser" property="username"/>//给指定的属性名设置值,跟表单关联。
<jsp:setProperty name="myuser" property="username" value="liujin"/>//手工赋值
<jsp:setProperty name="myuser" property="username" param=""/>//跟request参数关联,这个参数是表单url跳转的action后面带的参数
<jsp:useBean id="myuser" class="com.example.server.User" scope="page"/>
<jsp:setProperty name="myuser" property="*"/>//自动匹配,跟表单关联
<jsp:setProperty name="myuser" property="username"/>//给指定的属性名设置值,跟表单关联。
<jsp:setProperty name="myuser" property="username" value="liujin"/>//手工赋值
<jsp:setProperty name="myuser" property="username" param=""/>//跟request参数关联,这个参数是表单url跳转的action后面带的参数
需要注意的事,setproperty中name是填写javabean的实例,也就是上面javabean中的id。property后面是*,是自动匹配,如何匹配是根据你表单中提交的name属性的值,和javabean中的属性名,是否一致,如果一致,就直接调用属性的set方法。
getproperty
<jsp:setProperty name="myuser" property="username">
name属性还是javabean的实例。property对应的是属性名。