1、资源分类
静态资源 ----- HTML ----- 源码不改,每次访问的数据都是一样的
动态资源 ----- 由程序(Servlet)生成 -- 每次访问得到的数据可能都不一样
2、使用 Servlet 进行动态资源实现 --- 版本1
A、创建一个类实现 Servlet 接口
B、重写 service 方法
C、配置 Servlet 与 URL 的映射
D、浏览器输入 URL 后,就可以执行 Servlet 的 service 方法了(重点:执行流程 --- 看图解)
3、使用 Servlet 进行动态资源实现 --- 版本2
A、继承 GenericServlet(通用的Servlet)
B、重写 service 方法
C、配置Servlet 与 URL 映射
和版本1比较,进行代码简化了
4、使用 Servlet 进行动态资源实现 --- 版本3 ---- 终极版
A、eclipse 直接创建 Servlet 类 --- 继承 HttpServlet,配置信息自动生成
B、重写的不再是 service 方法,而是更加细化的 doGet 或 doPost 方法
C、怎么执行?
根据URL 找到对象类,反射生成对象,反射调用 (父类)service 方法,根据请求方式
再调用 子类的 doGet 或 doPost
5、请求与响应简单使用
A、request 是请求对象
request.getParamter("键") ---- 可以根据键获取客户录入的值
B、response 是响应对象
response.getWriter() --------- 获取一个字符打印流,可以像浏览器响应数据
被屏蔽的实现:
request 和 response 这两个对象 和 Servlet 对象一样是 Tomcat 创建的,
Tomcat 在调用 service 方时,会把这两个对象作为参数传给 service,最终传给
doGet 或 doPost
6、servlet 高级 --- 生命周期
init ----- 出生时调用的方法 ---- 第一次访问时出生
service -- 每次运行时调用的方法 - 每次访问
destory -- 消亡时调用的方法 ---- 服务器关闭时消亡
注意:
servlet 自始至终只有一个(使用了单例设计模式)
控制Servlet初始化的时机:
A、web.xml中使用 <load-on-startup>设置初始化时机
取值:0 以及正整数,服务器加载时就启动
如果是负数或不设置,就是第一次访问时加载
B、 <load-on-startup> 还可以设置启动优先级
数字越小( >= 0 ),优先级越高
7、Servlet 映射的 URL 如何配置?
一般实现,URL 和 类名一致
<!-- 浏览器地址栏中录入的路径完全匹配才能执行servlet -->
<!-- <url-pattern>/abc/def/xxx</url-pattern> -->
<!-- 录入的路径只要目录严格匹配即可,而目录后任意 -->
<!-- <url-pattern>/xxx/yyy/*</url-pattern> -->
<!-- 录入的路径只要后缀名匹配即可,前面任意--> .do .action
<!-- <url-pattern>*.xx<url-pattern> -->
<!-- 路径爱咋咋地 ,都行--> ---- 不建议使用
<!-- <url-pattern>/</url-pattern> -->
优先级(越具体优先级越高):
1 > 2 > 3 > 4
1、需求:
有个登陆页面,输入账号密码如果合法,显示 login success,否则显示 login fail
2、实现思路
A、创建一个登陆页面
B、登陆页面的数据发送到服务器的 Servlet
C、servlet 解析获取用户录入的数据,和数据库比对
D、根据比对结果,输出响应
3、路径问题
方式1:
表单的 action = "http://loaclhost:8080/项目名/路径" ---- 繁琐
方式2:
表单的 action = "/项目名/路径" ---- 和方式1一样,是对 方式1的简化
方式1 和 方式2 称之为绝对路径
方式3:
表单的 action = "路径" || "../../路径" ---- 相对路径(不建议使用)
文件位置一旦变动,路径名也要进行相应修改,不易于后期维护
相对路径怎么推导
不是根据存储位置推导而是根据地址栏输入的 URL 推导