什么是JSP内置对象
JSP内置对象是 Web 容器创建的一组对象,不需要做任何声明就可以直接使用的对象。
例如:
<% int[ ] value = { 60, 70, 80 }; for (int i : value) { out.println(i);//没有进行声明和创建,但却可以使用out对象 } %>
JSP常用的内置对象
out
request
response
session
application
JSP内置对象request
request对象主要用于处理客户端请求
request对象常用方法
方法名称 |
说明 |
String getParameter(String name) |
根据表单组件名称获取提交数据 |
String[ ] getParameterValues(String name) |
获取表单组件对应多个值时的请求数据 |
void setCharacterEncoding(String charset) |
指定每个请求的编码 |
RequestDispatcher getRequestDispatcher(String path) |
返回一个RequestDispatcher对象,该对象的forward( )方法用于转发请求 |
例如:
学员注册页面
<form name="form1" method="post" action="reginfo.jsp"> <table border="0" align="center"> <tr> <td>用户名:</td> <td><input type="text" name="name"></td> </tr> <tr> <td height="19">密码:</td> <td height="19"><input type="password" name="pwd"></td> </tr> <tr> <td>信息来源:</td> <td> <input type="checkbox" name="channel" value="报刊">报刊 <input type="checkbox" name="channel" value="网络">网络<br/> <input type="checkbox" name="channel" value="朋友推荐">朋友推荐 <input type="checkbox" name="channel" value="电视">电视 </td> </tr> <!-- 以下是提交、取消按钮 --> <tr > <td colspan="2" align="center" > <input type="submit" name="Submit" value="提交"> <input type="reset" name="Reset" value="取消"> </td> </tr> </table> </form>
信息读取显示页面
<body> <% request.setCharacterEncoding("UTF-8"); String name = request.getParameter("name"); String pwd = request.getParameter("pwd"); String[] channels = request.getParameterValues("channel"); %> <div align="center">你输入的注册信息 <table border="0" align="center"> <tr> <td width="80" height="20">用户名:</td> <td><%=name%></td> </tr> <tr> <td height="20">密码:</td> <td><%=pwd%></td> </tr> <tr> <td height="20">信息来源:</td> <td > <% if (channels != null) { for (String channel: channels) { out.print(channel+" "); } } %> </td> </tr> </table> </div> </body>
在页面设置支持中文字符的字符集,如:UTF-8
获取数据时解决中文乱码问题
以POST方式提交数据时
<% // 设置读取请求信息的字符编码为UTF-8 request.setCharacterEncoding("UTF-8"); // 读取用户名和密码 String name = request.getParameter("name"); String pwd = request.getParameter("pwd"); %>
以GET方式提交数据时
<% // 读取用户名和密码 String name = request.getParameter("name"); // 对请求数据进行字符编码 name = new String(name.getBytes("ISO-8859-1"), "UTF-8"); %>
在Tomcat目录结构\conf\server.xml中设置字符集
<Connector port="8080" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" URIEncoding="UTF-8" />
JSP内置对象response
response对象用于响应客户请求并向客户端输出信息
response的常用方法
方法名称 |
说明 |
void addCookie(Cookie cookie) |
向客户端添加Cookie |
void setContentType(String type) |
设置HTTP响应的contentType类型 |
void setCharacterEncoding(String charset) |
设置响应所采用的字符编码类型 |
void sendRedirect(String location) |
将请求重新定位到一个新的URL上 |
页面重定向
void sendRedirect(String location)
客户端将重新发送请求到指定的URL
例如:
实现登录验证,并在验证成功后跳转至欢迎页面
<% request.setCharacterEncoding("UTF-8"); String name = request.getParameter("userName"); String pwd = request.getParameter("pwd"); if ("sa".equals(name) && "sa".equals(pwd)) response.sendRedirect("welcome.jsp");//跳转到欢迎页面 %>
如何才能实现页面跳转后,请求信息不丢失呢?
使用转发取代重定向实现页面跳转
转发的作用
在服务器端,将请求发送给服务器上的其他资源,以共同完成一次请求的处理
转发的实现
RequestDispatcher对象的forward()方法
例如:
<% RequestDispatcher rd = request.getRequestDispatcher("welcome.jsp"); rd.forward(request, response); %>
注:在多个页面交互过程中请求中的数据可以共享
转发 |
重定向 |
转发是在服务器端发挥作用,将同一请求在服务器资源之间进行传递 |
重定向是在客户端发挥作用,通过发送一个新的请求实现页面跳转 |
客户端浏览器的地址栏不会显示转向后的地址 |
在地址栏中可以显示转向后的地址 |
什么是会话
一个会话就是在一段时间内,一个客户端与Web服务器的一连串相关的交互过程
JSP内置对象session
session对象常用方法
方法名称 |
说明 |
String getId() |
获取sessionid |
void setMaxInactiveInterval(int interval) |
设定session的非活动时间 |
int getMaxInactiveInterval() |
获取session的有效非活动时间(以秒为单位) |
void invalidate() |
设置session对象失效 |
void setAttribute(String key, Object value) |
以key/value的形式保存对象值 |
Object getAttribute(String key) |
通过key获取对象值 |
void removeAttribute(String key) |
从session中删除指定名称(key)所对应的对象 |
session与窗口的关系
每个session对象都与一个浏览器窗口对应 ,重新开启一个浏览器窗口,可以重新创建一个session对象(不同版本浏览器可能有所差别)
通过超链接打开的新窗口,新窗口的session与其父窗口的session相同
使用session实现访问控制
在控制页面获取用户请求的登录信息进行验证
例如:
<% if ("admin".equals(name) && "admin".equals(pwd)) { // 如果是已注册用户 session.setAttribute("login", name);//在session中存放用户登录信息 // 设置session过期时间 session.setMaxInactiveInterval(10*60); request.getRequestDispatcher("admin.jsp").forward(request, response); } else { response.sendRedirect("index.jsp"); } %>
在新闻发布系统新闻发布页面增加登录验证
例如:
<% String login = (String) session.getAttribute("login");//如果session中不存在用户的登录信息,转入登录页面 if (login == null) { response.sendRedirect("index.jsp"); return; } %>
session对象的失效
语法:
手动设置失效:invalidate()
超时失效:通过setMaxInactiveInterval( )方法,单位是秒
例如:
<% session.setAttribute("login","admin"); session.setMaxInactiveInterval(600); response.sendRedirect("admin.jsp"); %>
通过设置项目的web.xml或Tomcat目录下的/conf/web.xml文件,单位是分钟
<session-config> <session-timeout>10</session-timeout> </session-config>
include指令
可以将一些共性的内容写入一个单独的文件中,然后通过include指令引用该文件
例如:
创建登录验证文件 loginControl.jsp
<% String login = (String) session.getAttribute("login"); if (login == null) { response.sendRedirect("index.jsp"); return; } %>
在后台首页面中使用include指令引用登录验证文件
<%@ include file="loginControl.jsp" %>