Servlet的相关知识:

Servlet中的service方法:
这个方法的作用是对客户端的请求做出相应的相应

一个Servlet程序的编写过程:
1、先写一个类,这个类实现Servlet,实现相应的方法

2、在service方法中编写对应的代码

3、在web.xml中编写相应的Servlet程序配置

Servlet的生命周期:

  1. 执行Servlet构造方法
  2. 执行init初始化方法

第一二步都是在第一次进行执行的时候执行的,如果重复访问Servlet网页,第一二步不会再次执行

  1. 执行service方法

第三步,每访问一次Servlet网页都会进行执行

  1. 执行destroy销毁方法

第四步,在web工程停止的时候进行调用

(上述的都是在实现Servlet类中都应该实现的类)

在一般的实际项目开发中,都是使用继承Servlet的HttpServlet类的方法取实现Servlet程序的

步骤:

  1. 编写一个类去继承HttpServlet类
  2. 根据业务需要重写doGet和doPost方法
  3. 到web.xml文件中配置Servlet程序的访问地址

ServletConfig是Servlet程序的配置信息类

ServletCofig和Servlet程序都是Tomcat服务器负责创建,我们负责使用。

Servlet程序默认是在第一次访问的时候进行创建,ServletConfig是在每个Servlet程序创建的时候,就创建一个相应的ServletConfig对象(每一个ServletConifg对象那个对应一个Servlet程序,他只能获取到他自己对应的Servlet对象在web.xml文件中的标签的值)

我们在重写init()方法的时候,一定要加上一句super.init(ServletConfig对象),不然就会出现空指针异常,为什么呢?

原因是我们重写的init方法中的参数中的ServletConfig这个参数是一个在GenericServlet抽象类中的参数,在GenericServlet抽象类中也具有init方法,在这个init方法中,他将传入的ServletConfig参数进行保存起来了,如果我们再重写init方法的时候没有加上super.init(ServletConfig对象)这段代码的话,我们就不能将ServletConfig进行保存起来,就会出现异常

ServletContext类他是一个接口。

ServletContext对象:(Servlet上下文对象)
ServletContext对象在每一个web工程只存在一个,不管使用多少次getServletContext()方法,返回的都是同一个ServletContext对象

ServletContext对象是一个域对象,在工程进行部署的时候进行创建,在web工程停止的时候销毁,一个工程在部署的时候都只能创建一个ServletContext对象

什么是域对象?

域对象,是可以和map集合一样的可以存取数据的对象,叫做域对象

这里的域指的是存储数据的操作范围

添加数据: 获取数据: 删除数据

域对象:setAttribute() getAttribute()removeAttribute()

Map:put() get() remove()

ServletContext类的四个作用:
1、获取在web.xml文件中的context-param标签中的上下文参数

2、获取当前工程的路径:格式:/工程路径

3、获取当前工程部署后在服务器硬盘上的绝对路径

4、像map集合一样存取数据

第一种工程部署的方式:

直接将文件拷贝到Tomcat中的webapps中(webapps中的每一个文件夹都是一个工程,也就是网页)

部署好之后,如果想要进行访问,需要将html文件的路径从webapps中这个工程为起始文件进行添加路径进行访问

工程部署的第二种方法

在conf这个配置文件夹中的Catalina\localhost中添加一个xml文件,我举例为kkk.xml文件,在xml文件中进行编写以下代码:

<Context path=”/kkk” docBase=”E:\IdeaProjects\JavaWeb\out\artifacts\web03_war_exploded” />

代码解释:

Context表示是一个工程上下文

path表示工程的访问路径为/kkk(这个kkk是和xml文件名相同的)

docBade表示的是你的工程目录在哪里(也就是第一种方法中的在webapps中添加的文件夹的位置)

使用这种方式,就不需要再将工程目录存放在webapps目录下了,可以存放在任意位置,前提是docBase后面的值等于工程目录的位置

在进行访问的时候,会从配置文件中加载进行工程的位置,在进行访问

