开发动态资源:
静态资源:刷新界面,数据始终不会发生改变,如果要改变界面需要修改源代码
动态资源:刷新界面,数据可能发生改变,数据可来源于数据库
servlet:使用Java开发动态资源的技术
--WebContent 项目根路径
----html
------test.html 访问路径:http://localhost:6666/MyFirstWeb/html/Test.html
----index.html 访问路径:http://localhost:6666/MyFirstWeb/index.html
----META-INF
----WEB-INF (不能通过url直接访问WEB-INF中的资源,如果需要访问,需要在web.xml中进行配置)
------lib 存放关联架包
------web.xml web项目核心配置文件
如何创建servlet:
方法一:
1.创建一个普通的类
2.继承HttpServlet(普通的类——》Servlet)
3.重写父类的doGet( )方法
4.在在web.xml中配置servlet
|
<!-- 配置servlet -->
<servlet>
<!-- 给FirstServelt设置一个名称 -->
<servlet-name>firstServelt</servlet-name>
<!-- 配置Servlet的完整类名(包名+类名) -->
<!-- 此路径错误 /MyFirstWeb/src/com/igeekhome/igeekhome/FirstServlet.java -->
<servlet-class>com.igeekhome.igeekhome.FirstServlet</servlet-class>
</servlet>
<!-- 设置servlet映射路径 -->
<servlet-mapping>
<!-- 声明给哪个servlet设置路径 一定要与上面的servlet配置的name一致-->
<servlet-name>firstServelt</servlet-name>
<!-- 设置路径 -->
<url-pattern>/first</url-pattern>
</servlet-mapping>
|
方法二:
注意:servlet不能直接运行,需要交给tomcat运行
|
同上
|
HTTP协议:
超文本传输协议:浏览器客户端与服务端的数据传输规范
HTTP协议内容:
(1)HTTP请求:(浏览求客户端到服务端)
GET /MyFirstWeb/second HTTP/1.1 --请求行
Host: localhost:8086 -- 目的主机地址以及端口 --以下都是请求头
Connection: keep-alive -- 此次请求过后连接的状态(close 关闭 keep-alive 保持连接)
Cache-Control: max-age=0 -- 缓存存活时间
Upgrade-Insecure-Requests: 1 -- 支持http请求
User-Agent: Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/61.0.3163.79 Safari/537.36 -- 浏览器类型
Accept:text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8 -- 告诉服务器 浏览器所支持的数据类型
Accept-Encoding: gzip, deflate, br ---告诉服务器 浏览器所支持的数据压缩格式
Accept-Language: zh-CN,zh;q=0.8 --- 告诉服务器 浏览器支持的语言
|
(1)请求行
(2)请求头
(3)请求体:GET请求的数据是拼接在url之后的 只有POST请求才有请求体
解析:
GET /MyFirstWeb/second HTTP/1.1 --请求行
请求方式 请求的URI 协议、协议的版本
A.请求方式:GET、POST、PUT、DELETE…
常用请求方式:GET、POST
GET请求 VS POST请求:
GET请求:
拼接格式: 请求路径?参数名=参数值&参数名=参数值
参数名就是表单的name
|
POST请求:
FormData:(请求体) 请求数据的name就是表单的name
|
B.URI:统一资源标记符 (指定本地资源 也可以指定网络资源)
URL(统一资源定位符 定位网络资源) 是 URI的一个分支
C.HTTP 1.0 VS HTTP 1.1
HTTP 1.0 建立一次连接之后,只能发送一次请求就断开连接
HTTP 1.1 建立一次连接之后,可以发送多个请求(基本都是HTTP 1.1)
HttpServletRequest
获取请求数据
-
请求行
-
请求头
-
表单数据
(2)HTTP响应:
HTTP/1.1 200 OK --- 响应行
Cache-Control: private ---响应头
Connection: Keep-Alive
Content-Length: 93 服务端返回给客户端的数据的大小
Content-Type: baiduApp/json; v6.27.2.14; charset=UTF-8 服务端返回给客户端的数据类型、编码格式
Date: Wed, 13 Sep 2017 02:06:02 GMT 服务端响应的事件
Expires: Wed, 13 Sep 2017 03:06:02 GMT 缓存过期事件
Server: suggestion.baidu.zbb.df 服务器类型
|
|
2. 响应头
|
HttpServletResponse:更改服务端响应
更改响应行(不建议更改)
更改响应头
更改实体内容
|
http:协议
localhost:访问的服务端的ip地址
8086:端口 -> Tomcat
20170913_respons: 项目名 ->在webapps目录中查找项目
test: 在20170913_respons查找资源
|
查找资源的步骤:【在服务器启动的时候,tomcat会加载webapps中所有项目的web.xml】
|
底层:
|
实现过程:
Class clazz = Class.forName(“com.igeekhome.servlet.TestServlet”);
Object obj = clazz.newInstance();
Method m = obj.getDeclareMethod(“init”,ServletConfig.class);
m.invoke(obj,config);
6. 获取service方法
Method m = obj.getDeclareMethod
(“service”,HttpServletRequest.class,HttpServletResponse.class);
m.invoke(obj,request,response);
8. 获取destroy()方法
9. 执行destroy()方法
|
路径配置:
<servlet>
<servlet-name>testServlet</servlet-name>
<servlet-class>com.igeekhome.servlet.TestServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>testServlet</servlet-name>
<url-pattern>/test</url-pattern>
</servlet-mapping>
<url-pattern>/test</url-pattern>:配置匹配路径
|
精确匹配:
/igeekhome/test http://localhost:8086/20170913_response/igeekhome/other
模糊匹配:
/* 匹配任意路径
*.action 匹配任意后缀
*.do
注意:
1.精确匹配优先级最高
2.匹配路径只能以/ 或者*开头
3.模糊匹配不能同时使用多种匹配方式
|
Tomcat提供了一个缺省路径 (<url-pattern>/</url-pattern>)
<servlet>
<servlet-name>default</servlet-name>
<servlet-class>org.apache.catalina.servlets.DefaultServlet</servlet-class>
<!—初始化参数-- >
<init-param>
<param-name>debug</param-name>
<param-value>0</param-value>
</init-param>
<init-param>
<param-name>listings</param-name>
<param-value>false</param-value>
</init-param>
<!—Servlet自启动 -- >
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>default</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
剖析:
总结:先找动态资源 再找静态资源
|