servlet基础知识

早期的Web应用主要用于浏览新闻等静态页面,HTTP服务器(比如 Apache、Nginx)向浏览器返回静态 HTML,浏览器负责解析HTML,将结果呈现给用户。随着互联网的发展,还希望进行一些交互操作来获取动态结果,因此也就需要一些扩展机制能够让HTTP服务器调用服务端程序。于是Sun公司推出了Servlet技术。那什么是Servlet呢?Java Servlet是运行在 Web 服务器或应用服务器上的程序,它是作为来自 Web 浏览器或其他 HTTP 客户端的请求和 HTTP 服务器上的数据库或应用程序之间的中间层。使用Servlet,您可以收集来自网页表单的用户输入,呈现来自数据库或者其他源的记录,还可以动态创建网页。Servlet 执行以下主要任务:

  • 读取客户端(浏览器)发送的显式的数据。这包括网页上的HTML表单,或者自定义的HTTP客户端程序的表单。
  • 读取客户端(浏览器)发送的隐式的HTTP请求数据。这包括cookies、媒体类型和浏览器能理解的压缩格式等。
  • 处理数据并生成结果,过程中可能需要访问数据库,调用Web服务,者计算得出对应的响应。
  • 发送显式的数据(即文档)到客户端(浏览器)。该文档的格式可以是多种多样的,包括文本文件(HTML 或 XML)、二进制文件(GIF 图像)、Excel等。
  • 发送隐式的HTTP响应到客户端(浏览器)。这包括告诉浏览器或其他客户端被返回的文档类型(例如 HTML),设置 cookies 和缓存参数,以及其他类似的任务。

因为Servlet没有main方法,不能独立运行,因此必须把它部署到Servlet容器中,由容器来实例化并调用Servlet。Tomcat或者Jetty就是一个Servlet容器。为了方便使用,它们也具有HTTP 服务器的功能,因此Tomcat或者Jetty就是一个 “HTTP 服务器 + Servlet 容器”,另一种叫法是叫它们Web容器。Servlet架构图如下所示

其他应用服务器比如JBoss和WebLogic,它们不仅仅有Servlet容器的功能,也包含EJB容器,是完整的Java EE应用服务器。从这个角度看,Tomcat或者Jetty算是一个轻量级的应用服务器。上面是概念类介绍,下面通过实际例子来演示如何通过tomcat运行servlet文件。

编写servlet的java类

下面是一个简单的用java编写的一个类,类集成了HttpServlet,其中init(),doGet(),doPost(),destroy()都是HttpServlet中的固定method,可以覆盖重新编写每个方法里面的具体代码。下面的代码在doGet方法中返回一个简单的html内容,html中包含了message。更多Servlet基础知识可查看这里

public class HelloServlet extends HttpServlet {
    private String message;
    public void init() {
        message = "Hello World taoli !";
    }
    public void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException {
        response.setContentType("text/html");
        // Hello
        PrintWriter out = response.getWriter();
        out.println("<html><body>");
        out.println("<h1>" + message + "</h1>");
        out.println("</body></html>");
    }
    public void destroy() {
    }
}

编译java文件为class文件:通过java命令将java文件编译成class文件

下载解压Tomcat,将class文件中放到webapps中,可以直接放到ROOT目录下,也可以自定义目录,如果自定义目录,那么浏览器访问时,url中需要带上目录名称,下面的例子是放到ROOT目录下,ROOT目录中创建WEB-INF目录,WEB-INF目录下创建classes目录以及web.xml文件。

在编写java文件时,因为设置了java的package是com.example.servletdemo,所以在classes目录后面还需要创建com/example/servletdemo三层目录,在servletdemo目录下存放编译后的class文件。下面是web.xml文件的配置,servlet-name和servlet-class是定义servlet名称与具体的class的映射关系,servlet-mapping里面定义servlet名称与访问路径url的关系。

