Web流程、Web服务器软件、Servlet

Web流程、Web服务器软件、Servlet
1.Web流程
1.1软件架构
C/S:客户端/服务器端
有指定的客户端,比如PC端淘宝APP或者手机端淘宝APP或者QQ的APP等;需要依赖一个特定的客户端来访问。
B/S:浏览器/服务器端
基于浏览器,比如网页版百度,网页版淘宝等;只要有浏览器,通过地址就可以访问。
1.2资源分类
静态资源
所有用户访问后,得到的结果都是一样的,称为静态资源
静态资源可以直接被浏览器解析,如: html,css,JavaScript
所有用户访问后,得到的结果是一致的。
动态资源
每个用户访问相同资源后,得到的结果可能不一样。称为动态资源。
动态资源被访问后,需要先转换为静态资源,在返回给浏览器,如:servlet/jsp,php,asp…
1.3网络通信三要素
IP:电子设备(计算机)在网络中的唯一标识
端口:应用程序在计算机中的唯一标识。 0~65536
传输协议:规定了数据传输的规则
基础协议
tcp:安全协议,三次握手。 速度稍慢
udp:不安全协议。 速度快
1.4通信流程
前端发送请求
根据路径信息,访问后台接口
请求路径中,包含协议:ip地址、端口号、路径
通过ip地址找到服务器
通过端口号,找到web服务器程序
通过具体路径,找到执行的代码

后端收到请求后
对请求进行处理,完成后响应前端
后端处理数据时
与数据库进行交互,完成数据操作

2.Web服务器软件
2.1概念
服务器:安装了服务器软件的计算机
服务器软件:接收用户的请求,处理请求,做出响应。
web服务器软件:接收用户的请求,处理请求,做出响应。
在web服务器软件中,可以部署web项目,让用户通过浏览器来访问这些项目,实际上可以理解为web容器。
2.2 常见的与java相关的服务器软件
webLogic:oracle公司,大型的JavaEE服务器,支持所有的JavaEE规范,收费的。
webSphere:IBM公司,大型的JavaEE服务器,支持所有的JavaEE规范,收费的。
JBOSS:JBOSS公司的,大型的JavaEE服务器,支持所有的JavaEE规范,收费的。
Tomcat:Apache基金组织,中小型的JavaEE服务器,仅仅支持少量的JavaEE规范servlet/jsp。开源的,免费的。
2.3 Tomcat
2.3.1简介
Tomcat是Apache 软件基金会(Apache Software Foundation)的Jakarta 项目中的一个核心项目
Tomcat 服务器是一个免费的开放源代码的Web 应用服务器,属于轻量级应用服务器,在中小型系统和并发访问用户不是很多的场合下被普遍使用,是开发和调试JSP 程序的首选。
2.3.2下载安装与卸载
官网下载:http://tomcat.apache.org/
安装:解压压缩包即可
注意:安装目录建议不要有中文和空格
目录介绍
bin :可以执行文件
conf:配置文件
lib:第三方依赖包
logs:日志文件
temp:临时文件夹
webapps:部署项目
启动、访问、关闭
启动
bin/startup.bat ,双击运行该文件即可
访问
浏览器输入http://localhost:8080 访问自己
http://别人的ip:8080 访问别人
关闭
bin/shutdown.bat,双击运行该文件即可
修改端口号
Conf目录下的server.xml文件中

修改8080为想要的端口即可
3.Servlet
3.1 概述
Servlet(Server Applet)是Java Servlet的简称
小服务程序或服务连接器,用Java编写的服务器端程序,具有独立于平台和协议的特性,主要功能在于交互式地浏览和生成数据,生成动态Web内容。
狭义的Servlet是指Java语言实现的一个接口,广义的Servlet是指任何实现了这个Servlet接口的类。
Sevlet是java为了能够进行web服务器端编程而设置的一系列标准。
我们自定义的java类,只要实现了对应的标准,就可以称作servlet。
标准 : javax.servlet.Servlet接口
Servlet运行于支持java的应用服务器中,也就是说servlet的运行需要依赖于容器,而我们安装的Tomcat 就是这个容器。
从原理上来讲,servlet可以响应任何类型的请求。但是绝大多数的情况下servlet只用来扩展基于HTTP协议的web服务器。
所以,我们的servlet实现类,也可以继承HttpServlet;
HttpServlet是基于HTTP协议开发的servlet标准,该类也实现了servlet接口。

3.2 端口冲突问题

报这个错误说明端口被占用了8080 / 8005;
解决方案:
① 如果是tomcat启动了多次,导致端口被占用。把原来的Tomcat关闭,再重新启动即可。
② 如果是其他软件占用了8080的话;
可以更改Tomcat的端口,也可以把其他软件关闭;

任务管理器关闭 对应PID的进程即可

3.3 创建servlet项目
步骤:
1 创建项目
2 创建class
3 实现 servlet接口
4 覆写对应的方法
5 注册和映射
6 请求/响应

web.xml中进行注册和映射
在web.xml中 添加映射关系
进行Servlet注册


映射

注解配置

