servlet常用对象2

Posted javaxiaobu

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了servlet常用对象2相关的知识,希望对你有一定的参考价值。

Cookie对象

浏览器缓存技术,只存储在浏览器中

cookie的大小在4kb左右,每个浏览器在同一域名下能存放cookie数量是有限的

优缺点:提高网页的效率,减轻服务器的负载;安全性较差。

1 创建及发送

       Cookie cookie = new Cookie("key","value") 

       response.addCookie(cookie对象)

              注:创建同名的cookie会覆盖之前的cookie(在相同的domain和path下)

2 获取cookie

       request.getCookies()    获取所有上传的cookie对象数组 再遍历获取

       单个cookie对象获取数据 对象.getName()和对象.getValue()

3 中文处理

       URLEncoder.encode("姓名")将中文字符串进转码

URLDecoder.decode(value)将对象解码为中文,(若本来就是中文不会乱码)

Cookie cookie = new Cookie(URLEncoder.encode("姓名"),URLEncoder.encode("张三"))

4 到期时间设置

       在创建后发送前设置

       cookie.setMaxAge(int)       

参数为 负数        默认该cookie在关闭浏览器后失效

              0            立即删除cookie 用在对同名cookie进行删除中

              正数      cookie保留秒数

5只有访问的地址中包含cookie的path值时,才能得到cookie对象

httpSession对象

session用于标记一次会话,一次会话中服务端与客户端的多次请求响应交互

用在确认当前当前交互的用户 并且在一次会话(一个用户的多次请求)期间共享数据

依赖cookie技术环境

在cookie总存储了JSESSIONID和对应的SessionId值, SessionId值用于标识会话

session的作用域是整个项目,请求转发和项目内重定向都有效

 

获取session对象

HttpSession session = req.getSession();          获取session

             

session对象的方法

getId()                                      获取会话标识符

getCreationTime()                      获取创建时间

       getLastAccessedTime()               获取最后访问时间

       isNew()                                    判断是否是新创建的对象

       setMaxInactiveInterval(int)      设定 session 的最大不活动时间,单位为秒

getMaxInactiveInterval()             获取 session 的最大不活动时间

invalidate()                               session直接失效

session对象的参数处理方法

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

getAttribute(name)             从域对象中获取数据,

removeAttribute(name)      从域对象中移除数据

 

 

SessionId 是为了标识一次会话的唯一标志。

一个请求到达服务器后,若开启了会话(访问了 session),

服务器第一步会查看是否从客户端回传一个名为 JSESSIONID 的 cookie

如果JSESSIONID不存在,则服务器会新建session对象,并重新标识

如果JSESSIONID存在,服务器根据ID去服务器中查找与之对应的session对象

如果没找到,则服务器会新建session对象,并重新标识

如果找到,则获取 session对象,响应给客户端

 

Session的失效

1、达到最大不活动时间

Tomcat中默认30分钟,可通过服务器的(web.xml)配置进行修改

<session-config>

<session-timeout>30</session-timeout>

</session-config>

2、自己设定过期时间

           setMaxInactiveInterval(int)         设定 session 的最大不活动时间,单位为秒。

           getMaxInactiveInterval()             获取Session 对象的最大不活动时间。

3、立即失效

方法 .invalidate()

4、关闭浏览器    session的底层依赖于cookie,默认关闭浏览器失效。

5、关闭服务器

     非正常关闭服务器时才会失效。

正常关闭服务器,session会被钝化存储,下次访问时自动活化出来。

ServletContext对象

服务器中每个web项目只有一个ServletContext对象(application对象)应用对象

作用:

1提供应用的相关信息

getServerInfo()   获取服务器版本

getRealPath()      获取项目在服务器中真实路径

2作为域对象,共享数据, 整个应用中都有效

获取sevletcontext对象

       request.getServletContext()                   通过request对象获取

       sexsion. getServletContext()                     通过sexsion回话对象获取

       getServletConfig().getServletContext()      直接获取      

getServletContext()                               直接获取

对sevletcontext域对象进行操作的方法

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

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

removeAttribute(name)从域对象中移除数据

文件上传下载

上传

       1前台页面    通过表单实现

表单的提交类型为method="POST"

表单类型设置为enctype="multipart/form-data"

表单元素设置name属性值

<form action="us/123" method="POST" enctype="multipart/form-data">

         姓名:<input type="text" name="uname"/> <br>

         文件:<input type="file" name="myfile" /><br>

         <button>提交</button>

</form>

