Cookie和Session,访问Web项目上的资源文件

WEB项目总路径问题总结:

背景:项目中的资源文件我们如何访问:(路径怎么写)

例子:webRoot目录下有一个目标资源: target.html,如何访问


思考:


目标资源是给谁使用的。

* 给服务器使用的:   / 表示在当前web应用的根目录(webRoot下)

* 给浏览器使用的: /  表示在webapps的根目录下

代码测试:


public void doGet(HttpServletRequest request, HttpServletResponse response)

throws ServletException, IOException {

response.setContentType("text/html;charset=utf-8");

//目标资源: target.html

/**

* 思考: 目标资源是给谁使用的。

* 给服务器使用的:   / 表示在当前web应用的根目录(webRoot下)

* 给浏览器使用的: /  表示在webapps的根目录下

*/

/**

* 1.转发:服务器内部使用,直接访问,不要项目名

*/

// request.getRequestDispatcher("/target.html").forward(request, response);

/**

* 2.请求重定向 : 浏览器访问项目,需要项目名

*/

// response.sendRedirect("/day11/target.html");

/**

* 3.html页面的超连接href : 超链接,浏览器访问:需要项目名

*/

// response.getWriter().write("<html><body><a href=‘/day11/target.html‘>超链接</a></body></html>");

/**

* 4.html页面中的form提交地址  : 浏览器范文,需要项目名

*/

response.getWriter().write("<html>"

+ "<body>"

+ "<form action=‘/day11/target.html‘>"

+ "<input type=‘submit‘/>"

+ "</form>"

+ "</body>"

+ "</html>");

}

获取Tomcat服务器项目路径

API介绍:


request.getSession().getServletContext().getRealPath("/");

打印的结果是:


代码:


public void doGet(HttpServletRequest request, HttpServletResponse response)

throws ServletException, IOException {

System.out.println(request.getSession().getServletContext().getRealPath("/"));

}

读取Web应用路径下的配置文件:

代码一::


public void doGet(HttpServletRequest request, HttpServletResponse response)

throws ServletException, IOException {

/**

* 使用web应用下加载资源文件的方法

*/

/**

* 1. getRealPath读取,返回资源文件的绝对路径(物理路径):服务器内部调用,不用项目名

*/

String path = this.getServletContext().getRealPath("/WEB-INF/classes/db.properties");

System.out.println(path);

File file = new File(path);

FileInputStream in = new FileInputStream(file);

Properties prop = new Properties();

// //读取资源文件

prop.load(in);

String user = prop.getProperty("user");

String password = prop.getProperty("password");

System.out.println("user="+user);

System.out.println("password="+password);

}

打印结果:


user=root

password=root

代码二,使用类加载器方式:


InputStream in=ResourceDemo.class.getClassLoader().getResourceAsStream("db.properties");

Properties prop = new Properties();

// //读取资源文件

prop.load(in);

//

String user = prop.getProperty("user");

String password = prop.getProperty("password");

System.out.println("user="+user);

System.out.println("password="+password);

打印结果一样

代码三:


/**

* 2. getResourceAsStream() 得到资源文件,返回的是输入流

*/

InputStream in = this.getServletContext().getResourceAsStream("/WEB-INF/classes/db.properties");

Properties prop = new Properties();

//读取资源文件

prop.load(in);

String user = prop.getProperty("user");

String password = prop.getProperty("password");

System.out.println("user="+user);

System.out.println("password="+password);

注意一下,下面的代码效果是一样的:


request.getSession().getServletContext().getRealPath("/");

this.getServletContext().getRealPath("/");

ResourceDemo.class.getClassLoader().getResourceAsStream("db.properties")

this.getServletContext().getResourceAsStream("/WEB-INF/classes/db.properties");

会话管理

概念:


会话管理: 管理浏览器客户端 和 服务器端之间会话过程中产生的会话数据

会话技术:


Cookie技术:会话数据保存在浏览器客户端。

Session技术:会话数据保存在服务器端。

Cookie技术以及常用的API

特点:


Cookie技术:会话数据保存在浏览器客户端

 


