Servlet简介
- Servlet是sun公司开发动态web的一门技术
- Sun在这些API中提供一个接口叫做:Servlet,如果想开发一个Servlet程序,需要
- 编写一个类,实现Servlet接口
- 把开发好的Java类部署到web服务器中
- 把实现了Servlet接口的Java程序叫做:Servlet
HelloServlet
Servlet接口Sun公司有两个默认的实现类:HttpServlet、GenericServlet
1、 关于Maven父子工程的理解
父项目中会有
1. <modules> 2. <module>servlet-01</module> 3. </modules>
子项目中会有
1. <parent> 2. <artifactId>javaweb-02-servlet</artifactId> 3. groupId>com.wangsiqi</groupId> 4. <version>1.0-SNAPSHOT</version> 5. </parent>
父项目中的jar子项目可以直接使用
son extends father
2、Maven环境优化
- 修改web.xml为最新的
- 讲Maven的结构搭建完整
3、编写一个Servlet程序
- 编写一个普通类
- 实现Servlet接口,这里默认继承HttpServlet
1. package com.wangsiqi.servlet; 2. 3. import javax.annotation.Generated; 4. import javax.servlet.ServletException; 5. import javax.servlet.http.HttpServlet; 6. import javax.servlet.http.HttpServletRequest; 7. import javax.servlet.http.HttpServletResponse; 8. import java.io.IOException; 9. import java.io.PrintWriter; 10. 11. public class HelloServlet extends HttpServlet { 12. // 由于get或者post只是请求实现的不同的方式,可以相互调用,业务逻辑都一样 13. @Override 14. protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException{ 15. // super.doGet(req,resp); 16. PrintWriter writer = resp.getWriter();//响应流 17. writer.println("Hello,Servlet"); 18. } 19. 20. @Override 21. protected void doPost(HttpServletRequest req,HttpServletResponse resp) throws ServletException,IOException{ 22. super.doPost(req,resp); 23. } 24. }
4、编写Servlet的映射
为什么需要映射?
我们写的是Java程序,但是要通过浏览器访问,而浏览器需要连接web服务器,所以我们需要在web服务中,注册我们写的Servlet,还需一个浏览器能够访问
1. <!--注册Servlet--> 2. <servlet> 3. <servlet-name>hello</servlet-name> 4. <servlet-class>com.wangsiqi.servlet.HelloServlet</servlet-class> 5. </servlet> 6. <!--Servlet的请求路径--> 7. <servlet-mapping> 8. <servlet-name>hello</servlet-name> 9. <url-pattern>/hello</url-pattern> 10. </servlet-mapping>
5、配置Tomcat
注意:项目启动的路径
Servlet原理
Servlet是由Web服务器调用,web服务器在收到浏览器请求之后,会:
Mapping问题
可以自定义后缀实现请求映射
PS:*前面不能加项目映射的路径
1、一个Servlet可以指定一个映射路径
1. <servlet-mapping> 2. <servlet-name>hello</servlet-name> 3. <url-pattern>/hello</url-pattern> 4. </servlet-mapping>
2、一个Servlet可以指定多个映射路径
1. <servlet-mapping> 2. <servlet-name>hello</servlet-name> 3. <url-pattern>/hello</url-pattern> 4. </servlet-mapping> 5. <servlet-mapping> 6. <servlet-name>hello</servlet-name> 7. <url-pattern>/hello2</url-pattern> 8. </servlet-mapping> 9. <servlet-mapping> 10. <servlet-name>hello</servlet-name> 11. <url-pattern>/hello3</url-pattern> 12. </servlet-mapping> 13. <servlet-mapping> 14. <servlet-name>hello</servlet-name> 15. <url-pattern>/hello4</url-pattern> 16. </servlet-mapping>
3、一个Servlet可以指定通用映射路径
1. <servlet-mapping> 2. <servlet-name>hello</servlet-name> 3. <url-pattern>/hello/*</url-pattern> 4. </servlet-mapping>
4、默认请求路径
1. <servlet-mapping> 2. <servlet-name>hello</servlet-name> 3. <url-pattern>/*</url-pattern> 4. </servlet-mapping>
5、指定一些后缀或者前缀等等......
1. <servlet-mapping> 2. <servlet-name>hello</servlet-name> 3. <url-pattern>*.com</url-pattern> 4. </servlet-mapping>
6、优先级 问题
指定了固有的映射路径优先级最高,如果找不到就会走默认的处理请求:
1. <!--404--> 2. <!--注册Servlet--> 3. <servlet> 4. <servlet-name>error</servlet-name> 5. <servlet-class>com.wangsiqi.servlet.HelloServlet</servlet-class> 6. </servlet> 7. <!--Servlet的请求路径--> 8. <servlet-mapping> 9. <servlet-name>error</servlet-name> 10. <url-pattern>/*</url-pattern> 11. </servlet-mapping>
ServlertContext
web容器在启动的时候,它会为每个web程序都创建一个对应的ServletContext对象,它代表了当前的web应用。