客户端向服务器发送数据叫做请求,服务器向客户端发送数据叫做相应

请求又分为两种:(get请求和post请求)

  1. get请求
  2. 请求行
  3. 请求的方式 get
  4. 请求的资源路径[ +?+请求参数](这里的请求参数就是标签中的name属性)
  5. 请求的协议版本号 Http/1.1
  6. 请求头

1)key:value 组成 不同的键值对表示不同的涵义

请求头中常见的key:

Accept:告诉服务器,客户端可以接受的数据类型

Accept-Language:告诉服务器,客户端接受的语言类型

Zh_CN 中文

En_US 英文

User-Agent:里面就是浏览器的信息(Agent表示代理, 代替用户替我们发送信息的东是是服务器)

Accept-Encoding:告诉服务器客户端可以接受的数据编码(压缩)格式

Host:表示请求的服务器ip和端口号

Connection:告诉服务器请求的连接如何

Keep-Alive 告诉服务器回传数据不要马上关闭,保持一段时间的连接

Closed 马上关闭

Poet请求:

  1. 请求行

1)请求方法 post

2)请求的资源路径[+?+参数]

3)请求的协议的版本号 Http/1.1

  1. 请求头

1)key:value 不同的键值对有不同的含义

空行(这里有一个空行将数据进行分开)

Post请求常见的key:

1、 Accept:客户端支持什么数据类型的数据

2、Accept-Language:客户端接受的语言类型

3、Referer:表示发送请求时,浏览器地址栏中当前的地址(从哪儿来)

4、User-Agent:表示浏览器的信息

5、Content-Type:表示发送的数据类型

Application/x-www-form-url lencoded

表示提交的数据格式是:

Key=value&key=value,然后在对其进行url编码,url编码是把非英文的内容转为%xx&xx的形式

Multipart/form-data

表是以多短的形式提交数据给服务器(以流的方式进行提交,用于上传)

    1. content-length:表示发送的数据的长度
    2. cache-control:表示如何控制缓存 no-cache表示不缓存
  1. 请求体—>>>给服务器的请求

常见的get请求:

  1. form标签 method=get
  2. a标签
  3. link标签引入css文件
  4. script标签引入js文件
  5. img标签引入图片
  6. iframe引入html页面
  7. 在浏览器地址栏中输入地址后敲回车

常见的post请求:

  1. form标签 method=post

响应的Http协议格式:
1、响应行

1)响应的协议和版本号

2)响应状态码

3)响应状态描述符

2、响应头

1)key:value 不同的响应头有不同的含义

空行

3、响应体 🡪就是回传给客户端的数据

常见的响应码:
200:表示请求成功

302:表示url重定向,请求重定向

404:表示请求服务器已经收到了,但是你要访问的数据不存在(请求地址错误)

500:表示请求服务器已经收到了,但是服务器内部错误(代码错误)

MIME:

MIME是Http协议中的数据结构

MIME的类型格式是:大格式/小格式

例如:

普通文本 text/plain

超文本标记语言文本 text/html

GIF图片 image/gif

HttpServletRequest类的作用是什么:

每次只要是客户端发送请求到Timcat服务器,Tomcat服务器就会将这个请求进行包装成一个request对象,然后传入service方法(doGet或者是doPost)中给我们使用,我们可以通过HttpServletRequest类查看到请求的全部信息。

HttpServletRequest类中的常用方法:
1、getRequestURI() 获取请求的资源路径

  1. getRequestURL() 获取请求的同意资源路径(资源的绝对路径)
  2. getRemoteHost() 获取客户端的ip地址
  3. getHeader() 获取请求头
  4. getParameter()获取参数
  5. getParameterValues()获取参数具有多个值的时候使用(例如多选框的值等)
  6. getMethod()获取请求的类型(get或者是post)
  7. setAttribute()在域对象中添加数据
  8. getAttribute()在域对象中哦获取数据
  9. getRequsetDispatcher()获取请求转发对象

什么是请求转发:
请求转发是指服务器收到请求后,从一方资源跳转到另一方资源的操作叫做请求的转发

