Servlet学习笔记1——通过看效果入门

前言:对于web开发,servlet的学习是必不可少的,笔者也是新手,刚接触到servlet觉得很抽象模糊,遂写下学习笔记以便日后回顾。——L.L

=================================分割线==================================

个人建议一开始学习servlet不要去看它的源码究其根本,而是要先学会使用,目睹servlet的工作成果会激起学习兴趣,为深入做铺垫,下面从使用角度来为servlet做介绍:

1.新建一个web project(笔者使用的IDE是MyEclipse 2015):File -- New -- Web Project

 

1)输入项目名(这里起MyServlet)

2)Java EE version与Java version最好一致(如Java EE 5对应Java1.5)

3)Target runtime理解为该项目运行的环境,又可理解为项目运行的web容器,这里先不做选择,下一步

4)勾选上生成web.xml的复选框,web.xml是servlet的配置文件,完成

 

2.工作目录

建立好项目后,左图便是我们的工作目录了

1)后缀为“Library”的是该项目所引用的包

2)我们关注的最多的是src和WebRoot,其中src中存放java代码文件,WebRoot则存放包括配置文件的各种资源,所需要引用的包(.jar文件)存放在WebRoot / WEB-INF / lib下

3)本篇我们使用index.jsp。index.jsp是新建项目自带的jsp文件,这个行为我们可以通过设置修改,这不是本篇的重点

 

3.编写代码

1)新建servlet,创建servlet有两种方式:

  a).新建一个class(取名MyServlet1),使MyServlet1继承javax.servlet.http.HttpServlet,我们称其为“手动创建”

  

  重写doGet方法打印“servlet1执行成功”

 1 import java.io.IOException;
 2 
 3 import javax.servlet.ServletException;
 4 import javax.servlet.http.HttpServlet;
 5 import javax.servlet.http.HttpServletRequest;
 6 import javax.servlet.http.HttpServletResponse;
 7 
 8 public class MyServlet1 extends HttpServlet {
 9     @Override
10     protected void doGet(HttpServletRequest req, HttpServletResponse resp)
11             throws ServletException, IOException {
12         System.out.println("servlet1执行成功");
13     }
14 }

  

  b).直接新建一个servlet(取名MyServlet2),可以看到IDE自动让MyServlet2继承了HttpServlet,我们称其为“自动创建”。下面的复选框我们只勾选doGet()

  

  点击下一步,留意Servlet/JSP Mapping URL为/servlet/MyServlet2,这里我们立个flag先不管是什么意思,点击完成

  

   可以看到,因为我们勾选了doGet(),MyServlet2.class会自动生成doGet()。修改它:

 

 1 import java.io.IOException;
 2 import java.io.PrintWriter;
 3 
 4 import javax.servlet.ServletException;
 5 import javax.servlet.http.HttpServlet;
 6 import javax.servlet.http.HttpServletRequest;
 7 import javax.servlet.http.HttpServletResponse;
 8 
 9 
10 public class MyServlet2 extends HttpServlet {
11 
12     /**
13      * The doGet method of the servlet. <br>
14      *
15      * This method is called when a form has its tag value method equals to get.
16      * 
17      * @param request the request send by the client to the server
18      * @param response the response send by the server to the client
19      * @throws ServletException if an error occurred
20      * @throws IOException if an error occurred
21      */
22     public void doGet(HttpServletRequest request, HttpServletResponse response)
23             throws ServletException, IOException {
24         System.out.println("servlet2执行成功");
25     }
26 
27 }

 

  至此servlet创建完毕,让我们将关注点移至web.xml

 

2)解读配置文件web.xml:

  a).从创建项目开始,除了一开始勾选了生成web.xml文件的复选框,一直没有编辑过web.xml,那它为什么会有这么多内容呢?

  b).每一个<servlet>对应一个<servlet-mapping>。

  c).<servlet>中的<servlet-name>与<servlet-mapping>中的<servlet-name>一定要相同。

  以上解读颇为浅显,只要知道是这么回事就可以,后文在项目运行后会较深入解读并解释abc

 

3)修改index.jsp:添加两个超链接,点击第一个超链接将在控制台打印“servlet1执行成功”,点击第二个超链接则会报错

 1 <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
 2 <%
 3 String path = request.getContextPath();
 4 String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
 5 %>
 6 
 7 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
 8 <html>
 9   <head>
