java之servlet学习基础(一)
2021-06-16 16:03
标签:跳转 tom 初始化 返回 type mime类型 oca 源码 ati 这一阵子在学java三大框架。却在学习过程中发现前面的知识已经忘记了。所以决定写一篇博客来总结回顾之前的学习。 1.Servlet是什么? servlet是一个运行在服务器端的小应用程序。通过HTTP协议接受和相应来自Web客户端的请求。 提到web客户端的请求和对web客户端的响应,必须了解HTTP协议。 2.HTTP协议 HTTP协议用于定义web浏览器(客户端)和web服务器(服务器端)之间交换数据的过程以及交换的数据的格式。 (1)请求部分 请求部分包括请求消息行、请求消息头以及消息正文。 请求消息行: 请求方式 URI 协议/版本 [GET|POST] uri http/1.1 请求消息头 Accept-[Charset|Encoding|Language]:告诉服务器浏览器可接受的MIME类型(即客户端能接受什么类型的文件)。 Accept-Charset:客户端浏览器支持哪种字符集 Accept-Encoding:客户端浏览器能进进行解码的数据编码方式。eg.gzip Accept-Language:客户端浏览器希望接受的语言种类。 Host:初始URL中的主机和端口号 Referer:包含一个url,用户从该url代表的页面出发访问当前请求的页面。 Content-Type:内容类型。告诉服务器,客户端浏览器传输数据的MIME类型(文件传输类型).eg.application/x-www-form-urlencoded; User-Agent:浏览器类型;IE,Chrome Content-Length:请求消息正文的长度 Connection:表示是否需要持久连接。默认为Keep-Alive(持久连接)。 Cookie:设置服务器使用Set-Cookie发送的http cookie。 Date:请求时间 消息正文: 当请求方式是POST时,才能看到消息正文 (2)响应部分 响应部分包括响应消息行、响应消息头和响应正文 响应消息行: 协议/版本 响应状态码 对响应状态码的描述 HTTP/1.1 200 OK 响应状态码包括: 200 正常 302/307 重定向 304 未修改(表示当前客户端缓存的版本是最新版) 404 服务器上不存在客户端请求的资源 500 服务器内部错误 响应消息头:(常用) Location:指示新的资源的位置。通常和302/307一起使用完成请求重定向 Server:apache tomcat指示服务器的类型 Content-Encoding:gzip服务器发送的数据采用的编码类型 Content-Length:80 告知客户端浏览器响应正文的长度 Content-Language:zh-cn 服务器发送的文本的语言 Content-Type:text/html;charset=GB2312服务器发送的内容的MIME类型(文件的传输类型) Refresh:1;url=http://www.xxx.com指示客户端刷新的频率,单位为秒。可用于还剩几秒跳转页面。 Content-Dispositation:attachment;filename=aaa.zip 告诉客户端这是要下载的文件 Set-Cookie:xx=xx 服务器端发送的Cookie 响应正文: 在网页右键查看源码即可查看 3.Servlet生命周期 实例化-》初始化-》服务-》销毁 出生:(实例化new-》初始化init)第一次访问servlet时出生 活着:(服务service)应用活着,servlet就活着 死亡:(销毁)应用卸载了,servlet就销毁。 注:可通过在注解@WebServlet中配置load-on-startup,使servlet在服务器启动时就创建 4.Servlet的三种创建方式 (1)实现javax.servlet.Servlet接口 (2)继承javax.servlet.GenericServlet类(适配器模式)重写service方法 适配器模式,GenericSelvlet是个抽象类,只有service方法是抽象方法,其余的都已经实现了servlet的方法 (3)继承javax.servlet.http.HttpServlet类(模板方法设计模式) 常用。但注意不要重写servic()方法。只重写doGet()和doPost()即可。因为HttpServlet的service方法中使用的是doget和dopost方法 5.Serlvet配置url-pattern 匹配规则: 优先级:绝对匹配 > /开头匹配 > 扩展名方式匹配 绝对匹配是指没有使用通配符*,*代表任意字符串。 /* 任意字符都能识别 *.字符串 以*.字符串结尾的请求都可以访问。 /action/* 以/action开头的请求都可以访问 如果url-pattern的值是/,表示执行默认映射。所有的资源都可以访问。 6.Servlet的线程安全 Servlet只创建一次,销毁一次。每次访问都是多线程。所以有线程安全问题。所以不要写全局变量,只写局部变量,用户不共用变量。 7.ServletConfig的使用 作用1:获取Servlet的配置信息。 作用2:获得ServletContext对象 1 获取ServletContext对象 2 String name = (String) this.getServletContext().getAttribute("name"); 8.ServletContext ServletContext代表的是整个应用。一个应用只有一个ServletContext对象。单实例。ServletContext对象实际上就是一个Map(setAttribute和getAttribute)。 常用方法: 域对象:setAttribute(sString , Object ) ,getAttribute(String ) ,rmoveAttribute(String) 获取全局配置信息:getInitParameter(String ) 根据配置文件中 获取资源路径:getRealPath(String path) 根据资源名称得到资源的绝对路径。可以得到当前应用任何位置的任何资源。 实现servlet的转发:getRequestDispatcher(String path); 参数表示要跳转到那里去。其实质就是请求转发。注意不是重定向。 java之servlet学习基础(一) 标签:跳转 tom 初始化 返回 type mime类型 oca 源码 ati 原文地址:https://www.cnblogs.com/sy-deku/p/9726578.html
1 第一种方式获得配置信息,其实就是获得web.xml里面servlet标签下的init-param标签内的param-value
2 private ServletConfig config;
3 @Override
4 public void init(ServletConfig config) throws ServletException {
5 this.config = config;
6 }
7 第二种方式获得config配置信息*/
8 String encoding = this.getServletConfig().getInitParameter("encoding");
9
10 第三种方式获得配置信息
11 String encoding = this.getInitParameter("encoding");//为什么能使用this.get...是因为该类是继承了httpservlet,httpservlet继承了GenericServlet
12 //然后GenericServlet的getIniParameter()返回servletconfig内的getinitParameter方法,所以
13 //就可以直接调用。
上一篇:python实现排序算法
下一篇:Spring IOC过程