Servlet入门

    xiaoxiao2022-07-13  207

    什么是Servlet

    Servlet定义:运行在服务器中的Java程序。 Servlet的作用: 1.接收请求数据 2.处理请求数据 3.给浏览器响应数据 总结:客户端向服务器发送请求,由Servlet进行数据业务逻辑的处理,将处理的结果,响应给客户端。

    实现Servlet

    Servlet实现:

    1.编写一个普通Java类,实现Servlet接口,重写所有抽象方法。 2.在service方法中书写代码处理业务。 3.在web.xml中配置Servlet: 第一步:配置Java类的信息; 第二步:配置这个Java类的映射信息; 4.启动tomcat,通过映射路径访问这个Servlet。

    Servlet的执行流程分析

    步骤:

    1.tomcat启动时会将web.xml文件加载到tomcat内存中; 2.浏览器访问服务器中的servlet资源时,会根据资源路径去web.xml中匹配路径; 3.当浏览器地址栏中地址的资源路径匹配到web.xml中的映射路径(url-pattern),会通过配置访问到对应的Servlet类; 4.Servlet类中的service方法会处理浏览器发送的请求; 5.service方法中的response对象会给浏览器相应数据;

    Servlet生命周期

    1.Servlet对象创建: 由谁创建:tomcat创建; 何时创建:Servlet第一次被访问的时候; 创建次数:Servlet对象只在第一次被访问的时候创建,随后都不会被再次创建;(也就是说整个tomcat运行期间,每个Servlet对象只有一个) 创建成功后:会调用init方法; 2.Servlet程序工作:接收请求数据,处理数据,响应数据 如何工作:service方法被设计用来接收用户请求的数据,处理数据和响应数据; service方法何时被调用:只要访问到了这个Servlet,这个Servlet的service方法都会被调用; 3.Servlet对象销毁: 何时销毁:tomcat关闭前被销毁; 销毁特点:Servlet对象销毁前会调用destory方法;

    Servlet立即加载

    1.Servlet立即加载的应用场景: 在tomcat启动之后立即加载Servlet。 2.Servlet立即加载的配置方式: 在web.xml中,找到需要立即加载的Servlet。在映射文件中添加一行:<load-on-startup>number</load-on-startup>。 3.<load-on-startup>number</load-on-startup>中number的取值: number取值小于0或不配置:被访问时才去加载; number取值为0时:最先被加载; number取值大于0时:数值越小Servlet越优先加载;

    Servlet优化小结

    1. GenericServlet优化

    步骤:

    第一步:创建一个普通的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类中的通用方法。功能更加强大了。

    HttpServlet优化一

    步骤:

    第一步:创建一个普通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优化二

    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优先调用;

    Servlet优化小结

    步骤 小结:

    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映射路径配置规范

    实现: 第一步:解释说明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、开发中常用:全路径匹配。

    Servlet3.0注解开发

    1、Servlet3.0注解开发小结: 第一步:创建一个普通类继承HttpServlet,重写doGet和doPost方法; 第二步:在类上面添加注解 @WebServlet; 第三步:配置注解@WebServlet的值(映射路径); 2、@WebServlet注解配置简介: 【1】简单配置:@WebServlet("/annDemoServlet") 注解的默认值为value值,就等价于web.xml中<url-pattern>/annDemoServlet</url-pattern>; 【2】其他配置:@WebServlet(name = "AnnDemoServlet",urlPatterns = "/annDemoServlet") 其中的 name属性值等价于web.xml中<servlet-name>AnnDemoServlet</servlet-name>的值 urlPatterns的属性值等价于web.xml中<url-pattern>/annDemoServlet</url-pattern>的值 3、注意事项:web.xml配置方式和注解只能使用一种,以后统一使用注解开发。

    最新回复(0)