概述
Servle基础教程
-
-
- 1. HTTP协议
-
- 1.1 HTTP协议的特点
- 1.2 HTTP之URL
- 1.3 HTTP请求报文
- 1.4 HTTP响应报文
- 2. Tomcat服务器
- 3. Servlet的实现
-
- 3.1 创建Web项目
-
- 3.1.1 web项目结构
- 3.1.2 创建包与类
- 3.2 实现Servlet规范
- 3.3 重写service方法
- 3.4 设置注解(标签)
- 3.5 修改对外访问路径
- 3.6 其他三种实现Servlet的方法
- 4. Servlet生命周期
- 5. Servlet与Tomcat的工作原理
- 6. HttpServletRequest对象
-
- 6.1 接收请求
-
- 6.1.1 常用的方法
- 6.1.2 获取请求参数
- 6.2 请求乱码问题
- 6.3 请求转发
- 6.4 request作用域
- 7. HttpServletReponse对象
-
- 7.1.响应数据
- 7.2 响应乱码问题
-
- 7.2.1 getWriter()的字符乱码
- 7.2.2 getOutputStream()的字节乱码
- 7.3 重定向
- 7.4 请求转发与重定向的区别
- 8. Cookie对象
-
- 8.1 Cookie的创建和发送
- 8.2 Cookie的获取
- 8.3 Cookie设置到期时间
- 8.4 Cookie的注意点
- 8.5 Cookie的路径
- 9. HttpSession对象
-
- 9.1 标识符JSESSIONID
- 9.2 Session域对象
- 9.3 Session对象的销毁
-
- 9.3.1 默认时间到期
- 9.3.2 自己设定到期时间
- 9.3.3 直接立即销毁Session对象
- 9.3.4 关闭浏览器
- 9.3.5 关闭服务器
- 10. ServletContext对象
-
- 10.1 ServletContext对象的获取
- 10.2 ServletContext域对象
- 11. 文件的上传和下载
-
- 11.1 文件上传
-
- 11.1.1 前台页面
- 11.1.2 后台实现
- 11.2 文件下载
-
- 11.2.1 超链接下载
- 11.2.2 后台实现下载
-
1. HTTP协议
HTTP(hypertext transport protocol)协议【超文本传输协议】,协议规定了浏览器和万维网服务器之间互相通信的规则。
1.1 HTTP协议的特点
-
支持客户/服务器模式。
-
简单快速: 客户向服务器请求服务时,只需传送请求方法和路径。请求方法常用的有GET、POST。每种方法规定了客户与服务器联系的类型不同。由于 HTTP协议简单,使得HTTP服务器的程序规模小,因而通信速度很快。
-
灵活: HTTP允许传输任意类型的数据对象。传输的类型由 Content-Type(消息头) 加以标记。
-
无连接: 无连接是表示每次连接只处理一个请求。服务器处理完客户的请求,并收到客户的应答后,即断开连接。采用这种方式可以节省传输时间。
HTTP1.1版本后支持可持续连接。通过这种连接,就有可能在建立一个TCP连接后,发送请求并得到回应,然后发送更多的请求并得到更多的回应。通过把建立和释放TCP连接的开销分摊到多个请求上,则对于每个请求而言,由于TCP而造成的相对开销被大大地降低了。而且,还可以发送流水线请求,也就是说在发送请求1之后的回应到来之前就可以发送请求2。也可以认为,一次连接发送多个请求,由客户机确认是否关闭连接,而服务器会认为这些请求分别来自不同的客户端。 -
无状态: HTTP协议是无状态协议。无状态是指协议对于事务处理没有记忆能力。缺少状态意味着如果后续处理需要前面的信息,则它必须重传,这样可能导致每次连接传送的数据量增大。另一方面,在服务器不需要先前信息时它的应答就较快。
1.2 HTTP之URL
HTTP URL是一种特殊类型的URL,包含了用于查找某个资源的足够的信息,URL的格式如下:
http://host[:port]/[abc_path]
http://IP(主机名/域名):端口/访问的资源路径
http
表示要通过HTTP协议来定位网络资源;host
表示合法的Internet主机域名或者IP地址;port
指定一个端口号,为空则使用缺省端口80;abs_path
指定请求资源的URL;如果URL中没有给出 abs_path,那么当它作为请求URL时,必须以"/"的形式给出,通常这个工作浏览器自动帮我们完成。
1.3 HTTP请求报文
HTTP 请求报文由三部分组成,分别是:请求行、请求头、空行、请求正文(请求体)。其中,Get 请求没有请求体,Post 请求才有请求体。
请求行:
由请求方式 (Get/Post) 、请求地址(url路径)、HTTP请求协议版本组成请求头:
一系列键值对空行
请求体:
FromData中的参数内容,当浏览器的地址栏装不下过长的传递参数时,将部分内容放置于FormData中,当作请求体传输。当传递参数较少时,会直接跟在请求行后面,不用请求体。Get 请求的请求体是空的,只有 Post 请求具有请求体。
请求行格式:Method Request-URI HTTP-Version CRLF
Method
表示请求方法(GET/POST)Requst-URI
是一个统一资源标识符HTTP-Version
表示请求的HTTP协议版本CRLF
表示回车和换行。
1.4 HTTP响应报文
在接收和解释请求消息后,服务器返回一个HTTP响应报文,HTTP响应也是由三个部分组成,分别是:状态行、消息报头、空行、响应正文。
状态行:
协议版本 + 状态码 + 状态码的说明消息报头:
一系列键值对,对相应正文做一些描述空行
响应正文:
Reponse中的内容,即浏览器中所看到的网页,即 HTML 文件等。
2. Tomcat服务器
Tomcat目录结构如下:
- bin:启动和关闭tomcat的bat文件
- conf:配置文件server.xml该文件用于配置server相关的信息,比如tomcat启动的端口号,配置主机
(Host) ; web.xml文件配置与web应用(web应用相当于一个web站点) ; tomcat-user.xml配置用户名密码和相关权限 - lib:该目录放置运行tomcat运行需要的jar包
- logs:存放日志,当我们需要查看日志的时候,可以查询信息
- webapps:放置我们的web应用
- work工作目录:该目录用于存放jsp被访问后生成对应的server文件和.class文件
3. Servlet的实现
Servlet是Server与Applet 的缩写,是服务端小程序的意思。使用Java语言编写的服务器端程序,可以像生成动态的WEB页,Servlet主要运行在服务器端,并由服务器调用执行,是一种按照Servlet标准来开发的类。是SUN公司提供的一门用于开发动态Web资源的技术。(言外之意:要实现web开发,需要实现Servlet标准)
Servlet 本质上也是Java类,但要遵循Servlet规范进行编写,没有main(方法,它的创建、使用、销毁都由Servlet容器进行管理(如Tomcat)。(言外之意:写自己的类,不用写main方法,别人自动调用)
Servlet是和HTTP协议是紧密联系的,其可以处理HTTP协议相关的所有内容。这也是Servlet应用广泛的原因之一。
提供了Servlet功能的服务器,叫做、Servlet容器,其常见容器有很多,如Tomcat, Jetty, WebLogic Server, WebSphere, JBoss 等等。
3.1 创建Web项目
3.1.1 web项目结构
- src目录存放java代码。
- web目录存放HTML、CSS、JavaScript等页面样式代码。
3.1.2 创建包与类
在src文件夹下,先建包,再建类。
3.2 实现Servlet规范
实现Servlet规范,即继承HttpServlet类,并到如响应的包。那么该类则已经完成了通信的规则,我们只需要进行业务的实现即可。
package com.liangshao.servlet;
import javax.servlet.http.HttpServlet;
public class Servlet01 extends HttpServlet {
}
3.3 重写service方法
满足Servlet规范只是让我们的类能够满足接收请求的要求,接收到请求后需要对请求进行分析,以及进行业务逻辑处理,计算出结果,则需要添加代码,在规范中有一个叫做service的方法,专门用来做请求处理的操作,业务代码则可以写在该方法中。
package com.liangshao.servlet;
/**
* 实现Servlet————方法一
* 1. 创建普通java类
* 2. 实现Servlet的规范,继承HttpServlet类
* 3. 实现/重写service方法,用来处理请求--->重写快捷键:Ctrl+O
* 4. 设置注解,指定访问的路径
*/
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
// @WebServlet("/ser01") // 为当前资源添加路径
// @WebServlet(name = "Servlet01", value = "/ser01")
// @WebServlet(name = "Servlet01", urlPatterns = "/ser01")
// @WebServlet(name = "Servlet01", value = {"/ser01", "/ser001"})
@WebServlet(name = "Servlet01", urlPatterns = {
"/ser01", "/ser001"})
public class Servlet01 extends HttpServlet {
@Override
protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
System.out.println("Hello Servlet!");
resp.getWriter().write("Hello World!");
}
}
3.4 设置注解(标签)
面对不同的客户端,服务器要做出不同的响应,为了让服务器进行区分,需要设置注解来向服务器说明。因此,在完成好了一切代码的编写后,还需要向服务器说明,特定请求对应特定资源。
开发servlet项目,使用 @WebServlet
注解将一个继承于 javax.servlet.http.HttpServlet
的类定义为Servlet组件。在Servlet3.0中,可以使用@WebServlet
注解将一个继承于javax.servlet.http.HttpServlet的类标注为可以处理用户请求的Servlet。
注解的value值表示的是指明某个类的对外访问路径,并且value可有多个值,表示使用不同的访问路径均可访问到同一个类。注意!!!路径的斜杠不能省略。
3.5 修改对外访问路径
点击运行按钮旁边的选项框---->点击Edit Configuration…---->Deployment---->Application context中即为项目访问路径,在其中修改即可。
3.6 其他三种实现Servlet的方法
方法二:
/**
* 实现Servlet————方法二
* 1. 创建普通java类
* 2. 实现Servlet的规范,继承GenericServlet类
* 3. 实现/重写service方法,用来处理请求--->重写快捷键:Ctrl+O
* 4. 设置注解,指定访问的路径
*/
import javax.servlet.GenericServlet;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.annotation.WebServlet;
import java.io.IOException;
@WebServlet("/ser02")
public class Servlet02 extends GenericServlet {
@Override
public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException {
System.out.println("继承GenericServlet类方法……");
servletResponse.getWriter().write("继承GenericServlet方法……");
}
}
方法三:
import javax.servlet.*;
import javax.servlet.annotation.WebServlet;
import java.io.IOException;
/**
* 实现Servlet————方法三
* 1. 创建普通java类
* 2. 实现Servlet的规范,实现Servlet接口
* 3. 实现接口下的方法,并重写service方法,用来处理请求
* 4. 设置注解,指定访问的路径
*/
@WebServlet("/ser03")
public class Servlet03 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 {
System.out.println("实现Servlet接口的方法……");
servletResponse.getWriter().write("实现Servlet接口的方法……");
}
@Override
public String getServletInfo
最后
以上就是从容小懒猪为你收集整理的Servlet基础教程的全部内容,希望文章能够帮你解决Servlet基础教程所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复