Servlet实现:
1.编写一个普通Java类,实现Servlet接口,重写所有抽象方法。 2.在service方法中书写代码处理业务。 3.在web.xml中配置Servlet: 第一步:配置Java类的信息; 第二步:配置这个Java类的映射信息; 4.启动tomcat,通过映射路径访问这个Servlet。步骤:
1.tomcat启动时会将web.xml文件加载到tomcat内存中; 2.浏览器访问服务器中的servlet资源时,会根据资源路径去web.xml中匹配路径; 3.当浏览器地址栏中地址的资源路径匹配到web.xml中的映射路径(url-pattern),会通过配置访问到对应的Servlet类; 4.Servlet类中的service方法会处理浏览器发送的请求; 5.service方法中的response对象会给浏览器相应数据;步骤:
第一步:创建一个普通的Java类,继承GenericServlet,重写service方法; 第二步:在service方法中打印输出"Hello GenericServlet"; 第三步:在web.xml中配置Servlet;小结:
1、为什么继承GenericServlet后,重写service方法就可以接受客户端的请求? 因为GenericServlet类实现了Servlet接口。我们继承了GenericServlet就相当于间接实现了Servlet接口,同时还能够使用GenericServlet类中的方法; 2、为什么继承GenericServlet方法后需要重写service方法; 【1】GenericServlet类是抽象类,其中只有一个抽象方法service,继承抽象类后必须重写抽象方法; 【2】service方法是Servlet中接收请求数据,处理数据,响应数据的方法,我们必须重写service方法,在 其中完成我们的业务逻辑。 3、继承GenericServlet与直接实现Servlet接口完成Servlet编程相比,有什么好处? 【1】继承GenericServlet后,只需要重写service方法,完成具体的业务功能,减少代码冗余; 【2】GenericServlet类中不仅重写了Servlet接口中的方法,还提供了一些通用的方法。继承GenericServlet后不仅可以使用Servlet接口中的方法,还能够直接使用GenericServlet类中的通用方法。功能更加强大了。步骤:
第一步:创建一个普通Java类HttpDemoServlet,继承HttpServlet; 第二步:重写service方法,并在service方法中打印输出"Hello HttpDemoServlet!"; 第三步:在web.xml中配置HttpDemoServlet;实现: 第一步:创建一个普通Java类HttpDemoServlet,继承HttpServlet,重写service方法;
public class HttpDemoServlet extends HttpServlet { @Override protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { super.service(req, resp); } }第二步:在service方法中打印输出"Hello HttpDemoServlet";
public class HttpDemoServlet extends HttpServlet { @Override protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { System.out.println("Hello HttpDemoServlet!"); } }第三步:在web.xml中配置HttpDemoServlet;
<servlet> <servlet-name>HttpDemoServlet</servlet-name> <servlet-class>com.heima.servlet.HttpDemoServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>HttpDemoServlet</servlet-name> <url-pattern>/httpDemoServlet</url-pattern> </servlet-mapping>小结:
1、为什么要继承HttpServlet? 【1】HttpServlet继承了GenericServlet,我们直接继承HttpServlet后能够使用的方法更多; 【2】HttpServlet的service方法中给我们提供了HttpServletRequest和HttpServletRespone对象,这两个对象给我们提供了很多与HTTO协议相关的API,便于在开发时处理HTTP协议的请求与响应; 2、HttpServlet优化Servlet编程的开发步骤: 【1】编写一个普通Java类,继承HttpServlet; 【2】重写service方法,处理请求与响应;HttpServlet类也是一个抽象类,为什么没有像GenericServlet一样,将service方法设计成抽象方法供用户扩展呢?
1、HttpServlet中的service方法统一接收所有的客户端发送的HTTP请求; 2、HTTP请求又可分为:GET,POST等请求,service方法在接收到请求后根据不同的请求方式,调用对应的方法来处理请求,如:doGet处理的是get请求,doPost处理的是post请求; 3、开发人员根据客户端发送的不同请求方式,重写不同的方法来处理请求即可;实现: 第一步:书写一个普通的Java类FormServlet,继承HttpServlet;
public class FormServlet extends HttpServlet { @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { super.doGet(req, resp); } @Override protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { super.doPost(req,resp); } }第二步:重写doGet和doPost方法,并在doGet方法中打印"Hello Get Method!",在doPost方法中打印"Helllo Post Method!";
@Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { System.out.println("Hello Get Method!"); } @Override protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { System.out.println("Hello Post Method!"); }第三步:在web.xml中配置FormServlet;
<servlet> <servlet-name>FormServlet</servlet-name> <servlet-class>com.heima.servlet.FormServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>FormServlet</servlet-name> <url-pattern>/formServlet</url-pattern> </servlet-mapping>第四步:启动tomcat,使用HttpDemo2Servlet的映射路径,分别以get和post方式访问HttpDemo2Servlet;
使用以下表单访问HttpDemo2Servlet;
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>httpservlet请求</title> </head> <body> <h2>get请求</h2> <form action="/formServlet" method="get"> <input type="submit" value="提交get请求"> </form> <h2>post请求</h2> <form action="/formServlet" method="post"> <input type="submit" value="提交post请求"> </form> </body> </html>小结:
1、HttpServlet最终优化方案: 继承HttpServlet,重写doGet方法处理get请求,重写doPost方法处理post请求; 2、请求是怎么到达doGet和doPost的? 【1】请求会首先到达HttpServlet的service方法; 【2】HttpServlet中的service方法根据请求方式的不同,调用不同的方法(doGet,doPost)方法来处理; 【3】我们继承HttpServlet后重写的doGet和doPost方法,会被HttpServlet优先调用;步骤 小结:
1. Servlet的作用:接收浏览器的请求,处理请求数据,给浏览器响应数据; 2. Servlet接口: 1. Sun公司规定如果想要在服务端接收和响应客户端的数据,必须实现Servlet接口; 2. 由于Servlet是一个接口,实现Servlet接口后必须重写其中所有的方法; 3. GenericServlet: 1. GenericServlet:是一个抽象类,它实现了Servlet接口,与协议无关; 2. 继承GenericServlet,只需要重写service方法即可接收和响应数据; 4. HttpServlet: 1. HttpServlet:是一个抽象类,它继承了GenericServlet,为HTTP请求定制的; 2. 继承HttpServlet,重写doGet和doPost方法,能够更加方便地处理不同请求的数据;实现: 第一步:解释说明Servlet映射路径的作用
映射路径的作用:在web.xml中标识Servlet。可在浏览器中通过映射路径访问到指定的Servlet。第二步:解释说明Servlet映射路径的配置规范
1. 完全匹配 /user/hello 资源路径为/user/hello时可以访问 2. 目录匹配 /user/* 资源路径中含有/user目录均可访问 3. 后缀名匹配 *.do 资源路径中以.do结尾的均可访问 4. 缺省路径 / 访问的路径找不到,就会去找缺省路径第三步:创建Servlet,配置不同的映射路径进行演示
【1】创建HelloServlet继承HttpServlet,重写doGet方法和doPost方法;
public class UserServlet extends HttpServlet { @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { System.out.println("请求进来了..............."); } @Override protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { } }【2】在web.xml中分别给UserServlet做如下配置:
<!-- Servlet映射路径配置规范: 1. 完全匹配 /user/login 资源路径为/user/login时可以访问 2. 目录匹配 /user/* 资源路径中含有/user目录均可访问 3. 后缀名匹配 *.do 资源路径中以.do结尾的均可访问 4. 缺省路径 / 访问的路径找不到,就会去找缺省路径 --> <servlet> <servlet-name>UserServlet</servlet-name> <servlet-class>com.heima.servlet.UserServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>UserServlet</servlet-name> <!--1、完全匹配:--> <url-pattern>/user/login</url-pattern> <!--2、目录匹配:--> <url-pattern>/user/*</url-pattern> <!--3、后缀名匹配:--> <url-pattern>*.do</url-pattern> <!--4、缺省路径--> <url-pattern>/</url-pattern> </servlet-mapping>【3】分别用不同的映射路径访问Servlet;
小结:
1、4种映射路径的配置方式: 【1】完全匹配: /user/login 【2】目录匹配: /user/* 【3】后缀名匹配:*.do 【4】缺省路径: / 2、缺省路径相关: 【1】缺省路径不是我们自己配置的,tomcat的web.xml中有个默认配置; 【2】缺省路径的作用:访问静态资源 URL输入http://localhost:8080/ 如何读取文件? 1)到当前day10应用下的web.xml文件查找是否有匹配的url-pattern。 2)如果没有匹配的url-pattern,则交给tomcat的内置的DefaultServlet处理。 3)DefaultServlet程序到day10应用的根目录下查找是否存在一个名称为index.html的静态文件。 4)如果找到该文件,则读取该文件内容,返回给浏览器。 5)如果找不到该文件,则返回404错误页面。 3、开发中常用:全路径匹配。