JavaWeb学习笔记——Servlet编程
来源:互联网 发布:怎样化妆 知乎 编辑:程序博客网 时间:2024/05/17 16:11
1.如何开发一个Servlet
1.1 步骤
1)编写java类,继承HttpServlet类
2)重写doGet和doPost方法
3)Servlet程序交给tomcat程序服务器运行
3.1 Servlet程序的class字节码文件拷贝到WEB-INF/classes目录
3.2 在web.xml文件中进行配置
<servlet> <servlet-name>ServletDemo01</servlet-name> <servlet-class>yorisk.servlet.study.ServletDemo01</servlet-class> </servlet> <servlet-mapping> <servlet-name>ServletDemo01</servlet-name> <url-pattern>/ServletDemo01</url-pattern> </servlet-mapping>访问URL: http://localhost:8080/JavaWeb_Servlet_Study_20170720/ServletDemo01
Tomcat服务器启动时,首先加载webapps中的每个web应用的web.xml配置文件。
http://:http协议
localhost:到本地的hosts文件中查找是否存在该域名对应的IP地址
8080:找到tomcat服务器,tomcat默认端口为8080
8080:找到tomcat服务器,tomcat默认端口为8080
/JavaWeb_Servlet_Study_20170720:在tomcat的webapps目录下找到对应项目
/ServletDemo01:资源名称
1)在JavaWeb_Servlet_Study_20170720的web.xml中查找是否有匹配的url-pattern的内容(/ServletDemo01)
2)如果找到匹配的url-pattern,则使用当前servlet-name的名称到web.xml文件中查询是否有同名称的servlet配置
3)如果找到,则取出对应的servlet配置信息中的servlet-class内容:
字符串:yorisk.servlet.study.ServletDemo01
通过反射:
a)构造ServletDemo01的对象
b)然后调用ServletDemo01中的方法
2.Servlet的映射路径
<servlet-mapping> <servlet-name>ServletDemo01</servlet-name> <url-pattern>/ServletDemo01</url-pattern> </servlet-mapping>
精确匹配
/ServletDemo01
模糊匹配
/*
*.后缀名
注意:
1)url-pattern要么以/开头,要么以*开头。例如,ServletDemo01是非法路径
2)不能同时使用两种模糊匹配,例如/*.do是非法路径
3)当有输入的URL有多个sevlet同时被匹配的情况下:
3.1 精确匹配优先。(长得最像优先被匹配)
3.2 以后缀名结尾的模糊匹配 url-pattern优先级最低!!
3.sevlet缺省路径
servlet缺省路径(<url-pattern></url-pattern>)是在tomcat服务器内置的一个路径。该路径对应的是一个DefaultServlet(缺省Servlet)。这个缺省的Servlet的作用是用于解析web应用的静态资源文件。
问题:URL输入http://localhost:8080/JavaWeb_Servlet_Study_20170720/index.html 如何读取文件?
1)到当前JavaWeb_Servlet_Study_20170720应用下的web.xml文件查找是否有匹配的url-pattern。
2)如果没有匹配的url-pattern,则交给tomcat的内置的DefaultServlet处理
3)DefaultServlet程序到JavaWeb_Servlet_Study_20170720应用的根目录下查找是否存在一个名称为index.html的静态文件。
4)如果找到该文件,则读取文件内容,返回给浏览器。
5)如果找不到该文件,则返回404错误页面。
结论:先找动态资源,再找静态资源。
4.Servlet的生命周期(重点)
4.1 引入
Servlet的生命周期:servlet类对象什么时候创建,什么时候调用什么方法,什么时候销毁。
以前的对象:new Student(); stu.study(); stu = null;
Servlet程序的生命周期由tomcat服务器控制。
4.2 Servlet重要的四个生命周期方法
构造方法:创建servlet对象的时候调用。默认情况下,第一次访问servlet的时候创建servlet对象只调用1次。证明servlet对象在tomcat是单实例的。
init方法:创建完servlet对象的时候调用。只调用1次。
service方法:每次发出请求时调用。调用n次。
destroy方法:销毁servlet对象的时候调用。停止服务器或者重新部署web应用时销毁servlet对象。只调用1次。
4.3 伪代码演示servlet的生命周期
tomcat内部代码运行:
1)通过映射找到servlet-class的内容:字符串:yorisk.servlet.study.ServletDemo01
2)通过反射构造ServletDemo01对象
2.1 字节码对象
Class clazz = class.forName("yorisk.servlet.study.ServletDemo01");
2.2 调用无参数的构造方法来构造对象
Object obj = clazz.newInstance();——1.servlet的构造方法被调用
3)创建ServletConfig对象,通过反射调用init方法
3.1 得到方法对象
Method m = clazz.getDeclareMethod("init",ServletConfig.class);
3.2 调用方法
m.invoke(obj,config);——2.servlet的init方法被调用
4)创建request,response对象,通过反射调用service方法
4.1 得到方法对象
Method m = clazz.getDeclareMethod("service",HttpServletRequest.class,HttpServletResponse.class);
4.2 调用方法
m.invoke(obj,request,response);——3.servlet的service方法被调用
5)当tomcat服务器停止或web应用重新部署,通过反射调用destroy方法
5.1 得到方法对象
Method m = clazz.getDeclareMethod("destroy",null);
5.2 调用方法
m.invoke(obj,null);——4.servlet的destroy方法被调用
4.4 用时序图来演示servlet的生命周期
5.servlet的自动加载
默认情况下,第一次访问sevlet的时候创建servlet对象。如果servlet的构造方法或init方法中执行了比较多的逻辑代码,那么导致用户第一次访问servlet的时候比较慢。
改变servlet创建对象的时机:提取到加载web应用的时候!
在servlet的配置信息中,加上一个<load-on-startup>即可!
<servlet> <servlet-name>ServletDemo01</servlet-name> <servlet-class>yorisk.servlet.study.ServletDemo01</servlet-class> <!-- 让servlet对象自动加载 --> <load-on-startup>1</load-on-startup> 注意: 整数值越大,创建优先级越低!!</servlet>
6.有参的init方法和无参的 init方法
阅读全文
0 0
- JavaWeb学习笔记——Servlet编程
- JavaWeb学习笔记——servlet
- JavaWeb学习笔记——servlet
- JavaWeb学习笔记——Servlet生命周期
- JavaWeb学习笔记:Servlet
- Javaweb学习笔记---Servlet
- JavaWeb学习笔记(6)——Servlet原理
- javaweb学习总结——Servlet开发笔记
- JavaWeb学习笔记之servlet
- 学习笔记,javaWeb中的Servlet
- JavaWeb学习笔记之Servlet
- 学习javaWeb之Servlet——Filter
- 学习JavaWeb之Servlet——listener
- javaweb学习总结——servlet开发
- JavaWeb学习总结——Servlet监听器
- JavaWeb学习总结——Servlet
- JavaWeb——Servlet学习日志1
- JavaWeb——servlet学习日志2
- spring boot 返回 html
- RestTemplate的简单实用
- Oracle游标全解
- Spring Boot 使用JSP时,修改JSP不生效,需要重启的现象
- delphi chrome cef3 控件学习笔记 (三)
- JavaWeb学习笔记——Servlet编程
- 数据库学习(一)----基本原理
- 手机H5页面滑动事件
- IOS旗下基于FFmpeg开发的开源流媒体播放器汇总推荐
- java中连接数据库
- 【备忘】传智播客最新大数据第3期实战培训完整版视频教程
- delphi chrome cef3 控件学习笔记 (四)
- C语言free报错
- myBatis使用collection