上一次写到Servlet的实现方法,主要还是通过继承HttpServlet来实现Servlet。下面主要是回顾一下HttpServletRequest和HttpServletResponse对象中的一些方法。因为Web服务器收到客户端的http请求,会针对每一次请求创建一个用于代表请求的request的对象,和代表响应的response对象。


1.HttpServletResponse

  设置响应状态码:setStatus(int )

  请求重定向:sendRedirect(String location)

  设置响应消息头:setHeader(String name, String value)  

    eg,  response.setHeader("content-type","text/html;charset=UTF-8")

        告知浏览器使用什么码表,即让浏览器用UTF-8来解析返回的数据

  设置服务器端编码:setCharacterEncoding(String charset)  

    eg,  response.setCharacterEncoding("UTF-8");

        告知服务器(servlet)用UTF-8来转码,而不是用ISO-8859-1(服务器端默认编码)

  设置客户端和服务器端编码:setContentType(String charset)

        setHeader和setCharacterEncoding的优化,同时告诉客户端和服务器端使用什么格式的编码。

  获得字符输出流:getWrite()

  获得字节输出流:getOutputStream()//注意编码

2.HttpServletRequest

  获得请求方式:getMethod();//post or get

  获得客户端发出请求时完整的url:getRequestURL();

  获得请求行中的uri:getRequestURI();

  获得当前应用的虚拟目录:getContextPath();

  获得请求行中的参数部分:getQueryString();

  根据请求消息头的名称获得其对应的值:getHeader(String name);

 以下是关于请求正文方面的方法,比较重要

  <input type="text" name="username"/>

  getParameter(String name);根据表单中name属性的名,获取value值

  getParameterValues(String name)为复选框提供的获得值得方法

  getParameterNames();获取表单提交的所有name名称

  getParameterMap();得到表单提交的所有的键值

 因为request也是一个域对象,所以有以下方法

  setAttribute(String name, Object value);

  getAttribute(String name);

  removeAttribute(String name);

 请求转发相关:(注意:请求转发不能转发到其他路径,必须是本项目之下的,而重定向可以到其他路径)

  getRequestDispatcher(String path)//获得一个RequestDispatcher对象

    forword(ServletRequest , ServletResponse )//转发

    include(ServletRequest , ServletResponse )//请求包含

 解决post方式编码问题:

  request.setCharacterEncoding("UTF-8");//告诉服务器要使用什么编码,注:浏览器是用什么编码传到服务器端就是什么编码

 解决get方式编码问题:

   byte b[] = name.getBytes("ISO-8859-1");//1010101

  String name = new String(b,"UTF-8");//解决

  即:String name = new String(name.getBytes("ISO-8859-1"),"UTF-8");


以下回顾Cookie和Session。

3.Cookie

  cookie是servlet发送到web浏览器的少量信息,这些信息由浏览器保存,然后发送回服务器。cookie的值可以唯一的标识客户端。因此,cookie常用于会话管理。一个cookie拥有一个键、值和一些可选属性(注释,路径,域限定符、版本号)。Servlet通过视同HttpServletResponse的addCookie方法,将创建的cookie发送到客户端浏览器,该方法将字段添加到HTTP响应头,以便于一次一个地将cookie发送到浏览器。而客户端浏览器通过向HTTP响应头添加字段将cookie返回给服务器端(即servlet),可使用HttpServletRequest的getCookie方法从请求中获取cookie。注意,一些cookie可能有相同的键,但却有不同的路径属性。

  属性:

    (1)name:相当于键。名称不能唯一确定一个Cookie。因为cookie的路径可能不同。

    (2)value:值。

    (3)path:默认值是写cookie所在的应用程序的访问路径。(客户端在访问服务器资源时,根据访问的路径决定是否带着cookie到服务器,如果访问的路径是以cookie所在的path,就带着cookie,否则不带)。

    (4)maxAge:cookie的缓存时间。默认-1(存在浏览器的内存中)。通过setMaxAge(int )来设置缓存时间。(可实现记住用户的功能)

        负数:cookie的数据存在浏览器缓存中

        0:删除。

        整数:缓存到磁盘上的时间。(单位s)

4.Session

  session也是一个域对象。(目前已知的域对象:ServletContext,request,Session)。sesseion可以使处在同一个会话下的应用共享数据。cookie是客户端技术,只能存字符串。HttpSession是服务器端技术,可以存对象。

  通过getSession()获得Session对象。

  HttpSession request.getSession()内部执行原理:

    (1)获取名称为JSESSIONID的cookie的值。(session是依赖于cookie的)

    (2)如果没有这样的cookie,就创建一个新的httpsession对象,并分配一个唯一的SessionID,并向客户端返回一个键值为JSESSIONID=SessionID的cookie。

    (3)如果有这样的cookie,获取cookie的值(即HttpSession对象的值),从服务器内存中根据ID找到HttpSession对象。

        找到了:取出来继续服务。

        找不到:从(2)开始。

  方法:

    setAttribute(String )

    getAttribute(String )