启动tomcat:切换到tomcat解压后的bin目录,启动tomcat,在浏览器中访问刚刚编写servlet class文件(http://localhost:8080/hello-servlet),可以看到返回正确的内容,说明tomcat解析调用servlet class的过程成功。

IDE上创建servlet项目

除了上面这种方式运行servlet文件外,还可以通过IDE工具编写和运行servlet文件。下面是使用IntelljIDE创建servlet项目的过程,通过Intellj创建项目,选择Jakarta EE,Web application作为Template,具体选项如下图左图所示,点击下一步的时候可以选择JavaEE的版本,这里选择JavaEE8,默认会勾选servlet等依赖,这里注意不要取消掉servlet的勾选框即可。

创建项目后,IntelliJ默认生成servlet项目相关的目录以及一个最简单的HelloServlet文件和一个index.jsp文件,WEB-INF目录下有默认的web.xml文件。目录大致结果如下图左图所示,此时在IntelliJ上配置RunConfiguration,选择Tomcat的包位置作为Application server,还可以自定义tomcat的启动端口,配置好后,启动应用,同样也可以在浏览器上访问HelloServlet了。

前面介绍过,通过浏览器访问servlet文件时,需要在web.xml文件中配置servlet名称与class文件的映射关系以及servlet名称与访问的url间的关系,也就是告诉tomcat,当在浏览器中访问某个url时,应该去执行哪个servlet文件。实际,除了在web.xml文件中配置的方式外,还可以通过@WebServlet(name="servletName", value="urlPath")方式告诉tomcat,访问路径与执行的servlet文件的映射关系。该注解的主要有如下参数

name: servlet的名字
value: servlet的路径映射,需要以/开头,可以配置多个,等同于urlPatterns
urlPatterns: servlet的路径映射,需要以/开头,可以配置多个
loadOnStartup: 标记是否在启动时就加载servlet,负数(默认)为第一次请求该servlet时加载,0或者正数为启动应用就加载
initParams: 配置初始参数
asyncSupported: 是否支持异步操作模式,默认false

如下图所示,在HelloServlet上添加@WebServlet后,在浏览器中访问http://localhost:8080/hello-servlet时,执行的就是该文件编写的代码。

编写HelloServlet这个class时,如果要返回html相关的内容,在servlet中只能通过拼接的方式写入response对象中,再展示在浏览器中,可以看到这种方式很笨拙,如果是复杂的html内容,编写起来很麻烦,可读性也很差。例如,下面的小例子只是返回一个简单的message信息。

为了解决上面的问题,在实际项目可以引入JSP搭配Servlet方式编写web应用。那什么是JSP呢?JSP全称Java Server Pages,是一种动态网页开发技术。它使用JSP标签在HTML网页中插入Java代码。标签通常以<%开头以%>结束。JSP是一种Java servlet,主要用于实现Java web应用程序的用户界面部分。网页开发者们通过结合HTML代码、XHTML代码、XML元素以及嵌入JSP操作和命令来编写JSP。除此之外,JSP还可以通过网页表单获取用户输入数据、访问数据库及其他数据源,然后动态地创建网页。JSP标签有多种功能,比如访问数据库、记录用户选择信息、访问JavaBeans组件等,还可以在不同的网页中传递控制信息和共享信息。

下面左边是编写的一个简单jsp文件,作用是获取请求中参数的值,右边是简单的一个html文件,里面是一个form表单,表单的action是调用左边的jsp文件。将这两个文件都放入tomcat的ROOT目录下,启动tomcat,在浏览器中访问html文件。

访问结果如下所示,当提交表单后,显示了输入的first_name和last_name的值,说明成功执行了jsp文件。可以看到通过JSP文件来组装前端显示比servlet容易很多。

 

以上就是对Servlet基础知识介绍,下一篇博客将通过一个更复杂的例子来介绍Servlet和JSP如何搭配编写web应用程序。更多关于ServletJSP的基础知识可以查看这里。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

taoli-qiao

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值