分享

web常用对象2

 印度阿三17 2019-08-14

web常用对象2

Session

  对于服务器而言,每一个连接到它的客户端都是一个 session,servlet 容器 使用此接口创建 HTTP 客户端和 HTTP 服务器之间的会话。会话将保留指定的 时间段,跨多个连接或来自用户的页面请求。一个会话通常对应于一个用户,该 用户可能多次访问一个站点。可以通过此接口查看和操作有关某个会话的信息, 比如会话标识符、创建时间和最后一次访问时间。在整个 session 中,最重要的 就是属性的操作。

  session 无论客户端还是服务器端都可以感知到,若重新打开一个新的浏览 器,则无法取得之前设置的 session,因为每一个 session 只保存在当前的浏览 器当中,并在相关的页面取得。

1.Session的作用

  Session的作用就是为了标识一次会话,或者说确认一个用户;并且在一次会话(一个用户的多次请求)期间共享数据。

2.Session的获取

  通过 request.getSession()方法,来获取当前会话的 session 对象。

3.Session的方法

  获取会话标识符、获取创建时间、获取最后一次访问时间、判断是否是新的会话

作为域对象

​   Session 用来表示一次会话,在一次会话中数据是可以共享的。

​   通过 setAttribute(name,value);方法向域对象中添加数据

​   通过getAttribute(name) 从域对象中获取数据

​   通过 removeAttribute(name)从域对象中移除数据。

public class Session01 extends HttpServlet {
	private static final long serialVersionUID = 1L;

	
	protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		//创建获取当前会话的session对象
		HttpSession session=request.getSession();
		
		//获取会话标识符
		String id=session.getId();
		
		//获取session的创建时间
		Long time=session.getCreationTime();
		
		//获取最后一次访问时间
		Long lasttime=session.getLastAccessedTime();
		
		//判断是否是新的会话
		Boolean flag=session.isNew();	
        
        //设置session域对象
		session.setAttribute("uname01", "zhangsan");
        		
		//获取session的域对象
		String name01=(String)session.getAttribute("uname01");
	}
}

4.Session 的销毁

1、默认到期时间

  Tomcat 中 session 默认的存活时间为 30min,即你不操作界面的时间,一旦有操作,session 会重新计时。

  可以在Tomcat中的web.xml文件中进行修改。

<session-config>
    <session-timeout>30</session-timeout>
</session-config>
2、自己设定到期时间

​   设定 session 的生命周期,通过session.setMaxInactiveInterval(int);来设定 session 的最大不活动时间,单位为秒。
通过 getMaxInactiveInterval();方法来查看当前 Session 对象的最大不活动时间。

3、销毁session

  session.invalidate();

4、关闭浏览器

  session的底层是依赖cookie,默认关闭浏览器即失效

5、关闭服务器

  非正常关闭服务器
  :如果是正常通过stop关闭服务器,session对象会被钝化到本地磁盘中,等下次访问时会从本地磁盘中活化, 当非正常关闭服务器时,session 销毁;当正常关闭服务器时,Session 将被序列化到磁盘上,在工作空间 work 目录下的 SESSION.ser 文件中,下次启动服务时,自动加载到内存。

ServletContext 对象

  每一个 web 应用都有且仅有一个 ServletContext 对象,又称 Application 对 象,从名称中可知,该对象是与应用程序相关的。在 WEB 容器启动的时候,会 为每一个 WEB 应用程序创 建一个对应的 ServletContext 对象。

  该对象有两大作用,第一、作为域对象用来共享数据,此时数据在整个应用 程序中共享; 第二、该对象中保存了当前应用程序相关信息。例如可以通过 getServerInfo();方法获取当前服务器信息, getResourceAsStream(String path); 方法以流的形式获取某个资源,getRealPath(String path);获取资源的真实路径等。

获取ServletContext对象

  1、通过request获取

  2、通过session获取

  3、通过getServletConfig方法

  4、直接获取

常用方法

  获取服务器版本信息 getServerInfo()

  获取项目在服务器中的路径 getRealPath("/")

作为域对象

  通过向 ServletContext 中存取数据,可以使得整个应用程序共享所存数据

// 通过request获取
ServletContext servletContext01=request.getServletContext();
// 通过session获取		
ServletContext servletContext02=request.getSession().getServletContext();
// 通过getServletConfig方法
ServletContext servletContext03=getServletConfig().getServletContext();
// 直接获取
ServletContext servletContext04=getServletContext();

// 获取服务器版本信息
String serverInfo=servletContext01.getServerInfo();
System.out.println("服务器版本信息为:" serverInfo);

//获取项目在服务器中的路径
String path=servletContext01.getRealPath("/");
System.out.println(path);

文件上传下载

一.文件下载

Step1:

  需要通过 HttpServletResponse.setContentType 方法设置 Content-type 头字段的值为浏览器无法使用某种方式或激活某个程序来处理的 MIME 类型, 例 如 ”application/octet-stream” 或 ”application/x-msdownload” 等

Step2:

  需要通过 HttpServletResponse.setHeader 方法设置 Content-Disposition 头的值 为”attachment;filename=文件名”

Step3:

  读取下载文件,调用 HttpServletResponse.getOutputStream方法返回的OutputStream对象来向客户端写入附件内容。

public class DownloadServlet extends HttpServlet {
	private static final long serialVersionUID = 1L;

	
	protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		//设置浏览器请求的编码格式
		request.setCharacterEncoding("UTF-8");
		//获取要下载的文件名
		String fileName=request.getParameter("filename");
		//获取文件的文件夹存放路径(即项目存放在服务器中的路径)
		String realPath=request.getServletContext().getRealPath("/upload/");
		//获取文件路径
		String filePath=realPath fileName;
		//获取文件对象
		File file=new File(filePath);
		//判断非空
		if(file.exists()){
			//设置 Content-type头字段的值 为 浏览器无法使用某种方式或激活某个程序来处理的 MIME 类型
			response.setContentType("application/x-msdownload");
			//设置 Content-Disposition 头的值 为”attachment;filename=文件名”
			response.setHeader("Content-Disposition","attachment;filename=" fileName);
			//获取文件字节读入流
			InputStream in=new FileInputStream(file);
			//获取字节写出流,写出到浏览器
			ServletOutputStream out=response.getOutputStream();
			//准备字节数组
			byte[] bytes=new byte[1024];
			int len=0;
			//读写
			while((len=in.read(bytes))!=-1){
				out.write(bytes,0,len);
			}
			out.close();
			in.close();
		}else {
			response.getWriter().write("<h2>文件不存在</h2>");
		}	
	}
}

二.文件上传

  在做文件上传的时候,会有一个上传文件的界面,首先我们需要一个表单,并且表单的 请求方式为 POST;其次我们的 form 表单的 enctype 必须设 为 ”multipart/form-data” 即 enctype=“multipart/form-data” 意 思 是 设 置 表 单 的 MIME 编码。默认情况下这个编码格式 是 ”application/x-www-form-urlencoded”, 不能用于文件上传;只有使用了 multipart/form-data 才能完整地传递文件数据。

来源:https://www./content-4-390401.html

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多