Web中的相对路径和绝对路径:

相对路径:

. 表示当前路径

.. 表示上一级目录

资源名 表示当前目录/资源名

绝对路径:

Http://ip:port/工程路径/资源路径

例如:<a href=”/”>斜杠</a>

Web中斜杠 / 的不同含义:

/ 斜杠在浏览器中被解析为:http://ip:port/

/ 斜杠在服务器中被解析为:http://ip:port/工程路径

例如:

1、<url-pattern>/servlet<url-pattern>

2、servletContext.getRealpath(“/”)

3、request.getRequestDispatcher(“/”)

特殊情况:

Response.sendRediect(“/”) 把斜杠发送到浏览器进行解析,解析到的结果应该是斜杠在浏览器中解析到的结果

HttpServletResponse类的作用:

HttpServletResponse和httpServletResquest一样,每次请求出来,Tomcat创建一个Response对象传递给servlet程序进行使用,HttpServletRequest表示请求的信息,HttpServletResponse表示响应的信息

我们如果需要设置返回给客户端的信息,都可以通过httpServletResponse对象进行设置

对于两个流的说明:

字节流:getOutputStream() 常用于下载和上传(传递二进制文件,值得注意的是,所有的文件都可以看作二进制文件)

字符流:getWriter(); 常用于回传字符串(常用)

两个流同时只能使用一个。(使用了字节流就不能在使用字符流,反之也是,否则就会报错)

请求重定向:
返回响应码为302

当客户端访问的页面已经进行替换之后,当客户端发送出相应的请求的时候,服务器返回响应的响应码和location地址,location地址就是新的网页的地址,浏览器接受到服务器返回的响应码和location之后,知道当前的页面已经不能访问了,就向location中的地址进行访问,也就是说,浏览器会发出两次请求,服务器也会发出两次响应。

请求重定向的特点:
1、浏览器的地址栏中会发生变化

2、有两次请求

3、因为是两次请求,所以,这两次请求是不同的域对象,因此,在第一次请求中保存的数据,在第二次请求中不能进行获取

4、不能进入web-inf中获取数据(在这里提一下,哪里可以获取web-inf中的数据呢?只有在服务器中才能获取到web-inf中的数据,请求转发就可以获取到web-inf中的数据,因为他是从一个资源路径跳转到另一个资源路径,在进入第一个资源路径的时候就已经是在服务器中了,因此在第二次的资源路径可以是web-inf中的资源,但是请求重定向就不一样,他是两次请求,第一次请求发送到服务器之后,服务器返回了响应码和location,浏览器进行解析后,再将地址栏中的地址修改为location中的地址,因此不能访问到web-inf中的资源)

5、可以访问工程以外的资源(请求转发不能访问工程以外的资源,请求重定向可以访问工程以外的资源)

请求重定向的第一种方法:
//设置响应状态码302

Response.setStatus(302);

//设置location地址(新的地址在哪儿)

Response.setHeader(“location”,”http://ip:port/工程路径/资源路径”);

请求重定向的第二种方式:(推荐使用)
response.sendRedrict(“http://ip:port/工程路径/资源路径”)

原文地址:http://www.cnblogs.com/just1t/p/16925948.html

1. 本站所有资源来源于用户上传和网络,如有侵权请邮件联系站长! 2. 分享目的仅供大家学习和交流,请务用于商业用途! 3. 如果你也有好源码或者教程,可以到用户中心发布,分享有积分奖励和额外收入! 4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解! 5. 如有链接无法下载、失效或广告,请联系管理员处理! 6. 本站资源售价只是赞助,收取费用仅维持本站的日常运营所需! 7. 如遇到加密压缩包,默认解压密码为"gltf",如遇到无法解压的请联系管理员! 8. 因为资源和程序源码均为可复制品,所以不支持任何理由的退款兑现,请斟酌后支付下载 声明:如果标题没有注明"已测试"或者"测试可用"等字样的资源源码均未经过站长测试.特别注意没有标注的源码不保证任何可用性