首先我们需要知道什么是servlet映射,它有什么作用?

servlet映射:将servlet类与URL(前端访问服务器的链接)一一对应。

比如我们访问 http://localhost:8080/Hello/ServletDemo01
一般情况下末端的ServletDemo01肯定不是一个静态的资源文件,这个URL肯定是调用了后端的某个
servlet类,假设为ServletDemo01.java文件中Servlet类。那么把http://localhost:8080/Hello/ServletDemo01
与ServletDemo01.java中的Servlet类绑定的过程就称为servlet映射。

方法一

通过项目中WebContent目录下的的web.xml配置文件进行配置,主要使用于Servlet2.5以前的版本。

注 意 : \color{red}注意: 在创建动态web项目时需要勾选生成web.xml配置文件,在WebContent目录下才会有这个文件。
在这里插入图片描述
在这里插入图片描述
请参考我的博客:Eclipse(Windows)下第一个动态Java Web项目(Tomcat部署)

package cn.hestyle.web.servlets;

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

/**
 * 通过web.xml配置文件进行映射
 * @author hestyle
 *
 */
public class ServletDemo01 extends HttpServlet {
       
    /**
     * @see HttpServlet#HttpServlet()
     */
    public ServletDemo01() {
        super();
        // TODO Auto-generated constructor stub
    }

	/**
	 * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		//设置返回数据的编码集为utf-8,否则前端中文可能出现乱码
		response.setCharacterEncoding("utf-8");
		response.getWriter().write("通过web.xml配置文件进行映射的Servlet");
	}

	/**
	 * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		doGet(request, response);
	}

}
web.xml文件
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://xmlns.jcp.org/xml/ns/javaee" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd" id="WebApp_ID" version="4.0">
  <display-name>Servlet Map Test</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>
  
  <!-- 将 ServletDemo01类与/ServletDemo01进行映射-->
  <servlet>
  	<!-- 注意 servlet、servlet-mapping中的servlet-name必须一致-->
  	<servlet-name>ServletDemo01</servlet-name>
  	<!-- 包名+类名 -->
  	<servlet-class>cn.hestyle.web.servlets.ServletDemo01</servlet-class>
  </servlet>
  <servlet-mapping>
  	<servlet-name>ServletDemo01</servlet-name>
  	<!-- url需要加上斜杠!!! -->
  	<url-pattern>/ServletDemo01</url-pattern>
  </servlet-mapping>
  
</web-app>

运行结果:
在这里插入图片描述

方法二

通过注解进行Servlet映射。

package cn.hestyle.web.servlets;

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

/**
   * 通过注解进行Servlet映射
 * @author hestyle
 *
 */
@WebServlet("/ServletDemo02")
public class ServletDemo02 extends HttpServlet {
       
    /**
     * @see HttpServlet#HttpServlet()
     */
    public ServletDemo02() {
        super();
        // TODO Auto-generated constructor stub
    }

	/**
	 * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		//设置返回数据的编码集为utf-8,否则前端中文可能出现乱码
		response.setCharacterEncoding("utf-8");
		response.getWriter().write("通过注解进行映射的Servlet");
	}

	/**
	 * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// TODO Auto-generated method stub
		doGet(request, response);
	}
}

运行结果:
在这里插入图片描述

常 见 错 误 : \color{red}常见错误: :

1、同时使用了两种映射方式进行映射

在这里插入图片描述
所以两种映射方式只能使用一种,第二种简洁很多,所以推荐第二种!

2、web.xml方式映射同一个Servlet时servlet、servlet-mapping中的servlet-name不一致

在这里插入图片描述

3、映射时,url忘了加斜杠

在这里插入图片描述
在这里插入图片描述
以上就是Java Web中Servlet实现映射的两种方法以及常见错误主要内容,如果你还遇到了其他问题或者有其它经验欢迎在评论区留言!

Logo

开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!

更多推荐