web开发之Servlet 一

因为最近在研究公司一套新的框架,发现这套框架的底层是对Struts2,Spring 封装后的WEB应用框架,而我发现如果仅仅是利用这个框架开发,确实很容易快速上手,做业务来说是没有问题的,但我觉得如果只对上层如何去用熟悉是不行,必须要学习其底层是如何玩的,而任何一套WEB应用框架的开发,肯定都是基于Servlet 对象中各个方法的生命周期来进行的,因此对Servlet的研究是有必要,虽然以前学过,但是很多原理都遗忘了,为此决定重新学习一下。

本人的开发工具和环境是:Myeclipse + Tomcat 6.0.45 +  JDK1.6  (PS:因为自己的这台笔记本有点老了,所以很多东西都没有更新了,等搬进新房一定换个苹果,O(∩_∩)O哈哈~),言归正传吧。

一、Servlet 简介

我们知道Servlet 是sun公司(现已被oracle收购了)提供的一门用于开发动态web资源的技术。如果用户想要开发一个动态的web资源或者说想开发一个java程序,此程序可以在浏览器输出显示出来,那么需要经过2个步骤:

1)编写一个JAVA类,实现Sun公司对外提供的一个API接口,servlet接口。

2)把开发好的这个JAVA类,部署到WEB服务器中

经过上面两步,我们就完成了web动态资源的开发。

PS:另外,我们经常说的Servlet容器就是能够运行Servlet的环境叫Servlet容器,如:Tomcat, Web容器:能够运行web应用的环境叫做web容器,如Tomcat.

二、在MyEclipse 中开发Servlet

1)因为我新建了一个工作空间,因此切换到这个新的工作空间之后,原来的所有的配置全部清零了,因此重新配置如下。

2)配置JDK

3)配置编码,建议选择 UTF-8. 选择菜单栏Windows--preferences,选择标签General-->Workspace。

4)指定运行的Tomcat

选择菜单栏Window-->Preferences,选择标签MyEclipse-->Servers-->Tomcat,然后:

5)检查tomcat运行的JDK,并闭MyEclipse自带Tomcat

单击my eclipse tomcat ,然后右击,配置tomcat.

6)经过上面的一系列配置,总于进入到创建web项目。

点击finish,继续:

选择no,继续,这样我们的web工程就创建完成,我们看资源视图。

7)WEB工程创建完成,接下来,我们需要建立Servlet.

Servlet接口SUN公司定义了两个默认实现类,分别为:GenericServlet 和 HttpServlet.

HttpServlet指的能够处理HTTP请求的Servlet,它是继承自GenericServlet ,在此接口上添加了一些与HTTP协议处理相关的方法,比GenericServlet 功能更强大,因此普遍使用这个。

综合上述,实现Servlet的方式有三种:

1)实现servlet接口(偏向底层);2)继承GenericServlet(觉得1不好用,就开发了这个,现在基本没啥用);3)继承HttpServlet(现在大多数用这个)

HttpServlet在实现Servlet接口的时候覆写了service方法,在方法体类的代码会自动判断用户的请求方式,如为GET请求,则会调用HttpServlet中的doGet方法,如果为Post请求,则会去调用doPost方法,因此,开发人员在编写Servlet时候,通常只需要覆写doGet 或 doPost 方法,而不小区覆写service方法了。

下面我采用继承HttpServlet ,创建我们的一个Servlet.

 

点击finish完成。

这样,我们就通过MyEclipse帮我们创建好一个名字为ServletDemo1的Servlet,创建好的ServletDemo01里面会有如下代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
package mdj.servlet.study;
 
import java.io.IOException;
import java.io.PrintWriter;
 
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
 
public class ServletDemo01 extends HttpServlet {
 
    /**
     * Constructor of the object.
     */
    public ServletDemo01() {
        super();
    }
 
    /**
     * Destruction of the servlet. <br>
     */
    public void destroy() {
        super.destroy(); // Just puts "destroy" string in log
        // Put your code here
    }
 
    /**
     * The doGet method of the servlet. <br>
     *
     * This method is called when a form has its tag value method equals to get.
     *
     * @param request the request send by the client to the server
     * @param response the response send by the server to the client
     * @throws ServletException if an error occurred
     * @throws IOException if an error occurred
     */
    public void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
 
