1.Servlet API

2.第一个Servlet

2.1 创建一个类实现Servlet接口,重写方法.或继承HttpServlet即可

public class LoginServlet implements Servlet { @Override public void init(ServletConfig servletConfig) throws ServletException {//初始化⽅法 } @Override public ServletConfig getServletConfig() {.return null; }@Override public void service(ServletRequest servletRequest, ServletResponse servletResponse)     throws ServletException, IOException {//处理get/post请求的⽅法 } @Override public String getServletInfo() {return null; } @Override public void destroy() {//销毁的⽅法 }}

2.2 在web.xml文档中配置映射关系

XML中配置好这个Servlet的映射关系:<servlet><servlet-name>自定义名称</servlet-name><servlet-class>处理请求的类的完整路径</servlet-class></servlet><servlet-mapping><!--mapping表示映射 --><servlet-name>自定义名称</servlet-name><url-pattern>请求名</url-pattern></servlet-mapping>

标签的执⾏顺序:

请求过来以后->web.xml->

servlet-mapping标签中的url-pattern标签中的内容和请求名进⾏匹配->

匹配成功后找对应的servlet-mapping标签中的servlet-name->

去servlet标签中找和上⼀个servlet-name相同的name值->

去找servlet标签中 的servlet-class中处理类的完整路径

(3) 启动tomcat,在浏览器输⼊http://localhost:8080/⼯程名/访问服务器的路径

3.Servlet工作原理

3.1  Servlet接⼝定义了Servlet与servlet容器之间的契约。这个契约是:Servlet容器将Servlet类载⼊内 存,并产⽣Servlet实例和调⽤它具体的⽅法。但是要注意的是,在⼀个应⽤程序中,每种Servlet类型只 能有⼀个实例。

3.2  ⽤户请求致使Servlet容器调⽤Servlet的Service()⽅法,并传⼊⼀个ServletRequest对象和⼀个 ServletResponse对象。ServletRequest对象和ServletResponse对象都是由Servlet容器(例如 TomCat)封装好的,并不需要程序员去实现,程序员可以直接使⽤这两个对象。

3.3  ServletRequest中封装了当前的Http请求,因此,开发⼈员不必解析和操作原始的Http数据。 ServletResponse表示当前⽤户的Http响应,程序员只需直接操作ServletResponse对象就能把响应轻松 的发回给⽤户。

3.4  对于每⼀个应⽤程序,Servlet容器还会创建⼀个ServletContext对象。这个对象中封装了上下⽂ (应⽤程序)的环境详情。每个应⽤程序只有⼀个ServletContext。每个Servlet对象也都有⼀个封装 Servlet配置的ServletConfig对象。

4.Servlet的生命周期

当客户端⾸次发送第⼀次请求后,由容器(web服务器(tomcat))去解析请求, 根据请求找到对应的servlet, 判断该类的对象是否存在,不存在则创建servlet实例,调取init()⽅法 进⾏初始化操作,初始化完成后调取 service()⽅法,由service()判断客户端的请求⽅式,如果是get,则执⾏doGet(),如果是post则执⾏ doPost().处理⽅法完成后,作出相应结果给客户端.单次请求处理完毕。

当⽤户发送第⼆次以后的请求时,会判断对象是否存在,但是不再执⾏init(),⽽直接执⾏service⽅法,调取 doGet()/doPost()⽅法。 当服务器关闭时调取destroy()⽅法进⾏销毁。

四个过程:

(1)实例化 --先创建servlet实例

(2)初始化 --init()

(3)处理请求 ---service()

(4)服务终⽌ --destory()

5.请求

5.1 常用方法

1)String getParameter(String name) 根据表单组件名称获取提交数据,返回值是String 注: 服务器在接收数据时使⽤字符串统⼀接收

2)String[ ] getParameterValues(String name) 获取表单组件对应多个值时的请求数据

3)void setCharacterEncoding(String charset) 指定每个请求的编码(针对post请求才起作⽤)

