Servlet&HTTP&Request8_Servlet1
1、Servlet的体系结构
Servlet -- 接口
Servlet接口的实现类:GenericServlet -- 抽象类,HttpServlet -- 抽象类(继承GenericServlet )
- GenericServlet:将Servlet接口中其他的方法做了默认空实现,只将service()方法作为抽象
- 将来定义Servlet类时,可以继承GenericServlet,实现service()方法即可。
- HttpServlet:对http协议的一种封装,简化操作。推荐使用HttpServlet实现。步骤如下:
- 定义类继承HttpServlet
- 复写doGet/doPost方法

示例1:之前学习的方法
package cn.itcast.web.servlet; import javax.servlet.*; import javax.servlet.annotation.WebServlet; import java.io.IOException; @WebServlet("/demo1") public class ServletDemo1 implements Servlet { @Override public void init(ServletConfig servletConfig) throws ServletException { } @Override public ServletConfig getServletConfig() { return null; } @Override public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException { System.out.println("demo1..."); } @Override public String getServletInfo() { return null; } @Override public void destroy() { } }
示例2:
package cn.itcast.web.servlet; import javax.servlet.GenericServlet; import javax.servlet.ServletException; import javax.servlet.ServletRequest; import javax.servlet.ServletResponse; import javax.servlet.annotation.WebServlet; import java.io.IOException; @WebServlet("/demo2") public class ServletDemo2 extends GenericServlet { @Override public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException { System.out.println("demo2..."); } }
把tomcat端口号改为80,浏览器访问http://localhost/demo2,则输出demo2...
示例3:
package cn.itcast.web.servlet; import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.IOException; @WebServlet("/demo3") public class ServletDemo3 extends HttpServlet { @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { // super.doGet(req, resp); System.out.println("doGet..."); } @Override protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { // super.doPost(req, resp); System.out.println("doPost..."); } }
浏览器访问http://localhost/demo3,则输出:doGet...。因为默认使用get方法提交。
web目录下新建一个login.html文件:

<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> </head> <body> <form action="/demo3" method="post"> <input name="username"> <input type="submit" value="提交"> </form> </body> </html>
浏览器访问http://localhost/login.html,在输入框中输入aaa,点击“提交”按钮,则idea控制台输出:doPost...。
2、Servlet相关配置
1. urlpattern:Servlet访问路径
a. 一个Sevlet可以定义多个访问路径:@WebServlet({"/demo4","/dd","/ddd"})
b. 路径定义规则:
i. /xxx:路径匹配
ii. /xxx/xxx:多层路径,目录结构
iii. *.do:扩展名匹配,do可以替换为任意字母
示例1:
package cn.itcast.web.servlet; import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.IOException; @WebServlet({"/demo4","/dd","/ddd"}) public class ServletDemo4 extends HttpServlet { @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { // super.doGet(req, resp); System.out.println("demo4..."); } }
浏览器访问http://localhost/demo4、http://localhost/dd、http://localhost/ddd,idea控制台都会输出:demo4...。
示例2:
package cn.itcast.web.servlet; import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.IOException; @WebServlet("/user/demo4") public class ServletDemo4 extends HttpServlet { @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { System.out.println("demo4..."); } }
浏览器访问http://localhost/user/demo4,idea控制台输出demo4...。访问http://localhost/demo4则会报错。
示例3:
package cn.itcast.web.servlet; import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.IOException; @WebServlet("/user/*") public class ServletDemo4 extends HttpServlet { @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { // super.doGet(req, resp); System.out.println("demo4..."); } }
浏览器访问http://localhost/user/aaa,则会输出demo4,*表示不管访问/user/的任意路径都能输出demo4...
package cn.itcast.web.servlet; import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.IOException; @WebServlet("/*") public class ServletDemo4 extends HttpServlet { @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { System.out.println("demo4..."); } }
浏览器访问http://localhost/dddd,则输出demo4,但是访问http://localhost/demo3,则会输出doGet...。
示例4:
package cn.itcast.web.servlet; import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.IOException; @WebServlet("*.do") public class ServletDemo4 extends HttpServlet { @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { // super.doGet(req, resp); System.out.println("demo4..."); } }
浏览器访问http://localhost/aaa.do,则idea控制台会输出demo4...。访问http://localhost/aaa会报错。
浙公网安备 33010602011771号