10     <base href="<%=basePath%>">
11     
12     <title>My JSP 'index.jsp' starting page</title>
13     <meta http-equiv="pragma" content="no-cache">
14     <meta http-equiv="cache-control" content="no-cache">
15     <meta http-equiv="expires" content="0">    
16     <meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
17     <meta http-equiv="description" content="This is my page">
18     <!--
19     <link rel="stylesheet" type="text/css" href="styles.css">
20     -->
21   </head>
22   
23   <body>
24     <a href="MyServlet1">点击在控制台打印servlet1执行成功</a>
25     <a href="MyServlet2">点击报错</a>
26   </body>
27 </html>

 

4.运行项目

0)(若已配置好Tomcat服务器则跳过此步)新增配置Tomcat服务器

  配置的前提是自己的机器上安装了Tomcat,安装Tomcat的教学不在本篇范围内哈,笔者安装的是Tomcat 8版本

  

    (1)点击运行环境管理

    (2)点击添加(这一步指将项目放到哪里运行)

    (3)这里有两个选择,使用MyEclipse自带的Tomcat服务器或是自定义的Tomcat服务器,个人建议后者

    (4)前面提到笔者安装了Tomcat8.0,所以选择对应的

    (5)如果之后的项目都想部署到这个服务器上的话,勾选上

    (6)下一步

  

至此我们会在Servers窗口看到自定义的服务器和部署到上面的MyServlet项目

  

1)运行

点击右上侧的绿底三角开启服务器,点击工具栏的“小地球”打开MyEclipse自带浏览器,输入http://localhost:8080/MyServlet/确定,出现下图表示项目运行成功,显示的确实是我们的index.jsp页面

  

 点击第一个超链接,可以看到地址栏的url后添加了MyServlet1,控制台也输出“servlet1执行成功”字样,说明我们的MyServlet1.class执行了

  

回到上一步,再点击第二个超链接会发现,地址栏改变了,但页面报404的错误(表示找不到请求的页面),控制台也没有任何新的输出

  

至此,运行操作完毕,接下来略深入地了解运行的个中原理

 

5.servlet的工作原理

  首先我们从可视的页面开始,即index.jsp

  

  第一个超链接的href属性值为MyServlet1,由于这不是个地址(如果是个地址如http://www.baidu.com,点击后会直接跳转到百度首页)当点击该超链接时,地址栏显示的“http://localhost:8080/MyServlet/MyServlet1”就是跳转过去的地方,后缀就是“/MyServlet1”,程序则会跑到配置文件,即web.xml中寻找一个url为MyServlet1的servlet-mapping。

  

  1)通过对比url与<url-pattern>找到对应的<servlet-name>;

  2)通过找到的<url-pattern>对应的<servlet-name>找同名的<servlet-name>;

  3)根据找到的<servlet-name>访问对应的<servlet-class>。

  第一个超链接提供的url是http://localhost:8080/MyServlet/MyServlet1,末尾的/MyServlet1与web.xml中的有所匹配,所以程序往下走,而第二个超链接提供的url是http://localhost:8080/MyServlet/MyServlet2,在web.xml中没有url-pattern为/MyServlet2的,只有为/servlet/MyServlet2的,所以程序走不下去,只能报错,回到上文的3.1.b,我们立了个flag,当中的Servlet/JSP Mapping URL就是这里的<url-pattern>,当我们手动在地址栏输入http://localhost:8080/MyServlet/servlet/MyServlet2时,便会看到我们想看到的

  

 

   通过上面的解释,也就回答了上文的3.2的a、b问题:如果<servlet>和<servlet-mapping>的<servlet-name>不一致,那就找不到,报错;如果一个<servlet>对应多个<servlet-mapping>(或者反过来),那程序执行时哪里知道匹配哪一对呢?(实际上当不是一对一时,IDE会飘红报错)。而问题a的解答是:不建议新手一开始就深究,先自动生成吧

=================================分割线==================================

本篇是笔者写的第一篇博文,内容是写一个最简单的servlet项目。不确定内容没有差错,恳请读者指出不当之处,表述也不敢说绝对清晰,但可以保证没有直接从网络上ctrl+c。作为学习servlet的第一篇笔记,文中没有过多涉及到底层原理的知识,只记录了servlet最简单的一个用例,仅供入门参考。  ——L.L

posted @ 2018-03-18 16:57  咩阿  阅读(278)  评论(0编辑  收藏  举报