以下代码均非IDE开发,所以都不规范,仅供参考

模拟Servlet本质:

  模拟Servlet接口:


1 /*
 2     SUN公司制定的JavaEE规范:Servlet规范
 3     Servlet接口是Servlet规范中核心接口
 4     接口注意:调用者谁?实现者谁?
 5 */
 6 
 7 public interface Servlet //服务器端小java程序不能随意编写,必须实现Servlet接口
 8 {
 9     /*
10         服务器端的小java程序必须将service方法实现
11     */
12     void service();
13 }



  服务器端小java程序(即Servlet接口的实现类):



1 /*
2     JavaWeb程序员编写服务器端小java程序的时候,不能随意编写,必须实现Servlert接口
3 */
4 public class LoginServlet implements Servlet
5 {
6     public void service(){
7         System.out.println("连接数据库,正在验证用户名和密码。。。。");
8     }
9 }



1 /*
2     JavaWeb程序员编写服务器端小java程序的时候,不能随意编写,必须实现Servlert接口
3 */
4 public class SaveServlet implements Servlet
5 {
6     public void service(){
7         System.out.println("连接数据库,正在保存数据请稍后。。。。");
8     }
9 }



1 /*
2     JavaWeb程序员编写服务器端小java程序的时候,不能随意编写,必须实现Servlert接口
3 */
4 public class DeleteServlet implements Servlet
5 {
6     public void service(){
7         System.out.println("连接数据库,正在删除数据请稍后。。。。");
8     }
9 }



  模拟Tomcat容器:



1 /*
 2     Tomcat
 3         WebServer
 4         Web服务器
 5         Web Container
 6         Web 容器
 7 
 8     Web容器面向Servlert接口调用
 9 */
10 import java.util.Scanner;
11 import java.util.Properties;
12 import java.io.FileReader;
13 
14 public class Tomcat{
15     public static void main(String[] args) throws Exception{
16         Scanner s = new Scanner(System.in);
17         System.out.println("服务器启动成功");
18 
19         while(true){
20             System.out.print("请打开浏览器,在浏览器地址栏上请输入请求路径:");
21             //程序执行到这里,等待用户输入
22             String requestPath = s.next();
23             //System.out.println("您访问的资源路径是:" + requestPath);
24         
25             //Tomcat读取web.xml文件
26             FileReader reader = new FileReader("web.xml");
27             Properties pro = new Properties();
28             pro.load(reader);
29             reader.close();
30 
31             //通过key获取value
32             String servletClassName = pro.getProperty(requestPath);
33 
34             //通过反射机制创建对象
35             Class c = Class.forName(servletClassName);
36             Servlet servlet = (Servlet)c.newInstance();
37 
38             //面向Servlet接口调用方法即可
39             servlet.service();
40         }
41     }
42 }



  模拟web.xml:



1 /login=LoginServlet
2 /delete=DeleteServlet
3 /save=SaveServlet



总结:Tomcat容器根据web.xml配置文件,调用Servlet接口的方法,自己编写的服务器小程序则具体实现Servlet接口的方法。

 

第一个Servlet程序:

  Servlet程序:



1 import javax.servlet.Servlet;
 2 import javax.servlet.ServletConfig;
 3 import javax.servlet.ServletRequest;
 4 import javax.servlet.ServletResponse;
 5 import javax.servlet.ServletException;
 6 import java.io.IOException;
 7 
 8 public class HelloServlet implements Servlet{
 9 
10     public void init(ServletConfig config) throws ServletException{
11         //将信息打印到控制台(而不是浏览器)
12         System.out.println("Hello world!");
13     }
14 
15     public void service(ServletRequest request,ServletResponse response) 
16         throws IOException,ServletException{
17     
18     }
19     
20     public void destroy(){
21         
22     }
23 
24     public String getServletInfo(){
25         return null;
26     }
27 
28     public ServletConfig getServletConfig(){
29         return null;
30     }
31 
32 }



  前端页面:



