SERVLET 学习笔记

SERVLET 学习笔记

一、Servlet基本定义

  Servlet是服务器端上面运行的一段小的java程序,一个servlet就是一个简答的java类。通常servlet都是通过请求和返回的模式来被访问的,客户端通过resuest请求,servlet则通过response来返回需要的内容。

二、Tomcat容器等级

Tomcat容器等级分为四个等级,由内向外分别是:context容器àSERVLET容器àHOST(主机)容器àENGINE(引擎)容器。其中,CONTEXT容器,一个CONTEXT容器对应着一个WEB工程,而CONTEXT容器又是被SERVLET容器管理的。

三、手动编写第一个SERVLET

手动编写自己servlet需要以下三个步骤:

1、          继承自HTTPServlet

2、          重写doGET()方法,或者是doPost()方法,具体要根据客户端的请求的action的方式来确定实现。

3、          不要忘记在web.xml文件中注册自己编写的servlet类。

Servlet的继承关系如下:

编写自己的第一个servlet如下:MyServlet.Java

package servlet;

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;

import org.apache.log4j.Logger;

/**
 * Servlet implementation class MyServlet
 */
public class MyServlet extends HttpServlet {
    private static final long serialVersionUID = 1L;

    private static final Logger LOGGER = Logger.getLogger(MyServlet.class);

    /**
     * @see HttpServlet#HttpServlet()
     */
    public MyServlet() {
        System.out.println("装载当前的 servlet");
    }

    /**
     * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse
     *      response)
     */
    protected void doGet(HttpServletRequest request,
            HttpServletResponse response) throws ServletException, IOException {
        LOGGER.info("测试我的第一个servlet");
        PrintWriter out = response.getWriter();
        response.setContentType("text/html;charset=utf-8;");
        out.println("<strong>get方式访问我的servlet成功!!</strong>");
    }

    /**
     * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse
     *      response)
     */
    protected void doPost(HttpServletRequest request,
            HttpServletResponse response) throws ServletException, IOException {
        LOGGER.info("测试我的第一个servlet");
        PrintWriter out = response.getWriter();
        response.setContentType("text/html;charset=utf-8;");
        out.println("<strong>post方式访问我的servlet成功!!</strong>");
    }

    @Override
    public void init() throws ServletException {
        // TODO Auto-generated method stub
        LOGGER.info("当前的 servlet init");
        System.out.println("当前的 servlet init");
    }

}

Web.xml中的配置如下:

<servlet>
    <description>第一个测试的servlet</description>
    <display-name>MyServlet</display-name>
    <servlet-name>MyServlet</servlet-name>
    <servlet-class>servlet.MyServlet</servlet-class>
  </servlet>
  <servlet-mapping>
    <servlet-name>MyServlet</servlet-name>
    <url-pattern>/MyServlet</url-pattern>
  </servlet-mapping>

JSP中的访问方式:

 

<%@ page language="java" contentType="text/html; charset=utf-8"
    pageEncoding="utf-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>servlet测试</title>
</head>
<body>
    <h1>我的第一个SERVLET程序</h1>
    <hr>
    <a href="MyServlet">get 方式请求servlet</a>

    <form action="MyServlet" method="post">
        <input type="submit" value="post方式请求 servlet">
    </form>

</body>
</html>

 

四、TOMCAT中装载SERVLET方式:

A、 Servlet容器自动装载servlet,这个需要在web.xml中配置注册servlet的时候,加上load-on-startup的配置,配置如下:

  <servlet>
    <description>第一个测试的servlet</description>
    <display-name>MyServlet</display-name>
    <servlet-name>MyServlet</servlet-name>
    <load-on-startup>1</load-on-startup>
    <servlet-class>servlet.MyServlet</servlet-class>
  </servlet>
其中的数字越小,加载的优先级就会越高

B、 Client首次向servlet请求,tomcat容器会加载servlet

C、 Servlet的类文件被修改更新之后,tomcat容器会重新加载servlet

 

五、ServletJSP的九大内置对象

 

先有的servlet,之后才有的JSPjsp的前身就是servlet

 

六、SERVLET的跳转路径

Servlet的跳转路径分为:绝对路径相对路径两种方式

6.1 访问servlet的路径区分

绝对路径:

<a href="<%=request.getContextPath()%>/aaa/MyServlet">get 方式请求servlet</a>

必须要加上项目的根目录

相对路径:

<a href="aaa/MyServlet">get 方式请求servlet</a>

最前面不要“/”,此时加上斜线,表示是服务器的根目录,反而找不到对应的servlet。

 

切记:在  <url-pattern>/MyServlet</url-pattern>中配置路径一定是以“/”开头的,表示的是项目的根目录。

6.2 servlet 内部跳转的路径区分

1.请求重定向:redirect  url会改变 相当于客户端重新请求
response.sendRedirect(request.getContextPath() + "/test.jsp");
2.服务器内部跳转:forward  url不会改变 
request.getRequestDispatcher("/test.jsp").forward(request, response);

 本文参考慕课网servlet的课程整理而成。

原文地址:https://www.cnblogs.com/lilin0719/p/5402738.html