4)RequestDispatcher getRequestDispatcher(String path) --跳转⻚⾯ 返回⼀个       RequestDispatcher对象,该对象的forward( )⽅法⽤于转发请求

示例:

request.getRequestDispatcher("../success.jsp").forward(request,response);

5)存值 request.setAttribute("key",value)

6)取值 request.getAttribute("key");//取值后需要向下转型 示例: String a1=                                        (String)request.getAttribute("uname");

eg1.客户端如何发送数据给服务器

⽅式1:通过表单 get/post提交

⽅式2:通过a标签发送数据(get提交)

<a href="请求名?key=value&key=value&key=value...">示例:<a href="/login?a=10&name=abc&pass=123">

这里的key值=表单元素的控件名,value值=表单中控件的value属性值

eg.第一个参数使用?拼接,之后的参数使用&拼接,获取数据还是通过String name=request.getParameter("name");

方式3:通过地址栏直接拼接-get请求

方式4:js提交数据-get请求

location.href="目标请求?key=value&key=value"

eg:方式2/3都属于get提交方式,表单提交可以使用get、post提交方式

eg2.处理请求乱码的问题

⽅式1:setCharacterEncoding("UTF-8");//post提交时管⽤

⽅式2: String s=new String(变量名.getBytes("ISO-8859-1"),"UTF-8");//针对于get提交时中⽂乱码

示例: String s=new String(request.getParameter("key").getBytes("ISO-8859-1"),"GBK");

⽅式3:修改tomcat中配置⽂件://使⽤于get提交

在Tomcat⽬录结构\conf\server.xml中设置字符集

<Connector port="8080" protocol="HTTP/1.1"connectionTimeout="20000"redirectPort="8443" URIEncoding="UTF-8" />

注意:tomcat8.0以后不需要⼿动设置这个属性了

eg3.get和post的区别

I、GET请求,请求的数据会附加在URL之后,以?分割URL和传输数据,多个参数⽤&连接。URL的编码

格式采⽤的是ASCII编码,⽽不是unicode,即是说所有的⾮ASCII字符都要编码之后再传输。

POST请求:POST请求会把请求的数据放置在HTTP请求包的包体中。上⾯的item=bandsaw就是实际的传输数据。

因此,GET请求的数据会暴露在地址栏中,⽽POST请求则不会。

II、传输数据的⼤⼩

在HTTP规范中,没有对URL的⻓度和传输的数据⼤⼩进⾏限制。但是在实际开发过程中,对于GET,特

定的浏览器和服务器对URL的⻓度有限制。因此,在使⽤GET请求时,传输数据会受到URL⻓度的限制。

对于POST,由于不是URL传值,理论上是不会受限制的,但是实际上各个服务器会规定对POST提交数

据⼤⼩进⾏限制,Apache、IIS都有各⾃的配置。

III、安全性

POST的安全性⽐GET的⾼。这⾥的安全是指真正的安全,⽽不同于上⾯GET提到的安全⽅法中的安全,

上⾯提到的安全仅仅是不修改服务器的数据。⽐如,在进⾏登录操作,通过GET请求,⽤户名和密码都

会暴露再URL上,因为登录⻚⾯有可能被浏览器缓存以及其他⼈查看浏览器的历史记录的原因,此时的

⽤户名和密码就很容易被他⼈拿到了。除此之外,GET请求提交的数据还可能会造成Cross-site request

frogery攻击

6.响应

在Service API中,定义了⼀个HttpServletResponse接⼝,它继承⾃ServletResponse接⼝,专⻔⽤来封装HTTP响应消息。 在HttpServletResponse接⼝中定义了向客户端发送响应状态码,响应消息头,响应消息体的⽅法。

常⽤⽅法:

void addCookie(Cookie var1);//给这个响应添加⼀个cookie

void sendRedirect(String var1) ;//发送⼀条响应码,将浏览器跳转到指定的位置

PrintWriter getWriter() 获得字符流,通过字符流的write(String s)⽅法可以将字符串设置到response

