【servlet学习二】:实现servlet

实现servlet

servlet作为一个java 小程序,需要运行在服务器中。tomcat是常用的servlet服务器。

tomcat是什么

Tomcat是Servlet容器,同时也是轻量级的Web服务器。
Apache Server、Microsoft IIS、Apache Tomcat都是Web服务器。
Tomcat作为Web服务器时,主要负责实现HTTP传输等工作。

Tomcat的容器分为四个等级,Servlet的容器管理Context容器,一个Context对应一个Web工程。

包括

  • Server,代表整个Servlet容器组件,是Tomcat的顶层元素。其中可以包含一到多个Service;
  • Service,包含一个Engine,以及一到多个Connector;
  • Connector,代表和客户端程序实际交互的组件,负责接收客户请求,以及向客户返回响应结果;
  • Engine,处理同一个Service中所有Connector接收到的客户请求;
  • Host,在Engine中可以包含多个Host,每个Host定义了一个虚拟主机,它可以包含一个到多个Web应用;
  • Context,一个Host中可以包含多个Context,每个Context代表了运行在虚拟主机上的单个Web应用。

实现servlet的方法

servlet基本开发流程

  • 在%TOMCAT_HOME%/webapps下WEB-INF的文件夹,写一个文件web.xml(该网站的配置信息),建立一个classes的子文件夹,也可以从别的目录ROOT下拷贝
    在web.xml文件中添加如下代码:
<servlet>
    <!—给servlet取名,可以随意取名-->
    <servlet-name>hello</servlet-name>
    <!—指明servlet的路径,就是servlet的包+类名-->
    <servlet-class>com.test.Hello</servlet-class>
</servlet>

<servlet-mapping>
        <!—给servlet取名,可以随意取名-->
        <servlet-name>hello</servlet-name>
        <!—浏览器中输入的url,可以随意取名-->
        <url-pattern>/hello<url-pattern>
</servlet-mapping>
  • 开发servlet(引入Tomcat文件夹下lib文件夹里的servlet-api.jar)
  • 部署你的servlet到tomcat
  • 启动Tomcat,访问你的servlet,在浏览器的地址栏中输入:http://127.0.0.1:8080/myWebSite/hello

方法一:实现servlet接口

servlet接口中公有五个方法,init()、getServletConfig()、getServletInfo()、service()、destroy()。
编写类实现servlet接口,然后实现接口中的五个方法,代码为:

public class Hello implements Servlet{

     //该函数用于初始化servlet,类似于类的构造函数,该函数只会被调用一次
    public void init(ServletConfig parm1) throws ServletException {
        System.out.println("init it!");
    }

    public ServletConfig getServletConfig() {
        // TODO: Add your code here
        return null;
    }

     //这个函数用于处理业务逻辑
     //当用户每访问servlet时,都会调用
     //req:用于获得客户端(浏览器)信息
     //res:用于向客户端(浏览器)返回信息
    public void service(ServletRequest req, ServletResponse res) throws ServletException, IOException {
        //从res中得到PrintWriter
        System.out.println("Service it");
        PrintWriter pw = res.getWriter();
        pw.println("Hello world!");
    }

    public String getServletInfo() {
        return "";
    }

     //销毁,释放内存,三种方式会触发destroy
     //1. reload该servlet(webApps) 2. 关闭tomcat 3.关机
    public void destroy() {
        System.out.println("destroy it!");
    }
} 

方法二:继承GenericServlet

通过GenericServlet去开发servlet,只需要重写service方法,相对来说要简单一些。

public class HelloGen extends GenericServlet{
    //重写一个方法service即可
    public void service(ServletRequest req, ServletResponse res){
        //返回Hello world, generic
        try{
            PrintWriter pw = res.getWriter();
            pw.println("Hello generic");
        }
        catch(Exception e){
            e.printStackTrace();
        }
    }
}

方法三:继承HttpServlet

通过HttpServlet去开发servlet,需要重写doGet、doPost方法,这是目前用的最多的一种方法。
表单提交数据get请求和post请求的区别:

  1. 从安全性看get< post。get提交的数据会在浏览器的地址栏显示
  2. 从提交的内容大小看get< post。get提交的数据不能大于2K,而post提交的数据理论上不受限制,但是实际编程中建议不要大于64K
  3. 从请求响应速度看get>post。get请求服务器立即处理请求,而post请求可能形成一个队列请求
public class HelloHttp extends HttpServlet{
    //处理get请求
    public void doGet(HttpServletRequest req, HttpServletResponse res){
        //业务逻辑
        try{
            PrintWriter pw = res.getWriter();
            pw.println("hello, Http");
        }
        catch (Exception e){
            e.printStackTrace();
        }
    }

    public void doPost(HttpServletRequest req, HttpServletResponse res){
        this.doGet(req,res);    
    }
}

注意

  • 每次写好代码之后,需要在web.xml中注册新的servlet ,格式相同,修改名称和路径
<servlet>
    <!—给servlet取名,可以随意取名-->
    <servlet-name>hello</servlet-name>
    <!—指明servlet的路径,就是servlet的包+类名-->
    <servlet-class>com.test.Hello</servlet-class>
</servlet>

<servlet-mapping>
        <!—给servlet取名,可以随意取名-->
        <servlet-name>hello</servlet-name>
        <!—浏览器中输入的url,可以随意取名-->
        <url-pattern>/hello<url-pattern>
</servlet-mapping>
  • 修改了servlet之后,需要在tomcat管理界面reload servlet或者重启tomcat。

参考文献

http://blog.csdn.net/zhiaini06/article/details/52729604
http://blog.csdn.net/jim_007/article/details/53813300
http://blog.csdn.net/pirateleo/article/details/8574973

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值