如何开发一个servlet
步骤:
- 编写java类,继承HttpServlet
- 重写doGet和doPost方法
- Servlet程序交给服务器运行
3.1servlet程序的class码拷贝到WEB-INF/classes目录
3.2在web.xml文件中进行配置
注意:在eclipse neon2.0中,servlet直接生成已经不再需要配置web.xml文件,但是如果不使用2.0的功能,使用web.xml配置的servlet依然可以运行。
配置web.xml文件的写法:
1 <!-- 配置一个servlet -->
2 <!-- servlet的配置 -->
3 <servlet>
4 <!-- servlet的内部名称,自定义。尽量有意义 -->
5 <servlet-name>FirstServlet</servlet-name>
6 <!-- servlet的类全名:包名+类名 -->
7 <servlet-class>com.maodoer.test.FirstServlet</servlet-class>
8 </servlet>
9
10 <!-- servlet的映射配置-->
11 <servlet-mapping>
12 <!-- servlet的内部名称,一定要和上面的内部名称一致 -->
13 <servlet-name>FirstServlet</servlet-name>
14 <!-- servlet的映射路径(访问servlet的路径) -->
15 <url-pattern>/first</url-pattern>
16 </servlet-mapping>
问题:访问URL http://localhost:8080/day10_web/first
前提:tomcat服务器启动时,首先加载webapps中的每隔web应用的web.xml配置文件。
http://:http协议
localhost:到本地的hosts文件中查找是否存在该域名对应的ip地址
8080:找到tomcat服务器
/day10_web:在tomcat的webapps目录下找到day10的目录
/first:资源名称
1)在day10的web.xml中查找是否有匹配的url-pattern的内容(/first)
2)如果找到匹配的url-pattern,则使用当前的servlet-name的名称到web.xml文件职工查询是否有相同名称的servlet配置
3)如果找到,则取出对应的servlet配置信息中的servlet-class内容,字符串:com.maodoer.test.FirstServlet
通过反射:
a)构造FirstServlet的对象
b)然后调用FirstServlet里面的方法
Servlet的映射路径:
url 浏览器输入
精确匹配: /first http://localhost:8080/day10_web/first
/maodoer/first http://localhost:8080/day10_web/maodoer/first
模糊匹配: /* http://localhost:8080/day10_web/任意字符
/itcast/* http://localhost:8080/day10_web/itcast/任意字符
*.后缀名 http://localhost:8080/day10_web/任意路径.后缀名
*.html(伪静态) http://http://localhost:8080/day10_web/ergrep.html
注意:
1)url-pattern一定以/开头或者以*开头。
2)不能同时使用两种模糊匹配,例如/itcast/*.do
3)当输入的url有多个servlet同时被匹配的情况下:
3.1精确匹配优先(长的最像优先被匹配)
3.2以后缀名结尾的模糊匹配级优先级最低
Servlet缺省路径
servlet的缺省路径是在tomcat服务器内置的一个路径。该路径对应的是一个DefaultServlet(缺省Servlet)。这个缺省的Servlet的作用适用于解析web应用的静态资源文件。
tomcat--》config--》web.xml文件
问题:URL输入http://localhost:8080/day10_web/index.html如何读取文件?
1)到day10_web应用下的web.xml文件查找是否有匹配的url-pattern。
2)如果没有匹配的url-pattern,则交给tomcat内置的DefalutServlet进行处理。
3)DefalutServlet程序到day10_web项目的根目录下查找是否存在一个名称为index.html的静态文件。
4)如果找到该文件,则读取该文件的内容,返回浏览器。
5)如果找不到该文件,则返回404错误。
结论:先找动态资源,再找静态资源。