• 2.Servlet入门


    一.Servlet简介

    • Servlet为sun公司开发动态web的一门技术
    • Sun公司在这些API中提供了一个接口叫做:Servlet,如果想开发Servlet程序,需要完成两个小步骤:
      • 编写一个类,实现Servlet接口。
      • 把开发好的java类部署到Web服务器中。

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

    二.构建一个Servlet项目

    步骤:

    1. 使用Maven搭建父项目,删除src文件用于之后搭建子项目

    2. 在父项目的pom.xml中导入依赖

    3. 在父项目中搭建带有webapp骨架的子项目

    4. 由于子项目中的web.xml版本过低,修改web.xml

    5. 在子项目中添加java和resources目录

    6. 编写第一个Servlet代码:

      1. 建立HelloServlet.java 继承HttpServlet重写doGet和doPost方法

      2. 在web.xml中注册Servlet以及绑定映射的请求路径

      3. 配置Tomcat 启动项目

      4. 学习mapping映射规则,编写ErrorServlet

    1.构建一个普通的Maven项目,删掉里面的src目录,目的是以后在其中建立Module产生子模块;这个空的工程就是Maven的主工程;

    删除src文件夹

    在pom.xml中添加依赖

     1 <dependencies>
     2         <dependency>
     3             <groupId>javax.servlet</groupId>
     4             <artifactId>javax.servlet-api</artifactId>
     5             <version>4.0.1</version>
     6         </dependency>
     7         <dependency>
     8             <groupId>javax.servlet.jsp</groupId>
     9             <artifactId>javax.servlet.jsp-api</artifactId>
    10             <version>2.3.3</version>
    11         </dependency>
    12     </dependencies>
    View Code

    2.添加子模块

     

    此时可以看到父项目中pom.xml多了modules属性

    1 <modules>
    2         <module>servlet191127</module>
    3 </modules>

    子项目中pom.xml有

    1 <parent>
    2         <artifactId>LearnServlet</artifactId>
    3         <groupId>edu.ustc</groupId>
    4         <version>1.0-SNAPSHOT</version>
    5 </parent>

    3.Maven环境优化

    • 修改web.xml中的web-app属性为4.0
     1 <?xml version="1.0" encoding="UTF-8"?>
     2 <web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
     3          xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
     4          xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee
     5                              http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
     6          version="4.0"
     7          metadata-complete="true">
     8 
     9     <display-name>Archetype Created Web Application</display-name>
    10 </web-app>
    •  将maven项目构建完成添加java和resources目录并设置为代码和资源属性的目录

    4.编写一个Servlet程序

    Servlet接口Sun公司有两个默认的实现类:HttpServlet,GenericServlet

    • 编写一个普通类HelloServlet,我们可以重写doGet和doPost方法。
    • 实现Servlet接口,这里我们直接继承HttpServlet。

     1 public class HelloServlet extends HttpServlet {
     2 
     3     //由于get/post方式只是请求实现方式不同,可以相互调用,业务逻辑都一样。
     4     @Override
     5     protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
     6         PrintWriter writer = resp.getWriter();  //响应流
     7         writer.println("First Servlet Project");
     8     }
     9 
    10     @Override
    11     protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
    12         super.doPost(req, resp);
    13     }
    14 }

    5.编写Servlet的映射

    • 我们写的Java程序需要在web服务中注册我们写的Servlet,当用户通过浏览器访问web服务器后,服务器直接映射到我们的Servlet并且我们还要给浏览器一个可以访问的路径。

     1 <!--注册Servlet-->
     2     <servlet>
     3         <servlet-name>Hello</servlet-name>
     4         <servlet-class>ustc.wzh.servlet.HelloServlet</servlet-class>
     5     </servlet>
     6 
     7     <!--Servlet的请求路径-->
     8     <servlet-mapping>
     9         <servlet-name>Hello</servlet-name>
    10         <url-pattern>/hello</url-pattern>
    11     </servlet-mapping>

    6.配置tomcat(看我的其他文章就可学会)

    注:配置项目发布的路径就可以了

    7.启动测试

    第一个Servlet项目完成!

    三.Servlet原理

    四.Mapping问题

    1.一个Servlet可以指定一个映射路径

     1 <!--注册Servlet-->
     2     <servlet>
     3         <servlet-name>Hello</servlet-name>
     4         <servlet-class>ustc.wzh.servlet.HelloServlet</servlet-class>
     5     </servlet>
     6 
     7     <!--Servlet的请求路径-->
     8     <servlet-mapping>
     9         <servlet-name>Hello</servlet-name>
    10         <url-pattern>/hello</url-pattern>
    11     </servlet-mapping>

    2.一个Servlet可以指定多个映射路径,都能访问到

     1     <!--Servlet的请求路径-->
     2     <servlet-mapping>
     3         <servlet-name>Hello</servlet-name>
     4         <url-pattern>/hello</url-pattern>
     5     </servlet-mapping>
     6     <servlet-mapping>
     7         <servlet-name>Hello</servlet-name>
     8         <url-pattern>/hello2</url-pattern>
     9     </servlet-mapping>
    10     <servlet-mapping>
    11         <servlet-name>Hello</servlet-name>
    12         <url-pattern>/hello3</url-pattern>
    13     </servlet-mapping>

    3.一个Servlet可以指定通用映射路径:所有/hello下的请求都能访问到

    1 <!--Servlet的请求路径-->
    2     <servlet-mapping>
    3         <servlet-name>Hello</servlet-name>
    4         <url-pattern>/hello/*</url-pattern>
    5     </servlet-mapping>

    4.默认请求路径:任何请求都到这里

    1     <!--Servlet的请求路径-->
    2     <servlet-mapping>
    3         <servlet-name>Hello</servlet-name>
    4         <url-pattern>/*</url-pattern>
    5     </servlet-mapping>

    5.指定一些前缀或后缀的路径:都能匹配到并处理

    1     <!--Servlet的请求路径-->
    2     <servlet-mapping>
    3         <servlet-name>Hello</servlet-name>
    4         <url-pattern>*.do</url-pattern>
    5     </servlet-mapping>
    6     <servlet-mapping>
    7         <servlet-name>Hello</servlet-name>
    8         <url-pattern>*.wzh</url-pattern>
    9     </servlet-mapping>

    注:可以使用通配符的两种格式

    • *.扩展名: *.do 或 *.xxx 

    • /* : hello/* 
    • 但不可以混合使用 hello/*.do 是非法的

    6.优先级问题:

      指定了固有的映射路径优先级最高,找不到就会走默认的处理请求

    例子:添加ErrorServlet

     1 public class ErrorServlet extends HttpServlet {
     2     @Override
     3     protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
     4         resp.setContentType("text/html");
     5         resp.setCharacterEncoding("utf-8");
     6 
     7         PrintWriter writer = resp.getWriter();
     8         writer.println("<h1>404</h1>");
     9     }
    10 
    11     @Override
    12     protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
    13         doGet(req, resp);
    14     }
    15 }

    web.xml中添加Servlet的映射

     1     <!--注册Servlet-->
     2     <servlet>
     3         <servlet-name>error</servlet-name>
     4         <servlet-class>ustc.wzh.servlet.ErrorServlet</servlet-class>
     5     </servlet>
     6 
     7     <!--Servlet的请求路径-->
     8     <servlet-mapping>
     9         <servlet-name>error</servlet-name>
    10         <url-pattern>/*</url-pattern>
    11     </servlet-mapping>

    请求就不会进入index.jsp,所有错误请求都会进入ErrorServlet中处理,如果输入/hello则会进入HelloServlet中处理。

  • 相关阅读:
    创建数据库,用户,表
    Tomcat安装配置
    常用JS
    win8以管理员身份安装软件
    mybatis中@Param用法
    springMVC3
    SpringMVC参数绑定
    SpringMVC2
    查询数据库元数据
    mybatis 中 foreach collection的三种用法
  • 原文地址:https://www.cnblogs.com/zhihaospace/p/11941997.html
Copyright © 2020-2023  润新知