首先我们需要知道什么是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实现映射的两种方法以及常见错误主要内容,如果你还遇到了其他问题或者有其它经验欢迎在评论区留言!