MacOS, Java和IDEA

Tomcat和Servlet基础介绍

2018-12-20  本文已影响10人  SpaceCat

1、Tomcat介绍

Tomcat是一个容器,如果
Web服务器应用(如
Apache)得到一个指向servlet的请求(非静态页面),此时服务器不会把这个请求交给servlet本身,而是交给部署该servlet的容器。要由容器向servlet提供HTTP请求和响应,而且要由容器调用servlet的方法,如doPost()或者doGet()。

1.1 Tomcat功能

Tomcat容器用来管理和运行servlet,主要完成了如下的功能:

1.2 Tomcat处理请求的过程

当客户向servlet发起一个请求,容器的处理过程如下:

2、Servlet介绍

Servlet(Server Applet)是Java Servlet的简称,称为小服务程序或服务连接器,用Java编写的服务器端程序,主要功能在于交互式地浏览和修改数据,生成动态Web内容。
Servlet运行于支持Java的应用服务器中。从原理上讲,Servlet可以响应任何类型的请求,但绝大多数情况下Servlet只用来扩展基于HTTP协议的Web服务器。

2.1 servlet的生命周期

2.2 Servlet的简单例子

Servlet使用比较方便,一般来说就是重写doGet()和doPost()方法,这里简单介绍两个例子。

2.2.1 Servlet中使用RequestDispatcher将请求发给jsp

通过这种方式,使用jsp可以避免将大量的页面展现,写死在servlet的代码中,实现展现和处理的分离。
Servlet2Jsp.java代码:

package com.web.test;

import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;

/**
 * Created by chengxia on 2018/12/3.
 */
public class Servlet2Jsp extends HttpServlet {
    protected void doPost(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        String []nbaPlayers = {"Kobe Byrant","Tim","Jordan"};
        request.setAttribute("players",nbaPlayers);
        RequestDispatcher view = request.getRequestDispatcher("players.jsp");
        view.forward(request,response);
    }

    protected void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        this.doPost(request, response);
    }
}

Jsp文件的代码(players.jsp):

<%--
  Created by IntelliJ IDEA.
  User: chengxia
  Date: 2018/11/25
  Time: 12:40 PM
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
  <head>
    <title>My Favourite NBA Players!</title>
  </head>
  <body>
    <h1>My Favourite NBA Players:</h1>
    <%
      String [] players = (String [])request.getAttribute("players");
      for(int i=0; i < players.length; i++){
          out.print("<h2>" + players[i] + "</h2>");
      }
    %>
  <h2></h2>
  </body>
</html>

运行效果:


servlet到jsp效果

2.2.2使用servlet重定向让浏览器完成工作

有时候,需要将请求转发给另外一个url,这里可以通过servlet重定向来完成。
ServletRedirect.java代码如下:

package com.web.test;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;

/**
 * Created by chengxia on 2018/12/3.
 */
public class ServletRedirect extends HttpServlet {
    protected void doPost(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        response.sendRedirect("http://www.baidu.com");
    }

    protected void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        this.doPost(request, response);
    }
}

当请求这个servlet时,浏览器中会出现百度首页,因为我们在servlet中做了重定向。

2.2.3 重定向和RequestDispatcher请求分派的区别

重定向是由客户来完成的,客户会在浏览器看到新的url。而前面通过RequestDispatcher做的请求分派是在服务器端做的。

上一篇 下一篇

猜你喜欢

热点阅读