Servlet 常用类

Servlet 是一套标准的接口规范,当用户通过web请求来访问服务器时,由web容器根据配置调用我们实现的对应的servlet对象来提供服务。同时为了方便开发,servlet标准中也提供了许多常用的工具类,比如基本的Request 和Response对象以及其他要说到的常用的类。

ServletRequest 对象

Servlet接口中的service方法的定义如下:

public void service(ServletRequest req, ServletResponse res) throws ServletException, IOException;

从接口上来看,我们只能在service方法中使用这个对象。

当用户请求到达服务器时,服务器会将标准的HTTP请求包封装为一个 ServletRequest对象,并调用service将该对象作为参数传入。也就是说这个对象是与HTTP协议息息相关的

下面是它的一些常用方法

//请求行相关方法
public String getMethod(); //返回请求的方法
public String getContextPath(); //获取请求的虚拟目录(或者项目所在目录)
public String getServletPath(); //获取servlet路径
public String getQueryString();// 获取查询字符串,也就是提交请求url中参数部分
public String getRequestURI(); //获取请求的URI
public StringBuffer getRequestURL(); //获取请求的URL
public String getProtocol(); //获取协议版本
public String getRemoteAddr(); //获取客户端的ip

//请求头相关方法
public String getHeader(String name); //以字符串的形式返回请求头
public java.util.Enumeration<E> getHeaderNames(); //返回所有请求头名称的枚举
public java.util.Enumeration<E> getHeaders(String name); //返回指定请求头中的所有值的枚举

//请求体相关方法
public java.io.BufferedReader getReader() throws java.io.IOException; //获取请求体的字符流
public ServletInputStream getInputStream() throws java.io.IOException; //获取请求体中的字节流

一般来说get方法会将请求参数放入到url中,而post则是将其放入到请求体中,根据上面的方法要获得请求参数,需要判断请求是get还是post,如果是get则采用 getQueryString, 如果是post则采用 getReader等方法。为了解决这个问题,Servlet提供了一些通用的方法。

public String getParameter(String name); //获取请求参数,根据传入的键名获得请求的键值
public java.util.Map<K, V> getParameterMap(); //获取所有请求参数,以map方式返回
public String[] getParameterValues(String name); //如果请求中一个键对应多个值,可以使用这个方法获取所有的值

请求中文乱码的问题

一般HTML前端都使用utf-8编码,如果后台使用系统默认的编码则会可能造成乱码。我们可以先指定编码方式为utf-8,代码如下:

request.setCharacterEncoding("UTF-8");

请求转发

为了保证程序模块的合理性,每个servlet 提供指定的功能,而有时候用户需要多个servlet来联合提供服务。这个时候需要使用请求转发。

通过 request.getRequestDispatcher 方法来转发到其他servlet。

它的特点如下:

  1. 浏览器地址栏不变
  2. 只能访问当前服务器的内部资源,也就是同一套web程序中的其他servlet
  3. 转发是一次HTTP请求

域对象

每个servlet都有一个service。不同的servlet通过不同的serivce来提供服务。由于是不同的类对象和方法,不同的servlet之间不能进行信息的传递。但是有的时候需要不同的servlet之间进行数据的共享。这个时候可以使用域对象

域对象是一个有作用范围的对象,域对象中数据随着对象的消亡而消亡。servlet中有下列几种作用域:

  1. 一次请求, resquest
  2. 一次会话, cookie, session

使用域对象的 setAttribute 来保存数据, 使用getAttribute 来获取数据。使用removeAtribute 来移除数据

response 对象

对HTTP 响应的封装,常用的方法如下:

public void setStatus(int sc);//设置响应的状态码
public void setHeader(String name, String value); //设置响应头
public java.io.PrintWriter getWriter() throws java.io.IOException; //获取输出的字符流流
public ServletOutputStream getOutputStream() throws java.io.IOException; //获取输出的字节流

重定向

重定向的原理是利用HTTP协议中的301和302 消息。在HTTP响应头中指定状态码为302,并指定Location字段,浏览器会根据响应再重新发送一次请求。servlet中,提供了专门的方法来实现重定向。

public void sendRedirect(String location) throws java.io.IOException;