java之servlet学习基础(二)的更多相关文章

  1. java之servlet学习基础(一)

    这一阵子在学java三大框架.却在学习过程中发现前面的知识已经忘记了.所以决定写一篇博客来总结回顾之前的学习. 1.Servlet是什么? servlet是一个运行在服务器端的小应用程序.通过HTTP ...

  2. java之jvm学习笔记二(类装载器的体系结构)

    java的class只在需要的时候才内转载入内存,并由java虚拟机的执行引擎来执行,而执行引擎从总的来说主要的执行方式分为四种, 第一种,一次性解释代码,也就是当字节码转载到内存后,每次需要都会重新 ...

  3. Java编程风格学习(二)

    二.格式规范 在上一篇的Java编程风格学习(一)中我们讲述了在Java编码中的一般原则,虽然这些原则并不涉及具体的代码规范,但是这些原则却是我们在Java开发过程中所应该遵循的规范与思想.今天我们将 ...

  4. Java Web入门学习(二) Eclipse的配置

    Java Web学习(二) Eclipse的配置 一.下载Eclipse 1.进入Eclipse官网,进行下载 上图,下载Eclipse IDE for JaveEE Developers 版本,然后 ...

  5. 【Java语言特性学习之二】反射

    一.概念java加载class文件分两种情况:(1)类型是编译器已知的,这种文件的.class文件在编译的时候,编译器会把.class文件打开(不加载)检查,称为Run- Time Type Iden ...

  6. Scala的基础用法 和 Java相对应学习(二)变量、循环、语法

    一.配置相关环境 1.增加项目 在idea里面创建新的maven项目 2. 在pom文件中增加依赖 <?xml version="1.0" encoding="UT ...

  7. servlet 学习(二)

    一.ServletConfig讲解 1.1.配置Servlet初始化参数 在Servlet的配置文件web.xml中,可以使用一个或多个<init-param>标签为servlet配置一些 ...

  8. servlet学习笔记二

    Servlet主要内容: 1)表单处理 2)乱码问题 3)页面跳转 4)生命周期 一.表单处理 Servlet获取表单数据 request.getParameter():通过表单参数名获取参数值 re ...

  9. Java编程思想学习(十二) 数组和容器

    一.数组 1).数组的多种初始化方式 下面总结了初始化数组的多种方式,以及如何对指向数组的引用赋值,使其指向另一个数组对象.值得注意的是:对象数组和普通数组的各种操作基本上都是一样的:要说有什么不同的 ...

随机推荐

  1. Django框架之中间件与Auth

    Django框架之中间件与Auth模块一 cbv加装饰器 -先导入:from django.utils.decorators import method_decorator -1 可以在方法上加装饰器 ...

  2. 关于Unsupported major.minor version 52.0解决方案的补充

    参考:https://blog.csdn.net/jingtianyiyi/article/details/80455916 补充: 这个设置比较容易忽略: 在eclipse中新建tomcat或在原有 ...

  3. loadrunner-关联

    1.什么是关联? 将服务器动态返回的值,保存成一个参数,供后面需要使用到 此参数的地方使用 PS:1.一定是服务器返回的 2.动态变化的,静态不需要关联 3.服务器需要校验的 4.保存成一个参数 5. ...

  4. 执行Runtime.exec()需要注意的陷阱

    作为Java语言的一部分.java.lang包被隐藏的导入到每一个Java程序.这个包的表面陷阱,经常影响到大多数程序员.这个月,我将讨论运行时exec()方法时的潜伏陷阱. 陷阱4:当运行exec( ...

  5. socket学习

    对应的代码: 服务端: import socket phone = socket.socket(socket.AF_INET,socket.SOCK_STREAM) #买手机 phone.bind(( ...

  6. windows cmd.exe 将程序 stdout 输出到文件中

    问题背景:通过 cmd.exe 调用程序,会有一些输出信息,在 cmd 中不方便查阅,所以需要导入文件中. 例如 方法: 可以在其路径下看到

  7. Laravel 5.3 单用户登录的简单实现

    需求 一个用户不能重复登录. 后登录者可以踢掉前者. 设计思路: 核心概念 用户ID: 是用户表主键 singleToken 算法: singleToken = md5(用户IP + 用户ID + 登 ...

  8. 企业架构设计之IFW实践回顾

    前言 笔者几年前曾参与过一套网络银行的系统建设以及后续这套系统在信用.云服务.保险.基金.支付等领域的复用,使用了IFW模型的变体.当时仅仅是根据架构师的设计进行编码.测试和交付以及后续的维护,没有对 ...

  9. 基础算法简单实现-python

    目录 Python(版本3.6+)-Anna-Lena Popkes

  10. mybatis调用存储过程并且有多个返回output值

    mapperxml配置 配置时需要注意 parameterMap在mybatis3.2.6版本已经不再用了,而是使用 parameterType <select id="callget ...