HTML页面转成JSP页面
HTML页面转成JSP页面一般有两种方式
方式1:直接修改HTML页面
直接在HTML页面最顶端添加page指令
修改文件后缀名为jsp
方式2:新建jsp文件,拷贝HTML代码(推荐使用)
在工程中新建文件名为***.jsp文件。
将HTML页面的内容拷贝到***.jsp文件中。千万别傻乎乎的连jsp文件头的内容也覆盖了,只覆盖jsp文件中html标签的内容就OK。
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 | 这个对象包装了从先前页面中抛出的异常信息。 |
JSP内置对象request
主要用于处理客户端请求。
request对象中保存了用户的请求数据和浏览器的相关信息,通过调用相关方法就可以实现请求数据的读取。
request对象的常用方法
方法名称 | 说明 |
String getParameter(String name) | 根据表单组件名称获取提交数据 |
String[ ] getParameterValues(String name) | 获取表单组件对应多个值时的请求数据 |
void setCharacterEncoding(String charset) | 指定每个请求的编码 |
RequestDispatcher getRequestDispatcher(String path) | 返回一个RequestDispatcher对象,该对象的forward( )方法用于转发请求 |
常用的发送表单数据的方法:post和get
get与post区别
比较项 | get | post |
参数出现在URL中 | 是 | 否 |
长度限制 | 有 | 无 |
安全性 | 低 | 高 |
URL可传播 | 是 | 否 |
JSP内置对象response
方法名称 | 说明 |
void addCookie(Cookie cookie) | 给客户端添加一个Cookie对象,以保存客户端的信息 |
PrintWriter getWriter() | 返回一个输出字符流 |
void sendRedirect() | 将请求重新定位到一个不同的URL,即页面重定向 |
void setCharacterEncoding(String encoding) | 设置字符编码类型为encoding |
请求的转发
转发的作用
在服务器端,将请求发送给服务器上的其他资源,以共同完成一次请求的处理
转发的实现
RequestDispatcher对象的forward()方法
在多个页面交互过程中请求中的数据可以共享
转发
转发是在服务器端发挥作用,将同一请求在服务器资源之间进行传递
客户端浏览器的地址栏不会显示转向后的地址
重定向
重定向是在客户端发挥作用,通过发送一个新的请求实现页面转向
在地址栏中可以显示转向后的地址
思考:
如果普通用户直接输入后台地址,我们的程序没有进行的权限拦截,后台将暴露给普通用户,这是不安全的,怎么办?
解决方案:使用会话保存登录用户的状态
会话
会话就是在一段时间内,一个客户端与Web服务器的一连串相关的交互过程。
会话可以在多次请求中保存和使用数据。
在JSP中使用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");
会话的清除和过期
程序主动清除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");
%>
2:修改tomcat服务器的web.xml,单位是分钟
<session-config>
<session-timeout>30</session-timeout>
</session-config>
小结
用浏览器访问服务器——产生会话
通过浏览器在网站登录——在会话中保存数据
登录成功后用个人身份进行访问——会话有效期内
关闭了浏览器——结束会话
服务器主动结束会话——会话到期
使会话失效、删除属性——及时释放会话资源
程序主动结束会话、会话到期——会话中的数据丢失
JSP页面中的包含操作
在JSP中实现页面包含的方式有两种:
1:使用<%@include%>指令实现静态包含
<%@include file=“URL”%>
2:使用<jsp:include>标签实现动态包含
<jsp:include page=“URL”>
动态包含与静态包含的区别
静态包含 | 动态包含 |
<%@include%> | <jsp:include> |
先将页面包含,后执行页面代码,即将一个页面的代码复制到另一个页面中。 | 先执行页面代码,后将页面包含,即将一个页面的运行结果包含到另一个页面中。 |
被包含的页面内容发生变化时,包含页面将会被重新编译。 | 被包含页面内容发生变化时,包含页面不会重新编译。 |
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) | 返回相对路径的真实路径 |
JSP常用内置对象
内置对象 | 说明 |
out | 用于向客户端输出数据 |
request | 主要用于处理客户端请求的数据信息 |
response | 用于响应客户端请求并向客户端输出信息 |
session | 用于记录会话状态的相关信息 |
application | 类似于系统的全局变量,用于实现Web应用中的资源共享 |
对象的作用域
page作用域对应的作用域访问对象为pageContext 对象 |
request作用域对应的作用域访问对象为request 对象 |
session作用域对应的作用域访问对象为session 对象 |
application作用域对应的作用域访问对象为application 对象 |
page作用域
page作用域指本JSP页面的范围
pageContext.setAttribute(键,值)
pageContext.getAttribute(键)
request作用域
request作用域内的对象则是与客户端的请求绑定在一起
session作用域
session作用域:一次会话
application作用域
application作用域:面对整个Web应用程序
名称 | 说 明 |
page作用域 | 在一个页面范围内有效,通过pageContext对象访问 |
request作用域 | 在一个请求范围内有效 |
session作用域 | 在一次会话范围内容有效 |
application作用域 | 在一个应用服务器范围内有效 |
Cookie简介
Cookie是Web服务器保存在客户端的一系列文本信息
Cookie的作用
对特定对象的追踪(Cookie能告诉在线广告商广告被点击的次数,从而可以更精确的投放广告)
实现各种个性化服务(Cookie能帮助站点统计用户个人资料以实现各种各样的个性化服务)
简化登录(Cookie有效期限未到时,Cookie能使用户在不键入密码和用户名的情况下进入曾经浏览过的一些站点)
安全性能
容易泄露信息
在JSP中使用
语法:
创建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的有效时间,以秒为单位 |
小结
session | cookie |
在服务器端保存用户信息 | 在客户端保存用户信息 |
session中保存的是Object类型 | cookie保存的是 String类型 |
随会话的结束而将其存储的数据销毁 | cookie可以长期保存在客户端 |
保存重要的信息 | 保存不重要的用户信息 |