重定向的特点如下:

  1. 重定向时,浏览器地址栏发生了变化
  2. 重定向可以访问互联网任意节点的资源
  3. 重定向是多次请求


Servlet 常用类

原文地址:https://www.cnblogs.com/lanuage/p/11747105.html

时间: 2024-09-29 03:29:35

Servlet 常用类的相关文章

Servlet常用类

javax.servlet.ServletConfig;javax.servlet.ServletException;javax.servlet.http.HttpServlet;javax.servlet.http.HttpServletRequest;javax.servlet.http.HttpServletResponse; javax.servlet.http.HttpSession; javax.servlet.http.Cookie; javax.servlet.ServletCo

QT开发(二十七)——QT常用类(一)

QT开发(二十七)--QT常用类(一) 一.QString 1.QString简介 QString提供了Unicode编码的字符串,使用隐式共享技术来节省内存和不必要的数据拷贝,不必考虑跨平台的兼容性. QString类成员函数中除了 ascii().latin1().utf8().local8Bit()函数,其他所有的函数都是可重入的. 2.QString成员函数 QString::QString ( const QChar * unicode, int size ) QString::QSt

常用类

常用类 1.Java.util.Locale Java.util.Locale类是区域描述类,用来描述当前区域是哪个区域的. 怎么创建一个区域? //直接用类定义的常量来得到(能得到绝大多数有名的国家的语言和国家名,但朝鲜这样的小国家就只能自己用下面的方法定义了). 1.Locale lo=Locale.CHINA 2.Locale lo=new Locale("朝鲜语","朝鲜")//自己定义个区域的语言和国家名字. 两个常用的方法: 1.获得地区国家: //用当

第七章:常用类

第七章:常用类 包装类 java中有8中基本类型,对应有八种包装类作用:包装类中封装了该类型常用的属性和方法,以方便操作.byte---->Byteshort--->Shortint--->Integerlong---->Longfloat---->Floatdouble---->Doublechar---->Characterboolean---->Boolean装箱:将基本数据类型转换成包装类,经常通过构造方法完成.Integer i = new Int

异常处理、常用类

Exception Thowable分为Error.Exception RuntimeException 非检查异常,可以不用强制捕获 捕获异常 try{ 可能出现异常的代码 } catch(Exception e1){ 捕获块 } catch(Exception e2){ 捕获块 } catch(Exception e3){ 捕获块 } ......... catch(Exception en){ 捕获块 } finally{ 不管如何都会执行,一般放入资源关闭. } throws关键字 抛出

java基础教程-常用类(四)

四.常用类 4.1字符串相关的类(String StringBuffer) 4.1.1String类   4.1.2StringBuffer类(代表可变的) 解释一下可变和不可变 String s1 = “hello”; String s2 = “world”; s1+=s2; 实际上又开辟了一块内存,将hello和world copy进去,s1指向新的内存 而StringBuffer只是在s1后面增加了一块内存,把world加上,不需要copy String与StringBuffer只有这一定

2015_1_28_IO与常用类

/*日志名格式  年_月_日_内容 如2015_1_28_IO与常用类*/ ************************************************************************************************************************************************************** 日期:2015年1月 28日 主题:IO .常用类 相关文件夹:oracle/相关课件/第12章_Java

C++ 常用类 string类

===6.3.2使用string对象=== string word="I love China" *链接字符串* string description=adjective  + " " + word; _Note_: 不能连接两个字符串字面量,下面的语句是错误的 string test= "I have" + "a dream"; ===6.3.3访问字符串中的字符=== *读取字符串* getline(cin, text);

异常处理与常用类

异常的三个种类: 检查异常:用户错误操作或者是不能被程序员预见的问题,必须由java语言来处理. 运行时异常:运行时异常是一个可以被程序员避免的异常,比如像数组越界.除数为0.引用为null. 错误:错误不是异常,是程序员或用户无法控制的问题,像调用栈溢出. 异常的控制流程: 异常是一个被方法抛出的对象,可以有三种方式来处理: 1.捕获这个异常 2.捕获异常并向下抛出  3.不捕获让它向调用栈弹出. 我们可以使用Throwable类的printStackTrace()方法打印调用栈跟踪信息. T