JavaWeb学习——Servlet(4)

15 篇文章 0 订阅
6 篇文章 0 订阅

Servlet

简介

servlet是开发动态web的一门技术
sun公司在这些API中提供一个接口叫servlet,若要开发一个servlet程序,只要:
1.编写一个类,实现servlet接口
2.把开发好的Java类部署到Web服务器中

操作
1.构建一个普通的Maven项目,删掉里面的src文件夹,以后我们学习就在这个项目里面构建Module
<dependencies>
        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>javax.servlet-api</artifactId>
            <version>4.0.1</version>
            <scope>provided</scope>
        </dependency>
    </dependencies>

这段话加到pom.xml里面去,因为我们需要servlet的API
在这里插入图片描述

2.在父maven项目中建一个webapp的子maven项目

在这里插入图片描述
父项目的jar包子项目可以直接使用,但是子项目的maven父项目无法使用

3.优化环境

①将web.xml修改为最新的
我自己的好像会报错先用原版的好了

<?xml version="1.0" encoding="UTF-8" ?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/jvavaee"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/jvavaee
                       http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
         version="4.0"
         metadata-complete="true">
</web-app>

②将maven文件搭建完整
在这里插入图片描述

4.编写一个Servlet程序

①编写一个普通类
②实现Servlet接口,这里我们直接继承HttpServlet
当然我们会遇到HttpServlet无法引入的问题,这时候我们需要将tomcat里面的如下所示的两个包放入新建的lib文件夹里
在这里插入图片描述
然后在这个红箭头里引入这两个包的lib文件夹即可成功HttpServlet

在这里插入图片描述
在这里插入图片描述
然后重写HttpServlet

package top.servlet1;

import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServlet;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.PrintWriter;

public class HelloServlet extends HttpServlet {
    //重写一下get和post,他们俩可以相互调用,业务逻辑都一样
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException{
//        ServletOutputStream outputStream = resp.getOutputStream();
        PrintWriter writer=resp.getWriter();//响应流
        writer.print("Hello,Servlet");
    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException{
        super.doPost(req,resp);
    }
}

编写Servlet映射
我们写的是java,需要浏览器访问,所以需要在web服务器中注册servlet,提供一个浏览器访问路径
web.xml

<!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>hello</servlet-name>
    <servlet-class>top.servlet1.HelloServlet</servlet-class>
  </servlet>
<!--  请求路径-->
  <servlet-mapping>
    <servlet-name>hello</servlet-name>
    <url-pattern>/hello</url-pattern>
  </servlet-mapping>
</web-app>

配置Tomcat
在这里插入图片描述

启动测试

在这里插入图片描述

原理

Servlet是由Web服务器调用,web服务器在收到浏览器的请求后会:

在这里插入图片描述

Mapping问题

一般都是一对一
一个servlet指定一个映射路径
localhost:8080/s1/hello/hello

<servlet-mapping>
  <servlet-name>hello</servlet-name>
  <url-pattern>/hello</url-pattern>
</servlet-mapping>

一个servlet指定多个映射路径
localhost:8080/s1/hello/hello1
localhost:8080/s1/hello/hello2
localhost:8080/s1/hello/hello3

<servlet-mapping>
  <servlet-name>hello</servlet-name>
  <url-pattern>/hello1</url-pattern>
</servlet-mapping>
<servlet-mapping>
  <servlet-name>hello</servlet-name>
  <url-pattern>/hello2</url-pattern>
</servlet-mapping>
<servlet-mapping>
  <servlet-name>hello</servlet-name>
  <url-pattern>/hello3</url-pattern>
</servlet-mapping>

也可以使用通用路径
localhost:8080/s1/hello/dwpqdhwqpdqwd随便什么

<servlet-mapping>
  <servlet-name>hello</servlet-name>
  <url-pattern>/hello/*</url-pattern>
</servlet-mapping>

默认请求

<servlet-mapping>
  <servlet-name>hello</servlet-name>
  <url-pattern>/*</url-pattern>
</servlet-mapping>

前后缀
localhost:8080/s1/hello/whuidqhudhu随便什么.xxx

<servlet-mapping>
  <servlet-name>hello</servlet-name>
  <url-pattern>*.xxx</url-pattern>
</servlet-mapping>
写一个404页面
package top.servlet1;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.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 writer = resp.getWriter();
        writer.print("<h1>404<br>你的页面被我吃掉了!</h1>");
    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        super.doPost(req, resp);
    }
}

然后再到web.xml里面注册

<!--  404-->
    <servlet>
        <servlet-name>error</servlet-name>
        <servlet-class>top.servlet1.ErrorServlet</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>error</servlet-name>
        <url-pattern>/*</url-pattern>
    </servlet-mapping>
优先级问题

设置了固有的映射路径的优先级最高
这里部分朋友的web-app会标红,用下面代码即可

<?xml version="1.0" encoding="UTF-8"?>

<web-app version="3.0" 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">

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

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值