毕业一年之久,因为个人能力问题一直没能走进开发的岗位,而在相关职业徘徊,心有不甘,于是从新开始学习,希望有一天能够做自己想做的工作。
此篇笔记是我学习servlet的笔记,和理解,希望对其他人有些帮助。
我曾经写个一个webserver ,从解析客户端的http请求到处理请求再到相应请求,代码量非常大,首先,你需要解析客户端发来的http请求,请求分为请求行,请求头,和请求正文,在请求头和请求正文之间有一个回车加换行 ,也就是一个空行,接受响应需要做非常多的事情,首先,请求行和请求头是字符创形式发送过来的,这是,你就可以用缓冲字符流去读取,但是,响应正文是以二进制数据发送过来的,这时候 ,空行就用到了,空行是回车加换行,对应字符编码的10和13,所以在你写字符流读取方法时,你需要设置当读取到10和13时就结束,然后读取响应正文,get请求时在请求行里,而post 响应是在请求正文里的,然后你还要写处理请求的代码,还有发送响应的代码,也要满足http协议,代码量非常大,当我接触到servlet的时候,给我的第一直觉就是,爽。
那什么是servlet呢,运行在webservler上的代码片段,用户处理客户的http请求,就是servlet。而其他代码,像特别复杂的网络通信的代码,都会被封装到webserver中
,你只需写出servlet的代码,就可以完成web服务端的开发。
那如何创建一个servlet项目呢?(注:以下操作都是在Eclipse中操作完成的)
1.首先你需要创建一个Maven项目 (注:选war包,然后让Eclipse生成web.xml文件,然后修改项目的targeted runtime -》Tomcat(不选则无法导包));
2.新建一个类,实现Servlet借口(注: 1. 该接口中一共提供了5个抽象方法 2. 当前只需要使用service(ServletRequest,ServletResponse) 3. 向response对象中添加响应信息:Helle World )
或者声明一个类,继承HttpServlet
- HttpServlet是Sun公司提供的Servlet接口的一个实现类
- HttpServlet实现了Servlet接口中所有的抽象方法
- 开发者仅需要继承该类,重写所需使用的方法即可
3.在Web.xml中配置
告诉Tomcat如何找到当前的Servlet
<servlet-name>HelloServlet</servlet-name> <servlet-class>web.HelloServlet</servlet-class>
<servlet-mapping> <servlet-name>HelloServlet</servlet-name> <url-pattern>/hello</url-pattern> </servlet-mapping>
4.
4.1部署serlvet01
- 打包 --appName (servlet01) --WEB-INF --classes web.xml
- 发布
4.2
启动服务器
注 1. 如果<url-pattern>的值没有以 / 开头,服务器启动报异常 2. 不能出现多个Servlet映射的url相同的情况,哪怕是同一个Servlet映射了2次也不行
4.3使用浏览器访问Servlet url=http://localhost:8080/servlet01/hello localhost:8080 -> 本机:8080端口 ->Tomcat /servlet01 -> 已经部署的项目的名称 /hello -> Servlet所映射的url
这样 一个servlet就已经做好了,接下来 咱们说一下servlet的执行流程
- 浏览器根据url的域名+端口号和服务器建立连接
- 浏览器生成请求数据包,并发送请求数据包
- 服务器收到请求数据包,解析请求数据包,创建request和response对象
- 服务器将请求数据存入request对象中
- 服务器调用Servlet的service(),将request和response传入
- Servlet的service()从request中获取请求数据,将生成的响应数据写入response中
- 服务器从response中读取响应数据,生成响应数据包,发送给浏览器
- 浏览器解析响应数据包,在页面上显示响应内容
然后之前一直说WebServer 那什么是WebServer
指的是可以接收用户请求,为用户提供响应的程序就是WebServer
这是我的第一篇帖子,写的比较紧张,希望可以帮助到其他人,下一篇我会记录有关servlet的乱码问题,以后的学习进度也会在博客中写出,谢谢大家