servlet的认识、思考和简单尝试

Servlet认识

听到Servlet这个词,学习计算机的我们会想,Servlet是什么呢?专业术语说,Servlet是独立于操作系统平台和网络传输协议的服务器端的java应用程序,是一种javaEE的组件技术。简单来讲,Servlet就是一个特殊的java类,继承HttpServlet类,通过实现doGet()和doPost()方法来完成。

Servlet是一个运行在web服务器上的程序。它可以对Web浏览器或其他HTTP客服端程序发出的请求进行处理。用户编写具体的Servlet布置到Servlet容器中,而Servlet容器就是由供应商提供的Tomcat服务器。写好的Servlet最终动态加载到服务器上,即可处理请求,做出响应。

Servlet需要在web.xml中进行配置,当一个客户端发出HTTP请求时,服务器会根据配置文件中的配置信息将该请求的信息发送给相对应的Servlet进行处理。

Servlet的基本结构

Servlet就是一段由java编写的程序,由服务器来维护。为了方便服务器的处理,Servlet需要遵循一定的结构规范。通常我们所说的Servlet就是一个实现了HttpServlet抽象类的类的实例。代码结构如下:

import javax.servlet.ServletException;

import javax.servlet.http.HttpServlet;

import javax.servlet.http.HttpServletRequest;

import javax.servlet.http.HttpServletResponse;

import java.io.IOException;

public class ServTest extends HttpServlet {

    //init method

    public void init() throws ServletException {}

    //handle get request

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

    }

    //handle post request

    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

    }

    //handle put request

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

    }

    //handle delete request

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

    }

    //destroy

    public void destroy() {}

}

 此处代码摘自大佬所写代码

Servlet的生命周期

Servlet是由服务器维护的,其生命周期分为以下几个阶段:

  1. 当客户第一次请求Servlet的时候,服务器会加载对应的Servlet类,将其放在Servlet实例中,即可创建servlet实例。

  2. 创建Servlet实例后,web容器调用init()方法进行一些初始化操作。(init()方法只会在创建后被调用一次

  3. 服务器通过调用Servlet的service()方法来处理客户端发送的请求,通过doGet()或者doPost()方法响应。(通常Servlet的代码结构中的doGet()或者doPost()方法都是通过service()来调用的,而在代码结构中我们没有显式地看到service()方法是因为我们没有对继承的该方法进行重写。)

  4. Servlet实例创建后会一直存在于内存中,直到服务器关闭,web容器通过调用destory()方法销毁servlet。

 请求转发与重定向

请求转发:

一次请求,一次响应;参数(Attribute类型) 可在Servlet之间共享;地址栏没有变化;速度比较快。

request.getRequestDispatcher(' "targetURL" ).forward(request,response);

重定向

两次请求,两次响应;参数(Attribute类型) 不能在Servlet之间共享;地址栏有变化;速度比较慢。

response.sendRedirect(' "targetURL” );

Servlet的xml配置

使用Servlet 首先需要进行一定的配置,用于告诉服务器被请求的Servlet应该响应在哪里。配置通常分为Servlet声明和Servlet映射两部分。

Servlet声明

其语法格式如下:

<servlet>

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

  <servlet-class>path</servler-class>

</servlet>

<servlet-name>语句中间的name是客户所声明的Servlet对象的名字。

<servlet-class>语句中间的path是用于指定客户的Servlet的class文件的路径的。

例如,你的Servlet在某个package中,像下面的例子:

package com.ly;

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;

//扩展HttpServlet抽象类

public class HelloServlet extends HttpServlet{

}

这里你的<servlet-class>语句就可以写为:

<servlet-class>com.ly.HelloServlet</servlet-class>

Servlet映射

其语法格式如下:

<servlet-mapping>

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

  <url-pattern>path</url-pattern>

<servlet-mapping>

这里的name需要和上面所声明的name相同,而<url-pattern>用于映射你的访问,可以写为:

<url-pattern>/myServlet</url-pattern>

学习到这里,我们就可以做一个简单的Servlet程序啦!

本人使用的是STS(SpringToolSuite4)环境。

首先,创建一个新的动态Web项目:

 

 输入project名字之后继续点击一下步到最后finish:

 

 

 然后在Web项目中新建一个class:

 

 

最后所在位置为:

 

此时就可以嵌入代码啦:

根据以上所介绍的写入自己想要实现的代码:

package com.ly;

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;

//扩展HttpServlet抽象类

public class HelloServlet extends HttpServlet

{

    @Override

    protected void doGet(HttpServletRequest request, HttpServletResponse response)

        throws ServletException, IOException {

        String ly = "Hello,this is Servlet! 你好,这是Servlet!";

        System.out.println(ly);//检测点

        //解决response乱码问题

        response.setContentType("text/html;charset=UTF-8");

        PrintWriter out = response.getWriter();

        out.print(ly);

    }

}

这里我只是简单重写了doGet()方法,service()方法会识别并调用这里的doGet()方法进行处理。

这里解释一下为什么会有第20行代码,因为我需要显示的字符中有中文字符,显示的时候会出现乱码,故此需要进行一定的编码更改,以下列出了常见的几种乱码问题的解决办法的代码:

request.setCharacterEncoding(“UTF-8” );

response.setContentType( "text/html;charset=UTF-8” );

response.setCharacterEncoding(“UTF-8" );

然后就是写配置文件了,即对该Servlet对象在服务器进行注册,进入到WEB-INF文件夹下,配置web.xml文件,补充以下代码:

 

<servlet>

  <servlet-name>HelloServlet</servlet-name>

  <!-- com.ly.HelloServlet类就是创建的类,不可写错! -->

  <servlet-class>com.ly.HelloServlet</servlet-class>

  </servlet>

  <servlet-mapping>

  <servlet-name>HelloServlet</servlet-name>

  <url-pattern>/myServlet</url-pattern>

  </servlet-mapping>

接下来进行运行操作,选择Run AS中的第一项Run on Server,在选择已经配置好的Tomcat,选择好运行的项目,最后finish:

 

 

 可以看到运行正常并能够在页面正常显示:

 

 到此为止,一个简单的Servlet程序就设计完成了,第一次尝试难免会遇到不少问题,但是通过查资料,不断学习,不断修改,最终都会达到那个你想要的点。

当你迈出了第一步,你就会发现,许多事情其实并没有你想的那么难,他只是先给你一个很难的表象,让许多人望而却步,但当你走入之后,一步一步去做,到最后完成的那一刻,就会心生感慨,真正的难其实在于你自己。

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值