Servlet-HelloServlet

Servlet

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

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

HelloServlet

  • servlet有两个默认的实现类:HttpServlet,GenericServlet
  1. 构建一个普通的Maven项目,删掉里面的src目录,以后的学习可以在该项目里建立Model,这个空的工程,就是Maven的主工程

Servlet-HelloServlet_第1张图片

  1. 第一步,https://mvnrepository.com/中搜索要使用的依赖包
  2. 第二部,将搜索到的代码放入标签下
  3. 第三步,打开Maven仓库
  4. 第四步,下载依赖

新建项目

Servlet-HelloServlet_第2张图片

  1. 关于Maven父子工程的理解:

    子类下:

    <parent>
      <artifactId>javaweb-02-ServletartifactId>
      <groupId>org.examplegroupId>
      <version>1.0-SNAPSHOTversion>
    parent>
    

    父类下:

     <modules>
            <module>servlet01module>
        modules>
    

    父项目中的jar包,子项目可以直接使用

  2. Maven环境优化

    1. 修改子项目中webapp下WEB-INF文件下的web.xml为最新的
    
    <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>
    
    
    1. 将Maven的结构搭建完整(main目录下建立java和resources)
  3. 编写一个Servlet程序

    1. 编写一个普通类
    2. 实现Servlet接口,这里继承HttpServlet
    3. 重写方法:
      Servlet-HelloServlet_第3张图片
    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 {
           
            doGet(req, resp);
        }
    }
    
    1. 编写Servlet的映射

      为什么需要映射:我们写的是Java程序,但是要通过浏览器访问,而浏览器需要连接web服务器,所以我们需要在web服务中注册我们写的servlet,还需要给他一个浏览器能够访问的路径;

              
              <servlet>
                <servlet-name>helloservlet-name>
                <servlet-class>com.ch1.servlet.HelloServletservlet-class>
              servlet>
              
              <servlet-mapping>
                <servlet-name>helloservlet-name>
                <url-pattern>/hellourl-pattern>
              servlet-mapping>
        
      
    2. 配置Tomcat

Servlet-HelloServlet_第4张图片

  1. 启动测试
    Servlet-HelloServlet_第5张图片

Mapping

一个servlet可以映射一个映射路径

<servlet-mapping>
          <servlet-name>helloservlet-name>
          <url-pattern>/hellourl-pattern>
        servlet-mapping>
  • 可以访问localhost:8080/hello

一个servlet可以映射多个映射路径

		<servlet-mapping>
          <servlet-name>helloservlet-name>
          <url-pattern>/hellourl-pattern>
        servlet-mapping>

    	<servlet-mapping>
        <servlet-name>helloservlet-name>
        <url-pattern>/hello1url-pattern>
    	servlet-mapping>

    	<servlet-mapping>
        <servlet-name>helloservlet-name>
        <url-pattern>/hello2url-pattern>
   	 	servlet-mapping>

    	<servlet-mapping>
        <servlet-name>helloservlet-name>
        <url-pattern>/hello3url-pattern>
    	servlet-mapping>
  • 可以访问localhost:8080/hello
  • 可以访问localhost:8080/hello1
  • 可以访问localhost:8080/hello2
  • 可以访问localhost:8080/hello3

一个servlet可以映射通用映射路径

<servlet-mapping>
          <servlet-name>helloservlet-name>
          <url-pattern>/hello/*url-pattern>
        servlet-mapping>
  • 可以访问localhost:8080/hello/随意字符输入

可以映射通用后缀映射路径

<servlet-mapping>
          <servlet-name>helloservlet-name>
          <url-pattern>*.ch1url-pattern>
        servlet-mapping>

注意:*.ch1前不加/

  • 可以访问localhost:8080/随意字符输入.ch1

优先级问题

指定了的固有的映射路径优先级最高

如:

<servlet-mapping>
          <servlet-name>hello1servlet-name>
          <url-pattern>/hellourl-pattern>
        servlet-mapping>

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

登陆页面时,会先进入hello2的映射路径,因为其映射路径为通用路径,而在通用路径后输入/hello时,会进入到hello1的映射路径,找不到的路径则会进入到默认的映射路径(hello2)

你可能感兴趣的:(Servlet-HelloServlet)