jsp数据传递、九大内置对象、
目录
一、jsp简介
1、HTML页面转成JSP页面
2、JSP中六大组成部分
二、JSP内置对象
1、request
2、response
4、session对象
5、application对象
三、作用域
1、page作用域
2、request作用域
3、session作用域
4、application作用域
四、Cookie
一、jsp简介
jsp概念:概念: Java Server Pages,Java服务端页面
JSP = HTML + Java,用于简化开发、JSP本质上就是一个Servlet
原理:
1、HTML页面转成JSP页面
方式1:直接修改HTML页面
直接在HTML页面最顶端添加page指令
修改文件后缀名为jsp
方式2:新建jsp文件,拷贝HTML代码(推荐使用)
在工程中新建文件名为***.jsp文件。
将HTML页面的内容拷贝到***.jsp文件中。jsp文件头的内容不要覆盖,只覆盖
jsp文件中html标签的内容就OK。
2、JSP中六大组成部分
指令、注释、脚本、声明、表达式、静态内容
二、JSP内置对象
JSP内置对象是JSP容器为每个页面提供的Java对象,开发者可以直接使用它们而不用显式声明。
JSP所支持的九大内置对象:
对象 | 说明 |
request | 每当客户端请求JSP页面时,JSP引擎会制造一个新的request对象来代表这个请求。 |
response | 当服务器创建request对象时会同时创建用于响应这个客户端的response对象 |
out | out对象用来在response对象中写入内容。 |
session | session对象用来跟踪在各个客户端请求间的会话。 |
application | 该对象代表web应用本身,整个web应用共享一个application对象。 |
config | 这个对象允许开发者访问Servlet或者JSP引擎的初始化参数。 |
pageContext | 页面上下文对象,这个对象存储了内置对象的引用。 |
page | 这个对象就是页面实例的引用。它可以被看做是整个JSP页面的代表 |
exception | 这个对象包装了从先前页面中抛出的异常信息。 |
1、request
主要用于处理客户端请求。
request对象中保存了用户的请求数据和浏览器的相关信息,通过调用相关方法就可以实现请求数
据的读取。
request对象的常用方法
方法名 | 说明 |
String getParameter(String name) | 根据表单组件名称获取提交数据 |
String[ ] getParameterValues(String name) | 获取表单组件对应多个值时的请求数据 |
void setCharacterEncoding(String charset) | 指定每个请求的编码 |
RequestDispatcher getRequestDispatcher(String path) | 返回一个RequestDispatcher对象,该对象的forward( )方法用于转发请求 |
request.getParameter ("name") ;
获取的是form表单中的数据、或者是超链接中的问号传参
request.getAttribute ("key");
获取的是在发起请求的页面自定义封装/保存的数据
get与post的区别
比较项 | get | post |
参数出现在URL中 | 是 | 否 |
长度限制 | 有 | 无 |
安全性 | 低 | 高 |
URL可传播 | 是 | 否 |
表单提交时出现的乱码
post请求出现乱码
request.setCharacterEncoding("utf-8");
get请求出现乱码
new String(s.getBytes("iso-8859-1"),"utf-8");
以上两种都是临时解决问题
治本的方法
配置tomcat\conf\web.xml文件
加添一下代码
<filter>
<filter-name>encodingFilter</filter-name>
<filter-class>org.apache.catalina.filters.SetCharacterEncodingFilter</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>UTF-8</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>encodingFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
2、response
response对象用于响应客户请求并向客户端输出信息
response对象的常用方法
方法名 | 说明 |
void addCookie(Cookie cookie) | 给客户端添加一个Cookie对象,以保存客户端的信息 |
PrintWriter getWriter() | 返回一个输出字符流 |
void sendRedirect() | 将请求重新定位到一个不同的URL,即页面重定向 |
void setCharacterEncoding(String encoding) | 设置字符编码类型为encoding |
请求转发
作用:在服务器端,将请求发送给服务器上的其他资源,以共同完成一次请求的处理
转发的实现
RequestDispatcher对象的forward()方法
示例:
<%
RequestDispatcher rd = request.getRequestDispatcher("welcome.jsp");
rd.forward(request, response);
%>
转发 | 重定向 |
转发是在服务器端发挥作用,将同一请求在服务器资源之间进行传递 | 重定向是在客户端发挥作用,通过发送一个新的请求实现页面转向 |
客户端浏览器的地址栏不会显示转向后的地址 | 在地址栏中可以显示转向后的地址 |
3、out对象
out对象是 javax.servlet.jsp.JspWriter 类的实例,用来在response对象中写入内容。
常用方法
属性 | 说明 |
| 向页面输出显示 |
println | 向页面输出显示,在结尾处添加换行 |
flush | 刷新输出流 |
会话:
会话就是在一段时间内,一个客户端与Web服务器的一连串相关的交互过程。
会话可以在多次请求中保存和使用数据。
在JSP中使用session对象实现会话的存取。
4、session对象
session对象
session机制是一种服务器端的机制,在服务器端保存信息。
用于存储与用户相关的会话信息
方法名 | 说明 |
void setAttribute(String key,Object value) | 以key/value的形式保存对象值 |
Object getAttribute(String key) | 通过key获取对象值 |
void invalidate() | 设置session对象失效 |
String getId() | 获取sessionid |
void setMaxInactiveInterval(int interval) | 设定session的非活动时间 |
int getMaxInactiveInterval() | 获取session的有效非活动时间(以秒为单位) |
void removeAttribute(String key) | 从session中删除指定名称(key)所对应的对象 |
session与窗口的关系
每个session对象都与一个浏览器窗口对应 ,重新开启一个浏览器窗口,可以重新创建一个session对象(不同版本浏览器可能有所差别)
通过超链接打开的新窗口,新窗口的session与其父窗口的session相同
每个session都有一个唯一的sessionid
public String getId();
使用session对象存取数据
使用session对象存取数据的步骤
1:使用属性保存数据
2:从属性中读取数据,必要时需要进行数据类型转换
语法:
public void setAttribute(String name, Object value);
示例:
session.setAttribute("userName", "张三丰");
public Object getAttribute(String name);
示例:
String userName=(String)session.getAttribute("userName");
同一个会话中,客户端可以连续的访问服务器,客户端每次访问服务器都是一个请求,也就是每次
请求都会创建一个新的request对象但是只要会话不失效,那么这些请求都共享一个session对象
同一个web应用启动过程,客户端可以连续的发起会话,客户端每次发起会话,都会创建一个新的
session对象,但是只要web应用不重启,那么这些会话都共享一个application对象
会话的清除和过期有两种形式。
1、程序主动清除session数据
2、服务器主动清除长时间没有再次发出请求的session
程序主动清除session数据有两种实现方式
1:设置会话失效:session.invalidate();
2:只移除会话的一个属性:session. removeAttribute(String name);
服务器主动清除长时间没有再次发出请求的session,两种实现方式:
1:通过setMaxInactiveInterval(int interval )方法,单位是秒
<%
session.setAttribute("loginUser",user);
session.setMaxInactiveInterval(600);
response.sendRedirect("admin.jsp");
%>
修改tomcat服务器的web.xml,单位是分钟
<session-config>
<session-timeout>30</session-timeout>
</session-config>
在JSP中实现页面包含的方式有两种:
1:使用<%@include%>指令实现静态包含
<%@include file=“URL”%>
使用<jsp:include>标签实现动态包含
<jsp:include page=“URL”>
动态包含与静态包含的区别
静态包含 | 动态包含 |
<%@include%> | <jsp:include> |
先将页面包含,后执行页面代码,即将一个页面的代码复制到另一个页面中。 | 先执行页面代码,后将页面包含,即将一个页面的运行结果包含到另一个页面中。 |
被包含的页面内容发生变化时,包含页面将会被重新编译。 | 被包含页面内容发生变化时,包含页面不会重新编译。 |
5、application对象
application对象代表web应用本身,整个web应用共享一个application对象,该对象主要用于在多个JSP页面或者Servlet之间共享变量。
application对象开始于服务器的启动,终止于服务器的关闭。
application对象实现了用户间的数据共享,可以存放全局变量。
application对象的常用方法:
方法名 | 说明 |
void setAttribute(String key,Object value) | 以key/value的形式保存对象值 |
Object getAttribute(String key) | 通过key获取对象值 |
String getRealPath(String path) | 返回相对路径的真实路径 |
统计网站访问次数的实现
<%
Integer count = (Integer) application.getAttribute("count");
if (count != null) {
count = 1 + count;
} else {
count = 1;
}
application.setAttribute("count", count);
%>
<%
Integer i = (Integer) application.getAttribute("count");
out.println("您好,您是第 " + i + " 位访问本网站的用户");
%>
JSP常用内置对象
内置对象 | 说明 |
out | 用于向客户端输出数据 |
request | 主要用于处理客户端请求的数据信息 |
response | 用于响应客户端请求并向客户端输出信息 |
session | 用于记录会话状态的相关信息 |
application | 类似于系统的全局变量,用于实现Web应用中的资源共享 |
三、作用域
page作用域 | 对应的作用域访问对象为 pageContext 对象 |
request作用域 | 对应的作用域访问对象为 request 对象 |
session作用域 | 对应的作用域访问对象为 session 对象 |
application作用域 | 对应的作用域访问对象为 application 对象 |
1、page作用域
page作用域指本JSP页面的范围
pageContext.setAttribute(键,值)
pageContext.getAttribute(键)
<%
String name = "page";
pageContext.setAttribute("name",name);
%>
<strong>
testOne:<%=pageContext.getAttribute("name") %>
</strong>
<br/>
<%
pageContext.include("testTwo.jsp");
%>
2、request作用域
request作用域内的对象则是与客户端的请求绑定在一起
<%
String name = "request";
request.setAttribute("name",name);
request.getRequestDispatcher("testTwo.jsp").forward(request, response);
%>
<strong>
testTwo:<%=request.getAttribute("name") %>
</strong>
3、session作用域
session作用域:一次会话
<%
String req = "request";
String ses = "session";
request.setAttribute("reqName ",req);
session.setAttribute("sessionName ",ses);
response.sendRedirect("testTwo.jsp");
%>
<strong>
request:<%= request.getAttribute("reqName") %><br/>
session:<%=session.getAttribute("sessionName") %>
</strong>
4、application作用域
application作用域:面对整个Web应用程序
<%
String app = "application";
String ses = "session";
session.setAttribute("sesName",ses);
application.setAttribute("appName",app);
response.sendRedirect("testTwo.jsp");
%>
<strong>
session:<%=session.getAttribute("sesName") %><br/>
application:<%=application.getAttribute("appName") %>
</strong>
名称 | 说明 |
page作用域 | 在一个页面范围内有效,通过pageContext对象访问 |
request作用域 | 在一个请求范围内有效 |
session作用域 | 在一次会话范围内容有效 |
application作用域 | 在一个应用服务器范围内有效 |
四、Cookie
浏览器与WEB服务器之间是使用HTTP协议进行通信的,当某个用户发出页面请求时,WEB服务器进行响应后就关闭与该用户的连接。当一个请求发送到WEB服务器时,无论其是否是第一次来访,服务器都会把它当作第一次来对待,这样的不好之处可想而知。
为了弥补这个缺陷,Netscape开发出了Cookie这个有效的工具来保存某个用户的识别信息,因此人们昵称为“小甜饼”。
Cookie是一种WEB服务器通过浏览器在访问者的硬盘上存储信息的手段:Netscape Navigator使用一个名为cookies.txt本地文件保存从所有站点接收的Cookie信息;当用户再次访问某个站点时,服务端将要求浏览器查找并返回先前发送的Cookie信息,来识别这个用户。
Cookie是Web服务器保存在客户端的一系列文本信息
Cookie的作用
对特定对象的追踪(Cookie能告诉在线广告商广告被点击的次数,从而可以更精确的投放广告)
实现各种个性化服务(Cookie能帮助站点统计用户个人资料以实现各种各样的个性化服务)
简化登录(Cookie有效期限未到时,Cookie能使用户在不键入密码和用户名的情况下进入曾经浏览过的一些站点)
安全性能:容易泄露信息
在JSP中使用Cookie
语法:
创建Cookie对象
Cookie newCookie = new Cookie(String key, String value);
由服务器端向客户端写入Cookie对象
response.addCookie(newCookie);
读取客户端的Cookie对象
Cookie[] cookies = request.getCookies();
Cookie类的常用方法
方法名 | 说明 |
void setMaxAge(int expiry) | 设置cookie的有效期,以秒为单位 |
void setValue(String value) | 在cookie创建后,对cookie进行赋值 |
String getName() | 获取cookie的名称 |
String getValue() | 获取cookie的值 |
int getMaxAge() | 获取cookie的有效时间,以秒为单位 |
jsp脚本
JSP脚本用于在JSP页面内定义Java代码
JSP脚本分类:
1、<%...%>∶内容会直接放到_jspService()方法之中
2.、<%=...%>∶内容会放到out.print()中,作为out.print()的参数
3、<%!...%>:内容会放到_jspService()方法之外,被类直接包含
jsp的缺点
由于JSP页面内,既可以定义HTML标签,又可以定义Java代码,造成了以下问题:
1.书写麻烦:特别是复杂的页面
2.阅读麻烦
3、复杂度高:运行需要依赖于各种环境,JRE,JSP容器,JavaEE等
4、占内存和磁盘:JSP会自动生成.java和.class文件占磁盘,运行的是.class文件占内存
5、调试困难:出错后,需要找到自动生成的.java文件进行调试
6、不利于团队协作:前端人员不会Java,后端人员不精HTML