软件结构发展史
- 单机时代-桌面应用,数据保存在本地;
- 联机时代(Client-Server模式,C/S结构);
- 互联网时代(Browser-Server模式,B/S结构)。
B/S模式执行流程
- 通过用户输入的网址,利用DNS服务器,查询到IP地址,将请求发送给web服务器,获取程序。
请求与响应
- 从浏览器发出送给服务器的数据包称为”请求(Request)”;
- 从服务器返回给浏览器的结果称为”响应(Response)”;
J2EE
- J2EE(Java 2 platform Enterprise Edition)是指”Java 2企业版”;
- 开发BS(Web)应用程序就是J2EE最核心的功能
- J2EE由13个功能模块组成
Apache Tomcat
- Tomcat是Apache软件基金会旗下一款免费的开源的Web应用服务器程序。
![Apache Tomcat(2.png)
J2EE与Tomcat的关系
- J2EE是一组技术规范和指南,具体实现由软件厂商决定;
- Tomcat本质上是J2EE Web(Servlet与JSP)的规范的一种实现;
- J2SE是J2EE运行的基石,运行Tomcat离不开J2SE(JRE&JDK)。
Servlet
- Servlet(Server Applet)服务器小程序,主要功能用于生成动态Web内容。
标准Java Web工程结构
Servlet开发步骤
- 创建Servlet类,继承HttpServlet;
- 重写service方法,编写程序代码;
- 配置web.xml,绑定URL。
Servlet的访问方法
http://IP地址:端口/context-path/url-mapping
- 远程访问使用IP地址,本地访问localhost(127.0.0.1)
- context-path称为“上下文路径”,默认为工程名
请求参数
- 请求参数是指浏览器通过请求向Tomcat提交的数据
- 请求参数通常是用户输入的数据,待Servlet进行处理
- 参数名1=值1&参数名2=值2&参数名n=值n…
Servlet接收请求参数
request.getParameter() //接收单个参数
request.getParameterValues() //接收多个同名参数
Get和Post请求方法
Get方法是将数据通过在URL附加数据显性向服务器发送数据
http://localhost:8080/FirstServlet/sample?name=zhangsan
Post方式会将数据存放在”请求体”中隐性向服务器发送数据
http://localhost:8080/FirstServlet/sample
- 请求体:
name=zhangsan
Get与Post处理方式
//所有请求,起到了对两种不同处理方式的分发作用
public void service(){
}
//Get请求
public void doGet(){
}
//Post请求
public void doPost(){
}
Get和Post应用场景
Get常用于不包含敏感信息的查询功能,百度谷歌查询结果
- 例如
https://www.baidu.com/s?wd=imooc&rsv_spt=1
- 例如
Post方式用于安全性要求较高的功能或者服务器的写操作
- 用户登录
- 用户注册
- 更新公司账目
Servlet生命周期
共分为5个阶段
- 装载 -
web.xml
- 创建 = 构造函数
- 初始化 - init()
- 提供服务 - service()
- 销毁 - destroy()
- 装载 -
使用注解简化配置
- Servlet 3.x字后引入了”注解Annotation”特性
- 注解用于简化Web应用程序的配置过程
- Servlet核心注解:
@WebServlet
@WebServlet("/anno")
public class Annotation extends HttpServlet{
@Override
protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
resp.getWriter().println("I am annotation servlet!");
}
}
启动自动加载Servlet
- web.xml使用
<load-on-startup>
设置启动加载; <load-on-startup>0~9999</load-on=startup>
,执行的时候会按照标签内部的序号从小到大依次执行;- 启动时加载在生产中常用于系统的预处理,将复杂的程序在启动时加载好,在执行过程中不需要进行额外的处理,可以减少使用时候的卡顿;
- 需要重写init()函数。
create
com.imooc.servlet.CreateServlet
0
// 采用注解方式实现启动自动加载,注意,一定要设置url才能生效,loadOnStartup的值是加载顺序
@WebServlet(urlPatterns="/unused",loadOnStartup=2)
public class AnalysisServlet extends HttpServlet{
@Override
public void init() throws ServletException{
System.out.println("正在分析结果");
}
}
HTTP请求的结构
- HTTP请求包含三部分:请求行、请求头、请求体