JavaWeb——如何找到相应Servlet类及其方法

为了更好地了解如何找到相应的Servlet,我们先建立在一个Web项目下建立三个文件,分别是index.jsp,DataServlet.java,target.jsp,同时打开项目下的web.xml文件,其内容分别如下

整体项目展示图:
在这里插入图片描述
注意:别忘了将jar包servlet-api.jar添加入WEB-INF的lib文件夹中

index.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>开始</title>
	</head>
	<body>
		<a href="./DataServlet">链接</a>
	</body>
</html>

DataServlet.java:

package com.jd;

import java.io.IOException;


import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class DataServlet extends HttpServlet {
	
	private static final long serialVersionUID = 1L;
	
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		System.out.println("doGet");
		response.sendRedirect("target.jsp");
	}	
}

target.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>
		OK
	</body>
</html>

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">
  <display-name>Servlet</display-name>
  <welcome-file-list>
    <welcome-file>index.html</welcome-file>
    <welcome-file>index.htm</welcome-file>
    <welcome-file>index.jsp</welcome-file>
    <welcome-file>default.html</welcome-file>
    <welcome-file>default.htm</welcome-file>
    <welcome-file>default.jsp</welcome-file>
  </welcome-file-list>
  <servlet>
    <description></description>
    <display-name>DataServlet</display-name>
    <servlet-name>DataServlet</servlet-name>
    <servlet-class>com.jd.DataServlet</servlet-class>
  </servlet>
  <servlet-mapping>
    <servlet-name>DataServlet</servlet-name>
    <url-pattern>/DataServlet</url-pattern>
  </servlet-mapping>
</web-app>

发布项目之后,
两个JSP文件各生成两个Web页面,由于index.jsp文件中a标签的href="./DataServlet",所以点击链接按钮时应该进入DataServlet.java文件中。但是程序是如何知道要进入哪个文件中呢?大致可以分为三个步骤:

①a标签中的href后跟的路径对应的是web.xml文件中 <servlet - mapping>标签下的<url - pattern>/DataServlet</url - pattern>标签及其包含内容,然后就可以得到 <servlet - mapping>标签下的<servlet - name>DataServlet</servlet - name>标签及其内容
②第二步就是依据<servlet - mapping>标签下的<servlet - name>DataServlet</servlet - name>标签及其内容再找到< servlet>标签下的<servlet - name>DataServlet</servlet - name>标签及其内容
③第三步找到< servlet>标签下的 <servlet - class>com.jd.DataServlet</servlet - class>标签及其内容,此内容即是相应的Servlet文件路径,最后依据此路径找到相应的Servlet文件

此时项目已经发布,当我点击页面中的链接按钮时,由于DataServlet.java文件中doGet方法中有response.sendRedirect(“target.jsp”);语句,意思是访问target.jsp文件,所以应该转到内容为OK的属于target.jsp的页面

在这里插入图片描述
在这里插入图片描述

那么如何证明中间经过了DataServlet.java文件呢?由于在doGet方法中添加了System.out.println(“doGet”)语句,doGet方法是非静态方法,也就是说要在创建对象后才会被调用,即点击链接按钮后才会被调用。

点击链接按钮后的控制台输出图:
在这里插入图片描述

可以看出点击链接按钮后控制台执行了doGet方法。这就是javaWeb工程中程序如何找到Servlet类及其方法的过程。

猜你喜欢

转载自blog.csdn.net/CandidBoy/article/details/92390957