缓冲区中,随后Tomcat会将response缓冲区中的内容组装成Http响应返回给浏览器端。

setContentType() 设置响应内容的类型

重定向和转发的对⽐

重定向:response.sendRedirect()

转发:request.getRequestDispatcher("../success.jsp").forward(request,response);

相同点:都⽤来跳转⻚⾯

不同点:

a.重定向时地址栏会改变,request中存储的数据会丢失.转发时地址栏显示的是请求⻚⾯的地

址,request数据可以保存。

b.转发属于⼀次请求⼀次响应,重定向属于两次请求(地址栏修改了两次)两次响应。

补充:使⽤out对象往⻚⾯中输出js或html,css

eg:使⽤out对象往⻚⾯中输出js或html,css.

out.print("<script type='text/javascript'>alert('登录失败');location='../login.jsp'</script>");

eg. 注:使⽤js跳转⻚⾯,也会丢失request中的数据

7.会话

request存的值只能在单次请求中保存,保存的数据不能跨⻚⾯,当重定向时,request存的值会丢失

session的数据可以在多个⻚⾯中共享,即使重定向⻚⾯,数据不会丢失

session中可以包含n个request。

会话的概念:从打开浏览器到关闭浏览器,期间访问服务器就称为⼀次会话

常⽤⽅法:

void setAttribute(String key,Object value) 以key/value的形式保存对象值,将数据存储在服务器端

Object getAttribute(String key) 通过key获取对象值

void invalidate() 设置session对象失效

String getId() 获取sessionid,当第⼀次登录成功后,session会产⽣⼀个

唯⼀的id,浏览器之后访问时如果发现id值还是之前id,那么说明 当前访问的属于同⼀个会话

void setMaxInactiveInterval(int interval) 设定session的⾮活动时间

示例:

⽅式1: session.setMaxInactiveInterval(10*60);//设置有效时间为10分钟

⽅式2:修改web.xml

<session-config><session-timeout>10</session-timeout>//单位:分钟</session-config>

int getMaxInactiveInterval() 获取session的有效⾮活动时间(以秒为单位),默认的有效时间:30

分钟

void removeAttribute(String key)

从session中删除指定名称(key)所对应的对象

⼩结 :让session失效的⽅式

(1)invalidate() (2)removeAttribute("key") (3)直接关闭浏览器。

示例:使⽤session验证⽤户是否登录

补充:

⾃动刷新到某⻚⾯:

注:在head标签中添加该标签,单位:秒

8. 获得初始化参数

8.1 request.setCharacterEncoding("utf-8");代码的耦合度太⾼,不便于后期维护修改。可以通过初始化参数实现

实现⽅式:

(1)web.xml中先定义初始化参数

<servlet><servlet-name></servlet-name><servlet-class></servlet-class><init-param><param-name>encoding</param-name><param-value>utf-8</param-value></init-param></servlet>

(2) servlet中获得初始化参数,重写init()⽅法

public void init(ServletConfig config) throws ServletException {encoding= config.getInitParameter("encoding");}

注意:这种⽅式的初始化参数仅限于当前servlet中使⽤。

8.2 全局初始化参数

(1)定义,context-param是和servlet标签同级别

<context-param><param-name>bianma</param-name><param-value>utf-8</param-value></context-param>

(2)获得数据

@Override // 请求->init()->service()->doget/dopost->destory();public void init(ServletConfig config) throws ServletException {bianhao=config.getServletContext().getInitPar ameter("bianma");}