Cookie类:用于存储会话数据

1)构造Cookie对象

Cookie(java.lang.String name, java.lang.String value)

2)设置cookie

void setMaxAge(int expiry) : 设置cookie的有效时间

void setValue(java.lang.String newValue) :设置cookie的值

3)发送cookie到浏览器端保存

void response.addCookie(Cookie cookie)  : 发送cookie

4)服务器接收cookie

Cookie[] request.getCookies()  : 接收cookie

 

代码演示


public void doGet(HttpServletRequest request, HttpServletResponse response)

throws ServletException, IOException {

//1.创建Cookie对象

Cookie cookie1 = new Cookie("name","eric");

cookie1.setValue("jerry");

/**

* 2)设置cookie的有效时间

* 正整数:表示cookie数据保存浏览器的缓存目录(硬盘中),数值表示保存的时间。

负整数:表示cookie数据保存浏览器的内存中。浏览器关闭cookie就丢失了!!

零:表示删除同名的cookie数据

*/

cookie1.setMaxAge(20); //20秒,从最后不调用cookie开始计算 数字表示时间

// cookie1.setMaxAge(-1); //cookie保存在浏览器内存(会话cookie)

// cookie1.setMaxAge(0);

//2.把cookie数据发送到浏览器(通过响应头发送: set-cookie名称)

response.addCookie(cookie1);

//3.接收浏览器发送的cookie信息

Cookie[] cookies = request.getCookies();

//注意:判断null,否则空指针

if(cookies!=null){

//遍历

for(Cookie c:cookies){

String name = c.getName();

String value = c.getValue();

System.out.println(name+"="+value);

}

}else{

System.out.println("没有接收cookie数据");

}

}

打印结果:


 

Cookie原理


1)服务器创建cookie对象,把会话数据存储到cookie对象中。

new Cookie("name","value");

2) 服务器发送cookie信息到浏览器

response.addCookie(cookie);

3)浏览器得到服务器发送的cookie,然后保存在浏览器端。

4)浏览器在下次访问服务器时,会带着cookie信息

5)服务器接收到浏览器带来的cookie信息

request.getCookies();

删除Cookie


public void doGet(HttpServletRequest request, HttpServletResponse response)

throws ServletException, IOException {

/**

* 需求: 删除cookie

*/

Cookie cookie = new Cookie("name","xxxx");

cookie.setMaxAge(0);//删除同名的cookies   这个位置不要和下面那一行到代码换位置

// 把cookie数据发送到浏览器(通过响应头发送: set-cookie名称)

response.addCookie(cookie);

System.out.println("删除成功");

//3.接收浏览器发送的cookie信息

Cookie[] cookies = request.getCookies();

//注意:判断null,否则空指针

if(cookies!=null){

//遍历

for(Cookie c:cookies){

String name = c.getName();

String value = c.getValue();

System.out.println(name+"="+value);

}

}else{

System.out.println("没有接收cookie数据");

}

}

打印结果:


Cookie应用:用户上次访问的时间


public void doGet(HttpServletRequest request, HttpServletResponse response)

throws ServletException, IOException {

response.setContentType("text/html;charset=utf-8");

//获取当前时间

SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");

String curTime = format.format(new Date());

//取得cookie

Cookie[] cookies = request.getCookies();

String lastTime = null;

if(cookies!=null){

for (Cookie cookie : cookies) {

if(cookie.getName().equals("lastTime")){

//有lastTime的cookie,已经是第n次访问

lastTime = cookie.getValue();//上次访问的时间

//第n次访问

//1.把上次显示时间显示到浏览器

response.getWriter().write("欢迎回来,你上次访问的时间为:"+lastTime+",当前时间为:"+curTime);

//2.更新cookie

cookie.setValue(curTime);

cookie.setMaxAge(1*30*24*60*60);

//3.把更新后的cookie发送到浏览器

response.addCookie(cookie);

break;

}

}

}

Session技术


引入

Cookie的局限:

1)Cookie只能存字符串类型。不能保存对象

2)只能存非中文。

3)1个Cookie的容量不超过4KB。

