1.什么是Servlet?
Servlet就是Sun公司开发的用来开发动态web的一种技术
Sun公司在这些API中提供了一个接口:Servlet,如果你想开发一个Servlet程序只需要完成下面两个条件
- 创建一个类实现Servlet接口
- 把开发好的Java类部署到web服务器
我们把实现了Servlet接口的Java程序称为:Servlet
我们如何创建一个Servlet程序?
1.创建一个空maven项目,并将src目录删掉作为父项目
2.创建一个子项目作为我们的javaweb项目
这里开始就是新建maven项目的步骤
3.按照maven约束在src—>main文件夹下创建java文件夹和resouces文件夹
4.在java文件夹下写自己的Java类
5.在webapps—>WEB-INF---->web.xml文件中注册Servlet
<!DOCTYPE web-app PUBLIC
"-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
"http://java.sun.com/dtd/web-app_2_3.dtd" >
<web-app>
<display-name>Archetype Created Web Application</display-name>
<!-- 注册Servlet -->
<servlet>
<servlet-name>firstServlet</servlet-name><!-- 注册一个Servlet程序名字为XXX -->
<servlet-class>com.mrlibo.Servlet.HelloServlet</servlet-class><!-- Servlet程序的路径 -->
</servlet>
<!-- Servlet的请求路径 -->
<servlet-mapping>
<servlet-name>firstServlet</servlet-name><!-- 去找哪一个Servlet -->
<url-pattern>/firstServlet</url-pattern><!-- 在web服务器上的请求地址 -->
</servlet-mapping>
</web-app>
6.配置Tomcat
进入Deplyment
Mapping问题
更换web.xml的头信息
这里如果不更换后面jsp文件会找不到路径
<!DOCTYPE web-app PUBLIC
"-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
"http://java.sun.com/dtd/web-app_2_3.dtd" >
<web-app xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
version="3.0">
<display-name>Archetype Created Web Application</display-name>
</web-app>
一个Servlet映射一个请求路径
<!-- 注册Servlet -->
<servlet>
<servlet-name>firstServlet</servlet-name><!-- 注册一个Servlet程序名字为XXX -->
<servlet-class>com.mrlibo.Servlet.HelloServlet</servlet-class><!-- Servlet程序的路径 -->
</servlet>
<!-- Servlet的请求路径 -->
<!-- 使用这种的时候前面*不能带映射请求路径 -->
<servlet-mapping>
<servlet-name>firstServlet</servlet-name><!-- 去找哪一个Servlet -->
<url-pattern>/firstServlet</url-pattern><!-- 在web服务器上的请求地址 -->
</servlet-mapping>
一个Servlet映射一个请求路径
第一种直接写多个请求路径
<!-- 注册Servlet -->
<servlet>
<servlet-name>firstServlet</servlet-name><!-- 注册一个Servlet程序名字为XXX -->
<servlet-class>com.mrlibo.Servlet.HelloServlet</servlet-class><!-- Servlet程序的路径 -->
</servlet>
<!-- Servlet的请求路径 -->
<!-- 使用这种的时候前面*不能带映射请求路径 -->
<servlet-mapping>
<servlet-name>firstServlet</servlet-name><!-- 去找哪一个Servlet -->
<url-pattern>/firstServlet</url-pattern><!-- 在web服务器上的请求地址 -->
</servlet-mapping>
<servlet-mapping>
<servlet-name>firstServlet</servlet-name><!-- 去找哪一个Servlet -->
<url-pattern>/firstServlet2</url-pattern><!-- 在web服务器上的请求地址 -->
</servlet-mapping>
<servlet-mapping>
<servlet-name>firstServlet</servlet-name><!-- 去找哪一个Servlet -->
<url-pattern>/firstServlet3</url-pattern><!-- 在web服务器上的请求地址 -->
</servlet-mapping>
第二种利用*通配符,这种方法要注意*前面不能加/
<!-- 注册Servlet -->
<servlet>
<servlet-name>firstServlet</servlet-name><!-- 注册一个Servlet程序名字为XXX -->
<servlet-class>com.mrlibo.Servlet.HelloServlet</servlet-class><!-- Servlet程序的路径 -->
</servlet>
<!-- Servlet的请求路径 -->
<!-- 使用这种的时候前面*不能带映射请求路径 -->
<servlet-mapping>
<servlet-name>firstServlet</servlet-name><!-- 去找哪一个Servlet -->
<url-pattern>/firstServlet/*.mrli</url-pattern><!-- 在web服务器上的请求地址 -->
</servlet-mapping>
优先级问题
固定的匹配名字 > 通配符*
针对这个技巧,我们可以自己制作一个404页面
首先写一个404的Servlet程序
package com.mrlibo.Servlet;
import jakarta.servlet.ServletException;
import jakarta.servlet.http.HttpServlet;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.PrintWriter;
public class ErrorServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
resp.setContentType("text/html");
resp.setCharacterEncoding("utf-8");
PrintWriter pw = resp.getWriter();
pw.println("<h1>404</h1>");
pw.close();
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
doGet(req, resp);
}
}
接下来我们注册一下这个ErrorServlet
<!DOCTYPE web-app PUBLIC
"-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
"http://java.sun.com/dtd/web-app_2_3.dtd" >
<web-app>
<display-name>Archetype Created Web Application</display-name>
<!-- 注册Servlet -->
<servlet>
<servlet-name>firstServlet</servlet-name><!-- 注册一个Servlet程序名字为XXX -->
<servlet-class>com.mrlibo.Servlet.HelloServlet</servlet-class><!-- Servlet程序的路径 -->
</servlet>
<servlet>
<servlet-name>ErrorServlet</servlet-name>
<servlet-class>com.mrlibo.Servlet.ErrorServlet</servlet-class>
</servlet>
<!-- Servlet的请求路径 -->
<!-- 使用这种的时候前面*不能带映射请求路径 -->
<servlet-mapping>
<servlet-name>firstServlet</servlet-name><!-- 去找哪一个Servlet -->
<url-pattern>/firstServlet</url-pattern><!-- 在web服务器上的请求地址 -->
</servlet-mapping>
<servlet-mapping>
<servlet-name>ErrorServlet</servlet-name>
<url-pattern>/*</url-pattern>
</servlet-mapping>
</web-app>
完成