一個簡單的例子來了解一下jsp頁面轉發到servlet的過程,環境 eclipse、tomcathtml
1.工程目錄結構以下java
2.各部分代碼以下web
1>index.jsptomcat
1 <%@ page language="java" contentType="text/html; charset=utf-8" 2 pageEncoding="utf-8"%> 3 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> 4 <html> 5 <head> 6 <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> 7 <title>首頁</title> 8 </head> 9 <body> 10 <a href = "ForwardServlet">ForwardServlet</a><br> 11 <a href = "MyServlet">MyServlet</a> 12 </body> 13 </html>
2>web.xml服務器
<?xml version="1.0" encoding="UTF-8"?> <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" id="WebApp_ID" version="2.5"> <servlet> <servlet-name>ForwardServlet</servlet-name> <servlet-class>com.scd.servlet.ForwardServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>ForwardServlet</servlet-name> <url-pattern>/ForwardServlet</url-pattern> </servlet-mapping> <servlet> <servlet-name>MyServlet</servlet-name> <servlet-class>com.scd.servlet.MyServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>MyServlet</servlet-name> <url-pattern>/MyServlet</url-pattern> </servlet-mapping> </web-app>
3>ForwardServlet.javaapp
1 package com.scd.servlet; 2 3 import java.io.IOException; 4 import javax.servlet.ServletException; 5 import javax.servlet.annotation.WebServlet; 6 import javax.servlet.http.HttpServlet; 7 import javax.servlet.http.HttpServletRequest; 8 import javax.servlet.http.HttpServletResponse; 9 10 /** 11 * Servlet implementation class ForwardServlet 12 */ 13 //@WebServlet("/ForwardServlet") 14 public class ForwardServlet extends HttpServlet { 15 private static final long serialVersionUID = 1L; 16 17 /** 18 * @see HttpServlet#HttpServlet() 19 */ 20 public ForwardServlet() { 21 super(); 22 // TODO Auto-generated constructor stub 23 } 24 25 /** 26 * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response) 27 */ 28 protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 29 // TODO Auto-generated method stub 30 System.out.println("My First Servlet!"); 31 } 32 33 /** 34 * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response) 35 */ 36 protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 37 // TODO Auto-generated method stub 38 39 } 40 41 }
過程詳解:當點擊ForwardServlet鏈接時,請求到達服務器tomcat後,tomcat檢查當前項目的web.xml中全部的<servlet-mapping></servlet-mapping>eclipse
配置中的<url-pattern></url-pattern>的屬性值。看當中有沒有一個和請求地址Forward相同。結果找到如,以下:jsp
<servlet-mapping>ui
<servlet-name>ForwardServlet</servlet-name>url
<url-pattern>/ForwardServlet</url-pattern>
</servlet-mapping>
其中 <url-pattern>/ForwardServlet</url-pattern> 是你訪問地址
而後,tomcat找到和<servlet-mapping>相對應的<servlet-name>的<servlet>,根據<servlet-name>屬性匹配, 找到了相同名字的
<servlet-name>ForwardServlet</servlet>
以下:
<servlet>
<servlet-name>ForwardServlet</servlet-name>
<servlet-class>com.scd.servlet.ForwardServlet</servlet-class>
</servlet>
根據上面的<servlet-class>找到Servlet文件ForwardServlet.class。
執行結果,在終端輸出:
注意:在servlet中若是使用了註解@WebServlet("/ForwardServlet") ,那麼在xml問件中就不須要配置該servlet的映射關係,若是二者都寫了,開啓服務器是會報錯
The servlets named [ForwardServlet] and [com.scd.servlet.ForwardServlet] are both mapped to the url-pattern [/ForwardServlet] which is not permitted