1 <html>
 2     <head>
 3         <title>welcome page</title>
 4     </head>
 5     <body>
 6         <!--为了更加的通用,URL路径中的IP地址,端口号可以省略-->
 7         <!--以下网络资源路径还是一个绝对路径,目前必须以"/"开始-->
 8         <a href="/FirstServletWebApp/hello">HelloServlet</a>
 9     </body>
10 </html>



  web.xml:



1 <?xml version="1.0" encoding="ISO-8859-1"?>
 2 <web-app xmlns="http://java.sun.com/xml/ns/javaee"
 3   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 4   xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
 5                       http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
 6   version="3.0">
 7     <!--这是一个合法的web.xml文件-->
 8     <!--一个webapp只有一个web.xml文件-->
 9     <!--web.xml文件主要配置请求路径和Servlet类名之间的绑定关系-->
10     <!--web.xml文件在Tomcat服务器启动阶段被解析-->
11     <!--web.xml文件解析失败,会导致webapp启动失败-->
12     <!--web.xml文件中的标签不能随意编写,因为Tomcat服务器早就知道文件中编写了哪些标签-->
13     <!--web.xml文件中的标签也是SUN公司制定的Servlet规范-->
14     <servlet>
15         <servlet-name>thisIsServletName</servlet-name>
16         <servlet-class>HelloServlet</servlet-class>
17     </servlet>
18     <servlet-mapping>
19         <servlet-name>thisIsServletName</servlet-name>
20         <!--路径随意编写,但是必须以"/"开始-->
21         <!--这是一个虚拟路径,只是代表一个资源的名称-->
22         <url-pattern>/df/s/fs/f/sdf/s/f</url-pattern>
23         <!--可以编写多个url-pattern,但是路径需要以"/"开始-->
24         <url-pattern>/hello</url-pattern>
25     </servlet-mapping>
26 
27 </web-app>



  

将响应结果输出到浏览器中:

  Servlet程序:



1 import javax.servlet.Servlet;
 2 import javax.servlet.ServletConfig;
 3 import javax.servlet.ServletException;
 4 import javax.servlet.ServletRequest;
 5 import javax.servlet.ServletResponse;
 6 import java.io.IOException;
 7 import java.io.PrintWriter;  //标准输出流,不需要关闭
 8 
 9 public class WelcomeServlet implements Servlet{
10     public void init(ServletConfig config) throws ServletException{
11         
12     }
13     
14     public void service(ServletRequest request,ServletResponse response)
15         throws ServletException,IOException{
16         //解决响应的时候中文乱码问题
17         //设置响应的内容类型以及字符编码方式
18         //在获取响应流之前设置有效果
19         response.setContentType("text/html;charset=UTF-8");
20 
21         //将信息输出到浏览器上
22         //将HTML字符串输出到浏览器上,浏览器解释执行
23         //获取输出流对象,流直接指向特定的浏览器客户端
24         PrintWriter out = response.getWriter();
25         
26         //响应HTML代码到浏览器,并且在网页上体现换行
27         out.print("<html>");
28         out.print("<head>");
29         out.print("<title>welcome servlet</title>");
30         out.print("</head>");
31         out.print("<body>");
32         out.print("<h1 align=\"center\">welcome study servlet!</h1>");
33         out.print("hello");
34         out.print("<br>");
35         out.print("你好中国!");
36         out.print("</body>");
37         out.print("</html>");
38     }
39 
40     public void destroy(){
41     
42     }
43 
44     public String getServletInfo(){
45         return null;
46     }
47 
48     public ServletConfig getServletConfig(){
49         return null;
50     }
51 }



  web.xml:



1 <?xml version="1.0" encoding="ISO-8859-1"?>
 2 <web-app xmlns="http://java.sun.com/xml/ns/javaee"
 3   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 4   xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
 5                       http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
 6   version="3.0">
 7 
 8     <servlet>
 9         <servlet-name>helloServlet</servlet-name>
10         <servlet-class>WelcomeServlet</servlet-class>
11     </servlet>
12     <servlet-mapping>
13         <servlet-name>helloServlet</servlet-name>
14         <url-pattern>/hello</url-pattern>
15     </servlet-mapping>
16 
17 </web-app>