        response.setContentType("text/html");
        PrintWriter out = response.getWriter();
        out
                .println("<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\">");
        out.println("<HTML>");
        out.println("  <HEAD><TITLE>A Servlet</TITLE></HEAD>");
        out.println("  <BODY>");
        out.print("    This is ");
        out.print(this.getClass());
        out.println(", using the GET method");
        out.println("  </BODY>");
        out.println("</HTML>");
        out.flush();
        out.close();
    }
 
    /**
     * The doPost method of the servlet. <br>
     *
     * This method is called when a form has its tag value method equals to post.
     *
     * @param request the request send by the client to the server
     * @param response the response send by the server to the client
     * @throws ServletException if an error occurred
     * @throws IOException if an error occurred
     */
    public void doPost(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
 
        response.setContentType("text/html");
        PrintWriter out = response.getWriter();
        out
                .println("<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\">");
        out.println("<HTML>");
        out.println("  <HEAD><TITLE>A Servlet</TITLE></HEAD>");
        out.println("  <BODY>");
        out.print("    This is ");
        out.print(this.getClass());
        out.println(", using the POST method");
        out.println("  </BODY>");
        out.println("</HTML>");
        out.flush();
        out.close();
    }
 
    /**
     * Initialization of the servlet. <br>
     *
     * @throws ServletException if an error occurs
     */
    public void init() throws ServletException {
        // Put your code here
    }
 
}

  我们在看下生成的web.xml

    

复制代码
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5" 
    xmlns="http://java.sun.com/xml/ns/javaee" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee 
    http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
  <servlet>
    <description>This is the description of my J2EE component</description>
    <display-name>This is the display name of my J2EE component</display-name>
    <servlet-name>ServletDemo01</servlet-name>
    <servlet-class>mdj.servlet.study.ServletDemo01</servlet-class>
  </servlet>

  <servlet-mapping>
    <servlet-name>ServletDemo01</servlet-name>
    <url-pattern>/servlet/ServletDemo01</url-pattern>
  </servlet-mapping>
  <welcome-file-list>
    <welcome-file>index.jsp</welcome-file>
  </welcome-file-list>
</web-app>
复制代码

 可以看到:web.xml文件中也多了<servlet></servlet>和<servlet-mapping></servlet-mapping>两对标签,这两对标签是配置ServletDemo1的。

二、MyEclipse 发布Servlet 到 Servlet 容器中

前面我们说过,我们的目的就是开发一个java程序,然后让其能够在浏览器中显示,从而证明Servlet 是一种开发动态web资源的技术。

因此现在我们开发部署这个Servlet.

点击Add Deployment

点击finish 完成。

发布之后,如果想在网页上看效果,需要先运行Tomcat:

服务已经运行OK。

接下来我们访问下这个Servlet,看是否能够在浏览器显示,访问的地址即为:web应用名称+servlet的URL(web.xml中)

我们发现已经访问成功了,但访问的内容是从哪来的呢,我们看下我们的自己实现的Servlet。

复制代码
response.setContentType("text/html");
        PrintWriter out = response.getWriter();
        out
                .println("<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\">");
        out.println("<HTML>");
        out.println("  <HEAD><TITLE>A Servlet</TITLE></HEAD>");
        out.println("  <BODY>");
        out.print("    This is ");
        out.print(this.getClass());
        out.println(", using the GET method");
        out.println("  </BODY>");
        out.println("</HTML>");
        out.flush();
        out.close();
复制代码

我可以看到无论请求是get 还是 post 里面都上述一段代码,可以看到就是我们页面显示的内容,这就证明了Servlet 确实是一种实现动态web资源的一种技术。

下一节,将会将Servlet的运行过程和生命周期和一些相关的知识点.

posted on   pony1223  阅读(491)  评论(0编辑  收藏  举报

编辑推荐:
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
阅读排行:
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 零经验选手,Compose 一天开发一款小游戏!
· 因为Apifox不支持离线,我果断选择了Apipost!
· 通过 API 将Deepseek响应流式内容输出到前端

导航

< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5
点击右上角即可分享
微信分享提示