内置对象就是jsp提供好的对象,用的时候直接使用对象名,而不用手动创建对象。这些系统创建好的对象就叫做内置对象.
九大内置对象
内置对象名 类型
- request HttpServletRequest
- response HttpServletResponse
- config ServletConfig
- application ServletContext
- session HttpSession
- exception Throwable
- page Object(this)
- out JspWriter
- pageContext PageContext
out,request,response,session,application这五个是常用的内置对象。然后page,pageContext,exception,config是不常用对象。
Web程序的请求响应模式是指:用户用http发出请求(request),服务器给用户响应(response)
缓冲区就像一个碗,把饭从锅里盛到碗里,再去吃。
out对象
代码:
flush方法是将输出到屏幕上,这个时候如果清除缓冲区,这时候如果用clear方法会抛异常,抛出异常后,后面的信息就不会被打印。清除缓冲区的一个好处是,可以释放缓冲区大小,使得剩余缓冲区变大。flush后使用clearBuffer方法则不会抛出异常。
get与post方式的区别
<form name="FromName" action="动作" method="提交方式"></form>
表单有两种提交方式:get和post
get:明文提交通过URL,不超过2kb,安全性低,效率比post高。如搜索,查询等
post:信息封装在HTML HEADER内,提交数据量可以很大,安全性高。如注册,修改,上传等功能
例子:
在某个jsp文件的body标签中插入以下:
<form action="doLogin.jsp" name="loginForm" method="get"> <table> <tr> <td>用户名</td> <td><input type="text" name="username" /></td> </tr> <tr> <td>密码</td> <td><input type="password" name="password" /></td> </tr> <tr> <td colspan="2"><input type="submit" value="登录"/></td> </tr> </table> </form>
点击登录,之后就可以跳转到doLogin.jsp页面上,用get方式的话,用户名密码都以明文方式提交,在URL中可以显示出来。
request对象
同一个选项卡中,checkbox 的name得相同
然后在request.jsp中,
- 注意:<%=request....%>中间不要忘记加个等于号,而且加了等号的就不要用分号结尾了
页面:
request.jsp
设置字符编码
在接受字符串之前,用setCharacterEncoding方法可以设置字符编码,这样输入中文接受后就不会是乱码,注意在接受页面的字符编码也要一致才行。无法通过url传递中文参数问题。需要修改tomcat配置你文档才可以 在server.xml中修改
增加下面的字段
然后重启tomcat服务器即可。
response对象
尽管很重要,但在jsp中很少直接使用到。注意:sendRedirect方法是在response对象中的
上面的outer对象和out内置对象不是一个概念,outer对象输出会先于内置对象,解决办法是:使用out.flush()方法,来强制清空缓冲区,那么也会强制将内容也显示在浏览器上。
请求重定向,会将这个界面跳转到另一个request界面
请求重定向和请求转发的区别
转发后:地址栏地址不变;重定向:地址栏会变。
请求重定向的时候,第一个页面的信息不会保存。因此跳转到重定向后的网页的时候,第一个页面所传的信息不会保存。而且地址栏的地址会发生改变。
请求转发,虽然转发到第三个界面(request.jsp),页面是第三个界面,但是地址栏还是停留在response.jsp中。然后第一个界面的信息也能够传到第三个界面(因为是转发过来的,不是重定向,重定向是不可以传过来信息的)
注意:
请求重定向是客户器端行为而请求转发是服务器端行为
session
在服务器中保存着不同用户的session,每一个用户对应一个sesson,保存在内存当中
刷新页面,
界面跳转,保存状态
然后在另个jsp文件中
可以看见session id是没有发生变化的,而且,也可以得到username
回话本身,是有生命周期的,如果一天没有在这个页面进行任何操作那么页面的数据可能就没了
session.setMaxInactiveInterval(10);//比如说设置10秒后session会话结束,这样的话session中的信息将在10秒后销毁
Session生命周期
- 创建
- 活动
- 销毁
当手动关闭所有页面再去重新访问某个jsp页面的时候,服务器中的sessionId还是存在的,并没有消失,只有在时间过了之后才会清除这个sessionId
session超时时间
Application
就像java中的静态变量,属于类 而不属于对象,application是属于服务器的,不是某个项目的
getAttributeNames方法是一个枚举类型
除了自己设置的三个属性,application中还有其他自带的属性
Page
page 对象即表示当前对象
JSP 会被编译为一个Servlet类 ,运行的时候是一个Servlet实例。 page即代表this
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" import="java.util.*"%> page:<%=page%> <br> this:<%=this%>
运行结果:
类似于this,是object的一个实例
pageContext对象
和application有什么区别?
pageContext只在当前页面,下一个页面时该上一个页面的对象就失效。application是所有用户及页面可以共享一个对象
Config
config对象在servlet中做详细介绍