如果要保存非字符串,超过4kb内容,只能使用session技术!!!

Session技术的特点:


Session特点:

会话数据保存在服务器端。(内存中)

Session技术主要的类和API


HttpSession类:用于保存会话数据

1)创建或得到session对象

HttpSession getSession()

HttpSession getSession(boolean create)

2)设置session对象

void setMaxInactiveInterval(int interval)  : 设置session的有效时间

void invalidate()     : 销毁session对象

java.lang.String getId()  : 得到session编号

3)保存会话数据到session对象

void setAttribute(java.lang.String name, java.lang.Object value)  : 保存数据

java.lang.Object getAttribute(java.lang.String name)  : 获取数据

void removeAttribute(java.lang.String name) : 清除数据

代码测试:

SessionDemo1.java


public void doGet(HttpServletRequest request, HttpServletResponse response)

throws ServletException, IOException {

//1.创建session对象

HttpSession session = request.getSession();

/**

* 得到session编号

*/

System.out.println("id="+session.getId());

/**

* 修改session的有效时间 单位  :秒

*/

session.setMaxInactiveInterval(10);

/**

* 手动发送一个硬盘保存的cookie给浏览器

*/

Cookie c = new Cookie("JSESSIONID",session.getId());

c.setMaxAge(60*60);

response.addCookie(c);

//2.保存会话数据

session.setAttribute("name", "rose");

}

SessionDemo2.java


public void doGet(HttpServletRequest request, HttpServletResponse response)

throws ServletException, IOException {

//1.得到session对象

HttpSession session = request.getSession(false);

if(session==null){

System.out.println("没有找到对应的sessino对象");

// return;

}

//3.接收浏览器发送的cookie信息

Cookie[] cookies = request.getCookies();

//注意:判断null,否则空指针

if(cookies!=null){

//遍历

for(Cookie c:cookies){

String name = c.getName();

String value = c.getValue();

System.out.println(name+"="+value);

}

}else{

System.out.println("没有接收cookie数据");

}

/**

* 得到session编号

*/

if(session  != null){

System.out.println("id="+session.getId());

//2.取出数据

String name = (String)session.getAttribute("name");

System.out.println("name="+name);

}

}

Session的一些细节:


1)java.lang.String getId()  : 得到session编号

2)两个getSession方法:

getSession(true) / getSession()  : 创建或得到session对象。没有匹配                         的session编号,自动创建新的session对象。

getSession(false):  得到session对象。没有匹配的session编号,返回null

3)void setMaxInactiveInterval(int interval)  : 设置session的有效时间

session对象销毁时间:

3.1 默认情况30分服务器自动回收

3.2 修改session回收时间

3.3 全局修改session有效时间


<!-- 修改session全局有效时间:分钟 -->

<session-config>

<session-timeout>1</session-timeout>

</session-config>


3.4.手动销毁session对象

void invalidate()     : 销毁session对象


public void doGet(HttpServletRequest request, HttpServletResponse response)

throws ServletException, IOException {

HttpSession session = request.getSession(false);

if(session!=null){

session.invalidate();//手动销毁

System.out.println("手动销毁");

}

System.out.println("销毁成功");

}

Session的原理


问题: 服务器能够识别不同的浏览者!!!

现象:

前提: 在哪个session域对象保存数据,就必须从哪个域对象取出!!!!

浏览器1:(给s1分配一个唯一的标记:s001,把s001发送给浏览器)

1)创建session对象,保存会话数据

HttpSession session = request.getSession();   --保存会话数据 s1

浏览器1 的新窗口(带着s001的标记到服务器查询,s001->s1,返回s1)

1)得到session对象的会话数据

HttpSession session = request.getSession();   --可以取出  s1

新的浏览器1:(没有带s001,不能返回s1)

1)得到session对象的会话数据

HttpSession session = request.getSession();   --不可以取出  s2

浏览器2:(没有带s001,不能返回s1)

1)得到session对象的会话数据

HttpSession session = request.getSession();  --不可以取出  s3

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

时间: 2024-10-13 19:34:10

