Servlet-基础

Servlet


前情回顾:

  1. HTTP协议是网络通信协议,是浏览器与服务器之间的网络通讯协议。在这过程中,浏览器被视为HTTP客户端,对应的,网站的服务器就是HTTP服务器。
  2. tomcat给程序员提供了一组api,可以让程序员基于这些api更方便的开发HTTP服务器程序。
  3. 虽然说tomcat本身是HTTP服务器,但其自身与业务无关。我们可以开发与业务有关的程序,即一个完整的网站后端。
  4. 回顾 动态页面 vs 静态页面
    静态页面也就是内容始终固定的页面. 即使 用户不同/时间不同/输入的参数不同 , 页面内容也不会发生变化. (除非网站的开发人员修改源代码, 否则页面内容始终不变).
    动态页面指的就是 用户不同/时间不同/输入的参数不同, 页面内容会发生变化.

 理论等部分:

Servlet 主要做的工作
  • 允许程序猿注册一个类, 在Tomcat收到某个特定的HTTP请求的时候,执行这个类中的一些代码.
  • 帮助程序猿解析 HTTP 请求, 把HTTP请求从一个字符串解析成一个 HttpRequest 对象.
  • 帮助程序猿构造 HTTP 响应. 程序猿只要给指定的HttpResponse对象填写一些属性字段, Servlet 就会自动的安装 HTTP 协议的方式构造出一个 HTTP 响应字符串, 并通过 Socket 写回给客户端.

关于 .xml 文件中groupId, artifactId, version
groupId: 表示组织名称
artifactId: 表示项目名称
version: 表示版本号
中央仓库按照这三个字段来确定唯一一个包的.

  • 创建一个类 HelloServlet , 继承自 HttpServlet
  • 在这个类上方加上 @WebServlet("/hello") 注解, 表示 Tomcat 收到的请求中, 路径为 /hello的请求才会调用 HelloServlet 这个类的代码. (这个路径未包含 Context Path)
  • 重写 doGet 方法. doGet 的参数有两个, 分别表示收到的 HTTP 请求 和要构造的 HTTP 响应. 这个方法会在 Tomcat 收到 GET 请求时触发HttpServletRequest 表示 HTTP 请求. Tomcat 按照 HTTP 请求的格式把 字符串 格式的请求转成了一个 HttpServletRequest 对象. 后续想获取请求中的信息(方法, url, header, body 等) 都是通过这个对象来获取.
  • HttpServletResponse 表示 HTTP 响应. 代码中把响应对象构造好(构造响应的状态码, header,body 等)
  • resp.getWriter() 会获取到一个流对象, 通过这个流对象就可以写入一些数据, 写入的数据会被构造成一个 HTTP 响应的 body 部分, Tomcat 会把整个响应转成字符串, 通过 socket 写回给浏览器.
  1. 我们的代码不是通过 main 方法作为入口了. main 方法已经被包含在 Tomcat 里, 我们写的代码会被Tomcat 在合适的时机调用起来.此时我们写的代码并不是一个完整的程序, 而是 Tomcat 这个程序的一小部分逻辑.
  2. 我们随便写个类都能被 Tomcat 调用嘛? 满足啥样条件才能被调用呢?主要满足三个条件:     a) 创建的类需要继承自 HttpServlet                                                                                       b) 这个类需要使用 @WebServlet 注解关联上一个 HTTP 的路径                                           c) 这个类需要实现 doXXX 方法.                                                                                            当这三个条件都满足之后, Tomcat 就可以找到这个类, 并且在合适的时机进行调用.

创建项目步骤

步骤:

  1. 创建项目 maven  (工程管理工具,进行依赖管理,构建打包等)(pom.xml)
  2. 引入依赖 servlet api jar(tomcat提供的api)
  3. 创建目录(在新建项目时就有啦,这个目录的作用是为了tomcat能够识别到当前代码为webapp,并进行加载)
  4. 编写代码
    1.  自己写一个类,继承自servlet提供的HttpServlet类,只要为了功能的扩展。
    2. 方法重写

      lQLPJw2xCm7ZNEQ5zQPysKLSRo5lqINJBSETGS3AuAE_1010_57.png

    3. ​这个编辑这个不需要手动调用,而是当服务器收到get请求之后,就会由 tomcat 自动调用。doGet 的效果,根据请求计算响应~~
    4. req 是 tomcat 针对请求,已经解析好,构造好了的。
    5. resp 则是一个空对象(不是 null,只是 new 了个对象,里面的各属性没设置)此处就需要在 doGet 内部,根据需要的业务逻辑,根据请求计算出响应。resp 相当于输出型函数。
    6. HttpServlet 父类没有任何东西,就只是报了个错。

代码部分

在 HelloServlet.java 部分

writer, reader 是字符流,InputStream, OutputStream 是字节流。

此处代码里的 writer 对象是从属于 resp 的,此时进行的操作其实是往 resp 的 body 部分进行写入,等 resp 对象整个构造好了,tomcat 会统一的转成HTTP响应,再写 socket。

不排除write是直接通过 resp 往网卡里写

对!

打包程序

(把程序编译好,得到一些 .class 文件)把这些 .class 文件打成压缩包。

war 包和 jar 包的区别
-》jar 包是普通的 java 程序打包的结果. 里面会包含一些 .class 文件.
-》war 包是 java web 的程序, 里面除了会包含 .class 文件之外, 还会包含 HTML, CSS, JavaScript, 图片, 以及其他的 jar 包. 打成 war 包格式才能被 Tomcat 识别.

双击或右键运行

打包后,包在 target 目录下

这是结果:

 

部署

然后启动 tomcat ,双击 startup.bat 

验证

打开浏览器,输入 url 访问代码,127.0.0.1:8080/hello_servlet/hello.路径错,容易404

第一级路径:                                              第二级路径:

小结

如果 url 中写的是域名,会先访问 dns, 此处直接写的IP,也就是127.0.0.1

简化的打包部署

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值