1.实现Servlet接口的子类
我们所写的子类,最重要的就是重写service这个方法。
void service(ServletRequest var1, ServletResponse var2) throws ServletException, IOException;
第一个参数ServletRequest代表的是浏览器向web容器(web服务器)发来的请求,然后我们所写的子类对该请求进行处理,再通过第二个参数ServletResponse再响应浏览器(例如输出文字,图片等)。
2. Servlet mapping
在上一个博客,我们配置了web.xml文件
<servlet> <servlet-name>hello</servlet-name> <servlet-class>com.study.servlet.HelloServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>hello</servlet-name> <url-pattern>/hello</url-pattern> </servlet-mapping>
这段XML代码是一个Servlet的配置,首先定义了一个名为"hello"的Servlet,它的类是"com.study.servlet.HelloServlet"。
接着定义了一个Servlet映射,将Servlet "hello" 映射到URL模式"/hello"。这样,当用户在浏览器中输入"http://localhost:8080/hello"时,Web服务器就会将请求传递给名为"hello"的Servlet进行处理。
Servlet映射有多种模式:
1)一个Servlet可以指定多个映射模式
<servlet> <servlet-name>hello</servlet-name> <servlet-class>com.study.servlet.HelloServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>hello</servlet-name> <url-pattern>/hello</url-pattern> </servlet-mapping> <servlet-mapping> <servlet-name>hello</servlet-name> <url-pattern>/hello2</url-pattern> </servlet-mapping> <servlet-mapping> <servlet-name>hello</servlet-name> <url-pattern>/hello3</url-pattern> </servlet-mapping>
2)一个Servlet可以指定通用映射路径
http://localhost:8080/net/ + 任何值 都会映射到hello这个Servlet
<servlet> <servlet-name>hello</servlet-name> <servlet-class>com.study.servlet.HelloServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>hello</servlet-name> <url-pattern>/net/*</url-pattern> </servlet-mapping>
3)一个Servlet可以指定默认请求路径,会覆盖掉主页
<servlet> <servlet-name>hello</servlet-name> <servlet-class>com.study.servlet.HelloServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>hello</servlet-name> <url-pattern>/*</url-pattern> </servlet-mapping>
4)映射可以指定前缀或后缀
*前不能加映射路径:/*.do 会报错
<servlet> <servlet-name>hello</servlet-name> <servlet-class>com.study.servlet.HelloServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>hello</servlet-name> <url-pattern>*.do</url-pattern> </servlet-mapping>
因为一个Servlet可以指定多个映射模式,所以这些映射是有优先级的:
固有路径的映射优先级最高,找不到固有路径映射才会去找通用映射路径。