2后台代码

       导入commons-io 和 commons-fileupload 两个 jar包

下载地址http://commons.apache.org/

主要对象

DiskFileItemFactory – 设置磁盘空间,保存临时文件。工具类

ServletFileUpload – 文件上传的核心类,此类接收request,并解析

ServletFileUpload.parseRequest(request) – List 解析 request

主要步骤

1、 创建一个 DiskFileItemFactory 工厂类,并制定临时文件和大小

2、 创建 ServletFileUpload 核心类,接收临时文件,做请求的转换

3、 通过 ServletFileUpload 类转换原始请求,得到 FileItem 集合

4、 遍历集合中的各个元素并处理

5、 判断每个元素是否是普通表单项,如果是则按照普通表单项处理

6、 如果不是普通表单项,则是文件,通过处理的方式进行处理(上传)

// 设定编码,可以获取中文文件名

request.setCharacterEncoding("UTF-8");    

// 获取tomcat下的upload目录的路径

String path = getServletContext().getRealPath("/upload");

// 临时文件目录

String tempPath = getServletContext().getRealPath("/temp");    

// 检查我们是否有文件上传请求

// boolean isMultipart = ServletFileUpload.isMultipartContent(request);     

// 1、声明DiskFileItemFactory工厂类,用于在指定磁盘上设置一个临时目录

DiskFileItemFactory disk = new DiskFileItemFactory(1024, new File(tempPath));

// 2、声明ServletFileUpload,接收上面的临时文件。也可以默认值

ServletFileUpload uplaod = new ServletFileUpload(disk);

try

    // 3、解析request,返回FileItem的集合

    List<FileItem> list = uplaod.parseRequest(request);

    // 判断集合是否为空

    if (list.size() > 0)

         // 遍历FileItem的集合,判断是普通表单项还是文件上传

         for (FileItem file : list)

             // 判断是否是普通的表单项

             if (file.isFormField())

                      String fieldName = file.getFieldName();

                      // 中文乱码,此时还需要指定获取数据的编码方式

                      // String value = file.getString();

                      String value = file.getString("UTF-8");

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

                  else // 说明是一个文件

                      // 获取文件本身的名称

                      String fileName = file.getName();

                      System.out.println(file.getFieldName());

                      // 处理文件名称

             fileName =  fileName.substring(fileName.lastIndexOf("\\") + 1);

             System.out.println("old Name : " + fileName);

             // 修改名称 (得到文件的后缀名)

             String extName =  fileName.substring(fileName.lastIndexOf("."));

             // 生成随机的文件名 + 文件后缀

                String newName =  UUID.randomUUID().toString().replace("-", "") + extName;

             // 保存新的名称,并写出到新文件中

             file.write(new File(path + "/" + newName));

             System.out.println("文件名是:" + fileName);

             System.out.println("文件大小是:" + file.getSize());

             //删除临时文件

             file.delete();

            

            

    catch (FileUploadException e)

         e.printStackTrace();

    catch (Exception e)

         e.printStackTrace();

      

 

下载

超链接下载

<a href=”url”>标签          

浏览器无法识别超链接内容时,会自动转为下载窗口,若能够识别则直接页面显示    

       <a href=”url” download=”资源下载名”>     

添加download属性可以实现下载 下载名可不设置     但部分浏览器不支持

servlet后台控制下载

       获取下载文件名,拼接获取服务器中资源的路径,进而得到file文件对象

       设置传输类型

response. setContentType("application/x-msdownload")

       设置头信息

response.setHeader("Content-Disposition", "attachment;filename=" + fileName);

       获取输入输出流将文件进行传输,传输完后关闭

protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException   

    // 设置请求的编码

    request.setCharacterEncoding("UTF-8");

    // 得到要下载的文件名

    String fileName = request.getParameter("fileName");

    // 得到文件存放咋服务器中的真实路径

    String filePath = request.getServletContext().getRealPath("/upload/" + fileName);

    // 通过路径得到file对象

    File file = new File(filePath);

    // 判断文件是否存在,并且是一个标准文件

    if (file.exists() && file.isFile())          

         // 设置相应类型 application/octet-stream

         response.setContentType("application/x-msdownload");

         // 设置头信息

         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

         System.out.println("文件不存在!");

      

 

      

      

以上是关于servlet常用对象2的主要内容,如果未能解决你的问题,请参考以下文章

JavaWeb-Servle介绍

jsp

用servlet校验密码2

ServletServlet 详解(使用+原理)

ServletServlet 详解(使用+原理)

Struts简单入门实例