首页 > 技术文章 > Javaweb学习(二)第一个maven程序

ruanzhendong 2021-08-16 09:59 原文

1.Servlet简介

1)动态Web技术

2)在API中有一个接口:Servlet,Servlet是一个运行在web服务器的Java程序,由Servlet来接收并响应来自Web客户端的请求,通常通过HTTP来传输。

由此可见,开发一个Servlet程序只需要两步

  • 编写一个Java类,实现Servlet接口;
  • 将开发好的Java类部署到Web服务器中。

我们将实现了Servlet接口的Java程序叫做Servlet。

2.HelloServlet编写

1)创建一个空的Maven项目,删去src目录(pom.xml  .idea不能删),之后我们就以这个空的工程为Maven的主工程,在这个工程下建立多个Module。

 2)在pom文件中添加Servlet需要用到的依赖javax.servlet-api和jsp-api

在https://mvnrepository.com/中搜索最新的依赖

 

 

 

 

 

 复制并粘贴到pom.xml文件中

 

将两个依赖都粘贴到pom文件中并下载。

 

 

 

3)创建一个Module,创建方法类似于创建工程

 

 

 

 

 创建完成后project下的pom.xml文件会多一条module信息

 

 

 

 module的pom.xml里也会多一条parent信息(我这里刚创建的时候有,加载完成后parent就消失了,手动添加上)

 

 

 

<parent>
    <artifactId>javaweb-03-maven</artifactId>
    <groupId>com.rzd</groupId>
    <version>1.0-SNAPSHOT</version>
    <relativePath>../../pom.xml</relativePath>
</parent>

 

这里是Maven父子工程必须有的两个标签

<modules>
        <module>servlet/servlet-01-helloservlet</module>
</modules>

 将module的pom.xml文件中除以下内容外,均可以删去,保持项目干净

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

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  <parent>
    <artifactId>javaweb-03-maven</artifactId>
    <groupId>com.rzd</groupId>
    <version>1.0-SNAPSHOT</version>
    <relativePath>../../pom.xml</relativePath>
  </parent>
  <modelVersion>4.0.0</modelVersion>
  
  <artifactId>servlet-01-helloservlet</artifactId>
  <packaging>war</packaging>
</project>

 

4)更换module下面src\main\webapp\WEB-INF\web.xml的版本,复制下面代码替换 (可以直接设置这个为模板)

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

 

5)在module的main目录下添加java和resources目录并设置属性,最终目录结构如图

 

 

6)创建一个java类,实现Servlet接口(研究下怎么新增一个模板下次直接用)

这里我直接继承HttpServlet类,这是Sun公司提供的默认的实现Servlet接口的实现类。

1 package com.rzd;
2 import javax.servlet.http.HttpServlet;
3 
4 public class HelloServlet extends HttpServlet {
5     //Alt+Enter自动导入jar包,这里module的pom文件里面没有添加依赖,
6     //但是也可以正常导入,是因为父工程的pom文件中有这个依赖
7 }

 

 

7)在类中重写方法

 1 public class HelloServlet extends HttpServlet {
 2     //Alt+Enter自动导入jar包,这里module的pom文件里面没有添加依赖,
 3     //但是也可以正常导入,是因为父工程的pom文件中有这个依赖
 4 
 5     //重写HttpServlet中的doGet()和doPost()
 6     @Override
 7     protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
 8         //super.doGet(req, resp);
 9         PrintWriter writer = resp.getWriter();//响应流
10         //输出HelloServlet
11         writer.print("HelloServlet");
12     }
13 
14     @Override
15     protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
16         super.doPost(req, resp);
17     }
18 }

 

8)编写Servlet的映射:因为Java程序要通过浏览器访问,而浏览器需要链接Web服务器,所以需要在Web服务器中注册自己写的Servlet,并且设置一个浏览器可以访问的路径

配置web.xml

<!--注册Servlet-->
    <servlet>
        <servlet-name>hello</servlet-name>
        <servlet-class>com.rzd.HelloServlet</servlet-class>
    </servlet>
    <!--Servlet请求路径-->
    <servlet-mapping>
        <servlet-name>hello</servlet-name>
        <url-pattern>/</url-pattern>
    </servlet-mapping>

 

9)配置tomcat

按照流程配置即可,检查以下项

 

 

 

 

 

 

 10)点击运行,此时默认访问页面为index.jsp页面:http://localhost:8080/s1/

 

可以看到显示内容为Hllo World!

 

 

 访问http://localhost:8080/s1/hello,即可访问我们自己写的HelloServlet

 

 

 

 

 

3.Mapping路径设置

1)一个Servlet指定一个映射路径:访问http://localhost:8080/s1/hello,显示为Hello Servlet!

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

 2)一个Servlet指定多个映射路径:访问http://localhost:8080/s1/hello1,http://localhost:8080/s1/hello2,http://localhost:8080/s1/hello3,显示为Hello Servlet!

<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>

 3)Servlet指定通配符路径:访问http://localhost:8080/s1/hello,http://localhost:8080//s1/hello/dabcacad,显示为Hello Servlet!(http://localhost:8080/s1/hello123错误)

优先级:指定了的固有路径优先级最高,例如/hello和/*同时存在,虽然/*包含了/hello,但是访问/hello显示hello的内容,访问其他/12345则显示/*的内容

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

4)默认请求路径:尽量不要使用

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

5)指定前缀或后缀:访问http://localhost:8080/s1/111.do,显示为Hello Servlet!

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

 

推荐阅读