JSPページは最終的にサーブレットにコンパイルされて実行される

19643 ワード

JSPページは最終的にサーブレットにコンパイルされ、Tomcatの%CATALINA_HOME%/work/Catalina/localhostにフォルダが見つかりました.このフォルダはあなたのweb-projectの仮想パスと一致しています.例えば、私は%CATALINAにいます.HOME%/conf/server.xmlに私のweb-projectが以下のように構成されています.
<Context path="/mldn" docBase="E:/web.workspace/mldndemo/WebContent" reloadable="true"/>

では%CATALINA_HOME%/work/Catalina/localhostには「mldn」というフォルダがあります!
そして、あなたはmldnorgapachejspディレクトリの下ですべてのjspページに対応するものを見つけることができます.classファイル、これはJSPページが最終的にサーブレットにコンパイルされて実行されたことを証明します!
だから、本質的には1つのJSPページが1つのサーブレットに対応しています!
だから、webが見えます.xmlは以下の構成で、おかしくないでください!JSPは本質的にサーブレットだから!JSPページのコードを見てください.私たちは完全にサーブレットと書くことができます.
web.xml
    <servlet>

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

        <jsp-file>/WEB-INF/init.jsp</jsp-file>

        <init-param>

            <param-name>driver</param-name>

            <param-value>org.gjt.mm.mysql.Driver</param-value>

        </init-param>

        <init-param>

            <param-name>url</param-name>

            <param-value>jdbc:mysql://localhost:3306/mldn</param-value>

        </init-param>

    </servlet>

    <servlet-mapping>

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

        <url-pattern>/config.mldn</url-pattern>

    </servlet-mapping>

init.jsp(入力http://127.0.0.1:8080/mldn/config.mldnアクセス)
<%@ 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>MLDN</title>

</head>

<body>

<%

    String dbDriver = config.getInitParameter("driver");

    String dbURL = config.getInitParameter("url");

%>

<h3><%=dbDriver %></h3>

<h3><%=dbURL %></h3>

</body>

</html>

同等のサーブレット:
package org.lxh.servletdemo;



import java.io.IOException;

import java.io.PrintWriter;



import javax.servlet.ServletConfig;

import javax.servlet.ServletException;

import javax.servlet.http.HttpServlet;

import javax.servlet.http.HttpServletRequest;

import javax.servlet.http.HttpServletResponse;



public class DBInitServlet extends HttpServlet {

    private String dbDriver = null, dbURL = null;

    @Override

    public void init(ServletConfig config) throws ServletException {

        // Javadoc: When overriding this form of the method, call super.init(config). 

        super.init(config);

        this.dbDriver = config.getInitParameter("driver");

        this.dbURL = config.getInitParameter("url");

    }

    @Override

    protected void doGet(HttpServletRequest req, HttpServletResponse resp)

            throws ServletException, IOException {

        PrintWriter writer = resp.getWriter();

        writer.println("<h3>    :" + dbDriver + "</h3>");

        writer.println("<h3>    :" + dbURL + "</h3>");

    }

    

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

        this.doGet(req, resp);

    }

}

 
このサーブレットの構成
<!-- DBInitServlet -->

    <servlet>

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

        <servlet-class>

            org.lxh.servletdemo.DBInitServlet

        </servlet-class>

        <init-param>

            <param-name>driver</param-name>

            <param-value>org.gjt.mm.mysql.Driver</param-value>

        </init-param>

        <init-param>

            <param-name>url</param-name>

            <param-value>jdbc:mysql://localhost:3306/mldn</param-value>

        </init-param>

    </servlet>

    <servlet-mapping>

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

        <url-pattern>/DBInitServlet</url-pattern>

    </servlet-mapping>

サーブレットのページを呼び出します.
dbinit_info.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>Insert title here</title>

</head>

<body>

<jsp:forward page="/DBInitServlet"/>

</body>

</html>

この2つの結果は同じです!