request常用方法相关推荐

  1. Response和Request常用方法以及mmgrid插件的学习

    Response和Request Response和Request容器是一一对应的,他是web容器在用户每次请求服务端的时候,创建的一对容器对象,Response容器是服务端返还给客户机的一个响应内容 ...

  2. java request 方法_Request常用方法

    一.HttpServletRequest介绍 HttpServletRequest对象代表客户端的请求,当客户端通过HTTP协议访问服务器时,HTTP请求头中的所有信息都封装在这个对象中,通过这个对象 ...

  3. 利用python爬虫(part1)--urllib.request模块

    学习笔记 文章目录 网络爬虫概述 定义 爬虫分类 爬取数据步骤 爬虫请求模块 常用方法 urllib.request.urlopen()方法 响应对象(response)方法 关于请求头 urllib ...

  4. 初识 Asp.Net内置对象之Request对象

    Request对象 Request对象用于检索从浏览器向服务器所发送的请求信息.它提供对当前页请求的访问,包括标题,Cookie,客户端证书等等.它也与HTTP协议的请求消息对应. Request对象 ...

  5. JavaWeb——response与request

    一.引言 了解了servlet基本原理,其中内置对象response与request了解是必须的,终点学习下== 主要包括get和post方法中的使用 先直观的看一下response和request: ...

  6. 爬虫----request简介(以及urllib模块和request模块保存图片区别)

    request模块简介 request模块 一.安装 二.request常用方法 三.响应对象response的方法 保存图片案例 request模块 保存图片 request模块 第一种保存图片的方 ...

  7. 通过request对象获取客户端请求信息

    一.HttpServletRequest介绍 HttpServletRequest对象代表客户端的请求,当客户端通过HTTP协议访问服务器时,HTTP请求头中的所有信息都封装在这个对象中,通过这个对象 ...

  8. HttpServletRequest应用(转)

    深入体验JavaWeb开发内幕--关于HttpServletRequestRequest对象 HttpServletRequest对象代表客户端的请求,当客户端通过HTTP协议访问服务器时,HTTP请 ...

  9. 05、HttpServletRequest

    一.HttpServletRequest 1.1.Request常用方法 1.获取客户机 getRequestURL方法返回客户端发出请求时的完整URL. getRequestURI方法返回请求行中的 ...

最新文章

  1. js 多维数组长度_C++申请与释放动态数组1(学习笔记:第6章 16)
  2. html三列布局中间固定,常见的三列布局(左右固定宽度,中间自适应)
  3. 最牛B隐藏文件(续)
  4. linux使用shell函数扩充命令,Linux Shell系列教程之(十五) Shell函数简介 | Linux大学...
  5. python路径文件api
  6. 1、CSS 框模型概述(盒模型)
  7. 1353. 滑雪场设计【难度: 一般 / 知识点: 枚举 贪心】
  8. anaconda与pip 清华镜像源
  9. mac 用户 文件夹 权限_这可能是 Mac 共享文件最详细的教程了
  10. 2014\Province_C_C++_B\2 切面条
  11. qt 设置按钮大小_Qt官方示例双向按钮
  12. git ssh创建分支_将git项目导入GitHub的方法(附创建分支)
  13. 推断单向链表中是否有环和查找环的入口
  14. 滴滴缺席的这 11 个月,顺风车迷局如何破?
  15. 有什么可以测试耳机性能的软件吗,什么是耳机音质测试软件?
  16. MySQL数据增加语句
  17. 技嘉 B85-HD3 4590 OC 引导文件 基本完美
  18. 解决鼠标单击变双击问题
  19. Unity3D纯白(Pure White)烘焙【2020】
  20. 微信小程序在线成语接龙答题有奖1.5.1版源码

热门文章

  1. C语言学习笔记-有符号数和无符号数相加的问题
  2. linux 进程 内存 耗光,Linux内存耗尽原因分析
  3. android 系统光标,如何定位android系统中光标的位置
  4. 腾讯文档如何设置保护单元格与工作表?
  5. 玩客云快速入门刷机相关教程
  6. 无迹卡尔曼滤波UKF—目标跟踪中的应用(算法部分)
  7. 比 Redis 还快,更省内存,开源,惊爆了!
  8. Excel表格转换为布尔表
  9. SSD系列算法原理讲解----(1)SSD系列算法介绍(主干网络、多尺度Feature Map预测)(笔记)
  10. Jenkins配置自动打包app发布蒲公英显示二维码