1.out内置对象
out内置对象就死javax.servlet.jsp.jspwriter类的实例,用于向浏览器输出数据
out内置对象常用的方法
方法名称 | 说明 |
---|---|
void println() | 向客户端打印字符串 |
void flush() | 将缓存区内容输出到客户端 |
void close() | 关闭输出流 |
void clear() | 清除缓冲区的内容,如果响应已经提交(已调用过flush()方法),则抛出IOExeception异常 |
void clearBuffer() | 清除缓存区的当前内容。即使响应已被提交,也不会抛出IOEception |
2.request内置对象
request是javax.servlet.http.HttpServletRequest的实例,主要用于封装客户端浏览器请求中的数据
request对象常用的方法
方法名称 | 说明 |
---|---|
String getParameter(String name) | 根据页面表单组织名称获取页面提交数据 |
String[] getParameterValues(Strinbg name) | 获取一组以相同名称命名的表单组件提交的数据 |
void setCharaterEncoding(String charset) | 指定每个请求的编码,在调用request.getParameter()方法之前进行设定,可以用于解决中文乱码问题 |
RequestDispatcher getRequestDispatcher(String path) | 返回一个javax.servlet.http.HttpServletRequest对象,该对象的forward()方法用于转发请求 |
Strinf getContextPath() | 获取虚拟目录,如/microblog |
String getRequestURI() | 获取请求的URI,如/micronlog/index.jsp |
String getScheme() | 获取当前链接使用的协议,如http |
String getServerName() | 获取服务器名字 |
String getServerPort() | 获取服务器端口号 |
request.setCharacterEncoding("utf-8")可以解决中文乱码问题
3.response内置对象
response对象是javax.servlet.heep.HttpServletRonse的实例,可用于设置响应参数及取得响应流
说明 | 方法名称 |
---|---|
向客户端添加Cookie | void addCookie(Cookie cookis) |
设置HTTP响应vontentType类型 | void setContentType(String type) |
设置响应采用的字符编码类型 | void setCharacterEncding(String charset) |
将请求重新定位到一个新的URL上 | void sendRedirect(String location) |
4.session内置对象
session是javax.servlet.http.HttpSession类的实例,他允许用户访问会话相关信息,以及将数据绑定到会话中(在服务器使用累死哈希表的解构来保存信息),绑定到会话中的数据可以在同一客户端的多次请求之间持续有效
方法名称 | 说明 |
---|---|
String getid() | 获取session |
long getCreationTime() | 返回session对象被创建的时间,以毫秒为单位 |
void setMaxInactiveInterval(int interval) | 设定session的有效非活动时间,以秒为单位 |
int getMaxInactiveInterval() | 获取session的有效非活动时间,以秒为单位 |
void incalidate() | 设置session对象失效 |
void setAttribute(String key,object value) | 以key/value的形式将对象保存到session中 |
Object getAttribute(String key) | 通过key获取session中保存的对象 |
void removeAttribute(String key) | 从session中删除指定key对应的对象 |
4.1会话超时
会话超时是指两次请求的时间间隔超过了服务器允许的最大时间间隔,可以通过三种方式进行设置
①setMaxInactiveInterval(int interval)方法进行设置
//设置session过期时间,15秒内没有新的请求session对象失效
session.setMaxInactiveInterval(15*60);
②通过项目配置文件web.xml进行设置,以分钟为单位
//10分钟内没有新请求session对象失效
<session-config>
<session-timeout>10</session-timeout>
</session-config>
③通过应用服务器设置
//30分钟是Tomcat默认会话超时时间
<session-config>
<session-timeout>30</session-timeout>
</session-config>
5.cookie
cookie是最常用的跟踪用户会话的方式,他是由服务器端生成并发送给客户端浏览器的,浏览器将其保存为某个目录下的文件文本,并在后续请求相关网站时,跟随请求自动发送cookie数据到服务器中
cookie通过键值对进行数据保存
方法名称 | 说明 |
---|---|
void setMaxAge(int expiry) | 设置cookie的有效期,以秒为单位 |
void setValue(String value) | 在cookie创建后,为cookie赋予新的值 |
String getName() | 获取cookie的名称 |
String getValue() | 获取cookie的值 |
int getMaxAge() | 获取cookie的有效期,以秒为单位 |
5.1设置cookie有效期
//60秒内可以对cookie进行读取,超过60秒将会失效
name.setMaxAge(60)
session与cookie两者区别
①session是在服务器端保存用户信息的,cookie是在客户端保存用户信息的
②session中保存的是Object类型,cookie保存的是String类型
③session对象随会话结束而关闭,cookie对象可以长期保存在客户端
④cookie通常用于保存不敏感的用户信息,重要的信息使用session保存
整体示例代码:
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Title</title>
</head>
<body>
登录页面
<form action="two.jsp">
用户名:<input type="text" name="username"/><br/>
密码:<input type="password" name="password"/><br/>
<input type="submit" value="登录"/>
</form>
</body>
</html>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Title</title>
</head>
<body>
验证页面
<%
//在接收值之前 先规定好编码,因为值在request里,解决乱码问题
request.setCharacterEncoding("utf-8");
String name=request.getParameter("username");
String pwd=request.getParameter("password");
if ("张三".equals(name)&&"123".equals(pwd)){
//3种跳转方式 1.转发(会显示上一个页面的路径) 2.重定向(不会显示账号密码还有路径) 3.js跳转
//两种跳转区别
// 重定向:重置对象,重新请求(记录不会被保存)
//转发:一次请求(记录从头保存到尾),只限定在本页面内
/*
* request:请求 转发 获取传参
response:响应 重定向
* */
//1.转发(会显示上一个页面的路径)
request.getRequestDispatcher("three.jsp").forward(request,response);
// 2.重定向(不会显示账号密码还有路径)
response.sendRedirect("three.jsp");
//3.js跳转
out.print("<script>alert('登录成功');location.href='three.jsp'</script>");
//把用户存在类似全局变量的作用域 多个页面都可以用----会话
//两个全局区别 二选一
//会话失效的可能:1.关闭浏览器 2.会话超时 默认时间30分钟 秒为单位
//application服务器关闭才会失效 因为他是直接把值存在服务器中
session.setAttribute("name",name);
application.setAttribute("name",name);
//创建cookie对象,将值保存
Cookie cookie=new Cookie("uname",name);
response.addCookie(cookie);
response.sendRedirect("three.jsp");
}else {
out.print("!!!!");
}
%>
</body>
</html>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Title</title>
</head>
<body>
首页
<!-- 取值方式1 等于号直接取代out.print()方法-->
欢迎<%=application.getAttribute("name")%>来到长沙
<!-- 取值方式2 等于号直接取代out.print()方法-->
欢迎<%=request.getParameter("name")%>来到长沙科
out.print('----------------------------------------------')
<%
<%--cookies获取值输出--%>
Cookie[] c=request.getCookies();
String s="";
for (Cookie cs:c) {
if(cs.getName().equals("uname")){
s=cs.getValue();
}
}
out.print(s);
%>
来到长沙
</body>
</html>