Servlet使用

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>

在这里插入图片描述

完成

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值