Cookie和Session,访问Web项目上的资源文件的相关文章

myeclipse&amp;eclipse配置tomcat端口、配置从根目录访问web项目

myeclipse 配置tomcat端口 窗口-->配置-->myeclipse-->8080 配置从根目录访问web项目 (参考:http://www.cnblogs.com/zhwl/p/3629861.html) 1.右键项目-->myeclipse:把上下文目录由/项目名字改为/ 2.修改之后,重新部署项目,会提示要恢复tomcat安装,不然不能部署. eclipse 配置端口 配置从根目录访问web项目

maven新建Spring MVC + MyBatis + Oracle的Web项目中pom.xml文件

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"> <modelVersion&

IIS中遇到无法预览的问题(HTTP 错误 401.3 - Unauthorized 由于 Web 服务器上此资源的访问控制列表(ACL)配置或加密设置,您无权查看此目录或页面。)

在IIS中  依次执行如下操作: 网站--编辑权限--共享(为了方便可以直接将分享对象设置为everyone)--安全(直接勾选 everyone )--应用--确定. IIS中遇到无法预览的问题(HTTP 错误 401.3 - Unauthorized 由于 Web 服务器上此资源的访问控制列表(ACL)配置或加密设置,您无权查看此目录或页面.)

使用python在WEB页面上生成EXCEL文件

来自:http://blog.sina.com.cn/s/blog_5d18f85f0101bxo7.html 近日写的一个程序需要在WEB服务器上生成EXCEL文件供用户下载,研究了一下找到了以下比较可行的实现方案,下面以web.py为例,把相关代码贴出来供大家参考: 首先需要下载生成EXCEL的模块,推荐使用xlwt import xlwt import StringIO import web urls = ( '/rim_request','rim_request', '/rim_expo

读取web应用下的资源文件(例如properties)

1 package gz.itcast.b_resource; 2 3 import java.io.IOException; 4 import java.io.InputStream; 5 import java.util.Properties; 6 7 import javax.servlet.ServletException; 8 import javax.servlet.http.HttpServlet; 9 import javax.servlet.http.HttpServletRe

ServletContext读取Web应用中的资源文件

1 package cn.itcast; 2 3 import java.io.FileInputStream; 4 import java.io.IOException; 5 import java.io.InputStream; 6 import java.io.PrintWriter; 7 import java.util.Properties; 8 9 import javax.servlet.ServletContext; 10 import javax.servlet.Servlet

eclipse,tomcat部署web项目,以及本地文件访问

1.直接把项目复制到Tomcat安装目录的webapps目录中,这是最简单的一种Tomcat项目部署的方法,也是初学者最常用的方法. 2.在tomcat安装目录中有一个conf文件夹,打开此文件夹,其中包含配置文件server.xml,打开配置文件,并在<host>和</host>之间插入如下语句. <Context path="/hello" docBase="F:\eclipse3.2\workspace\hello\WebRoot"

【UEditor】 UEditor整合项目上传资源到阿里云服务器

目录 关于此文 下载源码 JSP代码 Java代码 阿里云jar包引入配置 成功啦! 回到顶部 关于此文 项目中要实现编辑器生成带格式的html文档,存入模板,最后生成html的URL,所以选择了UEditor. UEditor是由百度WEB前端研发部开发的所见即所得的开源富文本编辑器,具有轻量.可定制.用户体验优秀等特点. 之前没有接触过编辑器,从头开始摸索.看API,看网上的例子.之前,用的是UMeditor,是UEditor的mini版本.用的人少,例子也少.让我很苦恼.之后又换回了完整版

Xcode svn import项目 上传.a文件(静态库)

在终端使用命令 touch 项目所在文件夹 svn import 项目文件夹 https://服务器地址 -m "iPad import" 这样就把项目上传到服务器上了!但是不能把.a文件上传到服务器. 上传.a文件(静态库),首先进入.a文件所在的文件夹,使用命令 svn add 文件名.a 然后在使用命令 svn commit -m “提交说明消息” http://blog.csdn.net/wohaoxuexi/article/details/8444184