运行项目
浏览器请求 127.0.0.1:8080/…
请求执行java代码
http://localhost:8080/_01Servlet/hello

3.4 执行原理与流程

当我们发生请求的时候,先执行web.xml匹配路由(映射 url-pattern)
未匹配成功 报错 404;
匹配成功,就执行对应的servlet类中的java代码;
先执行init且只执行一次;
然后执行service方法,每次请求都会执行;
当关闭Tomcat服务的时候,destory才会执行且只执行一次。
3.5生命周期

从创建Servlet对象开始一直到死亡的一个执行过程
先执行构造方法,用于创建Servlet对象
执行init()方法做初始化操作
执行service()/doGet()/doPost()方法处理真正的逻辑操作和数据交互
执行destroy()方法进行资源释放和销毁

3.6 HttpServlet
创建一个类,继承HttpServlet类
覆写doGet()/doPost()方法
HttpServletRequest request
代表了客户端向服务器发送过来的请求对象
HttpServletResponse response
代表了服务器向客户端发送回来的响应对象
response.setContentType(“text/html;charset=utf-8”);
设置返回的类型和字符编码
类型有好多,在TomCat的安装路面下,conf/web.xml里面
中的类型都可以进行设置

response.getWriter().println();
向页面输出内容
out.write()是字节输出流的方法
out.print()/out.println()是字符输出流的方法
区别
类不同
print方法是子类JspWriter
write是Writer类中定义的方法
重载不同
重载的print方法可将各种类型的数据转换成字符串的形式输出
重载的write方法只能输出字符、字符数组和字符串等与字符相关的数据
字符串对象的值为null
JspWriter类型的out对象使用print方法和write方法都可以输出字符串
print方法将输出内容为“null”的字符串
write方法则是抛出NullPointerException异常

3.7 Request
Http中请求消息格式
POST /login.html HTTP/1.1
Host: localhost
User-Agent: Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:60.0) Gecko/20100101 Firefox/60.0
Accept:text/html,application/xhtml+xml,application/xml;q=0.9,/;q=0.8
Accept-Language:zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2
Accept-Encoding: gzip, deflate
Referer: http://localhost/login.html
Connection: keep-alive
Upgrade-Insecure-Requests: 1
请求行
请求方式
请求url 请求协议/版本 GET /login.html HTTP/1.1
HTTP协议有7中请求方式
GET
请求参数在请求行中,在url后
请求的url长度有限制的
不太安全
POST
请求参数在请求体中
请求的url长度没有限制的
相对安全
请求头
客户端浏览器告诉服务器一些信息
格式 请求头名称: 请求头值
常见的请求头
User-Agent
浏览器告诉服务器,我访问你使用的浏览器版本信息
Referer
http://localhost/login.html
告诉服务器,我(当前请求)从哪里来?
作用
防盗链
统计工作
请求空行
空行,就是用于分割POST请求的请求头和请求体的
请求体(正文)
封装POST请求消息的请求参数
3.8 Request对象
request对象和response对象的原理
request和response对象是由服务器创建的。我们来使用它们
request对象是来获取请求消息,response对象是来设置响应消息
HttpServletRequest对象
继承ServletRequest接口
封装HTTP请求消息
Request功能
获取请求消息数据
获取请求行数据
获取请求方式 :GET
String getMethod()
获取虚拟目录
String getContextPath()
获取Servlet路径
String getServletPath()
获取get方式请求参数
String getQueryString()
获取请求URI
String getRequestURI()
StringBuffer getRequestURL()
获取协议及版本
String getProtocol()
获取客户机的IP地址
String getRemoteAddr()
获取请求头数据
String getHeader(String name):通过请求头的名称获取请求头的值
Enumeration getHeaderNames():获取所有的请求头名称
获取请求体数据
只有POST请求方式,才有请求体,在请求体中封装了POST请求的请求参数
获取流对象
BufferedReader getReader():获取字符输入流,只能操作字符数据
ServletInputStream getInputStream():获取字节输入流,可以操作所有类型数据
再从流对象中拿数据
其他功能
获取请求参数通用方式
不论get还是post请求方式都可以使用下列方法来获取请求参数
String getParameter(String name):根据参数名称获取参数值
String[] getParameterValues(String name):根据参数名称获取参数值的数组
Enumeration getParameterNames():获取所有请求的参数名称
Map<String,String[ ]> getParameterMap():获取所有参数的map集合
请求转发
一种在服务器内部的资源跳转方式
通过request对象获取请求转发器对象
RequestDispatcher getRequestDispatcher(String path)
使用RequestDispatcher对象来进行转发
forward(ServletRequest request, ServletResponse response)
特点
浏览器地址栏路径不发生变化
只能转发到当前服务器内部资源中
转发是一次请求
共享数据
域对象
一个有作用范围的对象,可以在范围内共享数据
request域
代表一次请求的范围,一般用于请求转发的多个资源中共享数据
方法
void setAttribute(String name,Object obj):存储数据
Object getAttitude(String name):通过键获取值
void removeAttribute(String name):通过键移除键值对
获取ServletContext
ServletContext getServletContext()

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值