Servlet编程(上)

Servlet编程

引入servlet-api.jar包

servlet(小程序服务)是运行在Web服务器端的 Java应用程序

可以生成动态Web页面,属于客户端和服务器端 中间层

JSP底层就是一个Servlet

配置在web.xml中

认识Servlet

Java是面向对象的语言,任何Java代码都必须放到类中

但是,在JSP中写Java只需要<% %>括起来,没有类定义

因为:运行JSP时,服务器会将JSP编译为Java类,这个类就是Servlet。

Servlet是一种运行在Web服务器的Java应用程序

编写JSP相比于Servlet更加容易

所有学习Servlet是为了 了解底层细节

创建Servlet类

Servlet两个主要方法doPost(),doGet()

doGet和doPost方法是在客户端发起HTTP GET或POST请求时执行的

在HttpServlet源码中,给GET、POST、DELETE、PUT、OPTIONS、TRACE提交方法

都写了一个对应的方法,通过请求的URL判断

创建一个普通Java类

public class learnServlet extends HttpServlet{}

让其继承HttpServlet

原本HttpServlet中doPost方法

protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {

    // 获取请求协议版本

    String protocol = req.getProtocol();

    // 定义不支持POST请求的错误消息

    String msg = lStrings.getString("http.method_post_not_supported");

    // 判断请求协议是否为HTTP/1.1

    if (protocol.endsWith("1.1")) {

        // 如果是HTTP/1.1,返回405 Method Not Allowed错误

        resp.sendError(405, msg);

    } else {

        // 如果不是HTTP/1.1,返回400 Bad Request错误

        resp.sendError(400, msg);

    }

}

首先获取请求的协议版本,然后根据协议版本判断是否支持POST请求。如果协议版本是HTTP/1.1,则返回405 Method Not Allowed错误;否则返回400 Bad Request错误。

原本的doGet方法,和doPost一样

protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {

    String protocol = req.getProtocol();

    String msg = lStrings.getString("http.method_get_not_supported");

    if (protocol.endsWith("1.1")) {

        resp.sendError(405, msg);

    } else {

        resp.sendError(400, msg);

    }

}

HttpServletRequest和HttpServletResponse对象是在客户端与服务器之间

进行HTTP请求和响应时传递的关键信息。

Request对象代表客户端发送到服务器的HTTP请求,封装了所有的请求信息。

包括请求的地址、请求参数、提交的数据、上传的文件,甚至客户端的IP和操作系统等

Response对象则代表服务器发送回客户端的HTTP响应,用于设置响应数据的方法

如设置响应头、设置响应状态码、写入响应体等 主要用于控制如何将数据发送回客户端。

重写get方法

public class learnServlet extends HttpServlet {

    @Override

    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {

        super.doPost(req, resp);

    }

    @Override

    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {

        resp.setContentType("text/html;charset = gb2312");
        PrintWriter out=resp.getWriter();
        out.println("欢迎");

    }

}

在web.xml中配置servlet

<servlet>

    <servlet-name>WelcomeServlet</servlet-name>

    <servlet-class>org.example.learnServlet</servlet-class>

</servlet>

<servlet-mapping>

    <servlet-name>WelcomeServlet</servlet-name>

    <url-pattern>/org/example/learnServlet</url-pattern>

</servlet-mapping>

其中,servlet-name随便取,两个servlet中name要一致

servlet-class是编写的Java类位置

url-pattern 将Servlet与特定的URL模式进行映射

当用户访问以/org/example/learnServlet为路径的URL时

将会调用名为WelcomeServlet的Servlet进行处理。

若存在多个用户同时访问该网址,不会等待

Servlet采用多线程机制

但是不要在Servlet中定义成员变量,除非是所有用户共享的

Servlet的生命周期

init()方法

HttpServlet中,第一次调用Servlet会创造一个实例

实例化过程会调用init()方法,所以可以将一些初始代码放入

一旦Servlet被初始化,init方法就不会再次执行

一个Servlet在服务器上最多只有一个实例

service()方法

当客户端发送请求时,服务器会开启一个线程

该线程会调用service()方法

该方法根据收到的请求类型,决定使用doGet()还是doPost()方法

destroy()方法

destroy方法是在Servlet生命周期结束时被调用的

通常是在服务器关闭或Servlet容器卸载Servlet时发生

若Servlet消亡之前还需要做一些操作,例如释放数据库连接

那就可以重写destroy()方法

所以可以在init方法中打开数据库,在destroy方法中关闭数据库

来保持数据库的持续连接

init() -》 service() -》 destroy()

  • 13
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值