Servlet 入门介绍(学Servlet必看) 爱被打了一巴掌 2022-10-06 11:45 185阅读 0赞 ### 文章目录 ### * * 1.1 Servlet概述 * 1.2 Servlet入门 * * 1.2.1 Servlet编写步骤 * * 1.2.1.1 编码步骤 * 1.2.1.2 测试 * 1.2.2 Servlet执行过程分析 * 1.2.3 Servlet类视图 * 1.2.4 Servlet编写方式 * * 1.2.4.1 编写方式说明(※) * 1.2.4.2 HttpServlet的使用细节 ## 1.1 Servlet概述 ## Servlet是SUN公司提供的一套规范,名称就叫Servlet规范,它也是JavaEE规范之一。我们可以像学习Java基础一样,通过API来学习Servlet。这里需要注意的是,在我们之前JDK的API中是没有Servlet规范的相关内容,需要使用JavaEE的API。目前在Oracle官网中的最新版本是[JavaEE8][],该网址中介绍了JavaEE8的一些新特性。当然,我们可以通过访问[官方API][API],学习和查阅里面的内容。 打开官方API网址,在左上部分找到javax.servlet包,在左下部分找到Servlet,如下图显示: ![在这里插入图片描述][watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80NTUyNTI3Mg_size_16_color_FFFFFF_t_70] 通过阅读API,我们得到如下信息: 第一:Servlet是一个运行在web服务端的java小程序 第二:它可以用于接收和响应客户端的请求 第三:要想实现Servlet功能,可以实现Servlet接口,继承GenericServlet或者HttpServlet 第四:每次请求都会执行service方法 第五:Servlet还支持配置 具体请看下图: ![在这里插入图片描述][watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80NTUyNTI3Mg_size_16_color_FFFFFF_t_70 1] ## 1.2 Servlet入门 ## ### 1.2.1 Servlet编写步骤 ### #### 1.2.1.1 编码步骤 #### * 第一步:前期准备-创建JavaWeb工程 * 第二步:编写一个普通类继承GenericServlet并重写service方法 * 第三步:在web.xml配置Servlet #### 1.2.1.2 测试 #### **在Tomcat中部署项目**,**然后在浏览器访问Servlet** 出现下面这就成功了。 ![在这里插入图片描述][watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80NTUyNTI3Mg_size_16_color_FFFFFF_t_70 2] ### 1.2.2 Servlet执行过程分析 ### 我们通过浏览器发送请求,请求首先到达Tomcat服务器,由服务器解析请求URL,然后在部署的应用列表中找到我们的应用。接下来,在我们的应用中找应用里的web.xml配置文件,在web.xml中找到FirstServlet的配置,找到后执行service方法,最后由FirstServlet响应客户浏览器。整个过程如下图所示: ![在这里插入图片描述][watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80NTUyNTI3Mg_size_16_color_FFFFFF_t_70 3] 一句话总结执行过程: 浏览器——>Tomcat服务器——>我们的应用——>应用中的web.xml——>FirstServlet——>响应浏览器 我们可以看到,在编译器里的部分只是后面web.xml到Servlet的部分。 ![在这里插入图片描述][watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80NTUyNTI3Mg_size_16_color_FFFFFF_t_70 4] ### 1.2.3 Servlet类视图 ### 在《Tomcat和Http协议》这天课程和刚才的入门案例中,我们都定义了自己的Servlet,实现的方式都是选择继承GenericServlet,在Servlet的API介绍中,它提出了我们除了继承GenericServlet外还可以继承HttpServlet,通过查阅servlet的类视图,我们看到GenericServlet还有一个子类HttpServlet。同时,在service方法中还有参数ServletRequest和ServletResponse,它们的关系如下图所示: ![打][watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80NTUyNTI3Mg_size_16_color_FFFFFF_t_70 5] ### 1.2.4 Servlet编写方式 ### #### 1.2.4.1 编写方式说明(※) #### [https://yangyongli.blog.csdn.net/article/details/117871787][https_yangyongli.blog.csdn.net_article_details_117871787] #### 1.2.4.2 HttpServlet的使用细节 #### **第一步:在入门案例的工程中创建一个Servlet继承HttpServlet** 注意:不要重写任何方法,如下图所示: ![在这里插入图片描述][watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80NTUyNTI3Mg_size_16_color_FFFFFF_t_70 6] **第二步:部署项目并测试访问** 当我们在地址栏输入ServletDemo2的访问URL时,出现了访问错误,状态码是405。提示信息是:方法不允许。 **第三步:分析原因** 得出HttpServlet的使用结论: **我们继承了HttpServlet,需要重写里面的doGet和doPost方法来接收get方式和post方式的请求。** 为了实现代码的可重用性,我们只需要在doGet或者doPost方法中一个里面提供具体功能即可,而另外的那个方法只需要调用提供了功能的方法。 [JavaEE8]: https://www.oracle.com/technetwork/java/javaee/documentation/ee8-release-notes-3894362.html [API]: https://javaee.github.io/javaee-spec/javadocs/ [watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80NTUyNTI3Mg_size_16_color_FFFFFF_t_70]: /images/20221005/0ac4bc5e99f14a17b426c302e963de2f.png [watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80NTUyNTI3Mg_size_16_color_FFFFFF_t_70 1]: /images/20221005/c79f0128895949a997731bccc03fced7.png [watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80NTUyNTI3Mg_size_16_color_FFFFFF_t_70 2]: /images/20221005/e6f21d9f21a44ea38ac026fcdb08a339.png [watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80NTUyNTI3Mg_size_16_color_FFFFFF_t_70 3]: /images/20221005/680a7087fd7047399ea6ff5ee6e4b83e.png [watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80NTUyNTI3Mg_size_16_color_FFFFFF_t_70 4]: /images/20221005/716cc6943b7a492b92875b658def7785.png [watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80NTUyNTI3Mg_size_16_color_FFFFFF_t_70 5]: /images/20221005/3949da414750421582d8c74410805f03.png [https_yangyongli.blog.csdn.net_article_details_117871787]: https://yangyongli.blog.csdn.net/article/details/117871787 [watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80NTUyNTI3Mg_size_16_color_FFFFFF_t_70 6]: /images/20221005/4fbdcd4ee3274fc4b31c5e1be5e62c8f.png
还没有评论,来说两句吧...