JavaWeb编程入门


Servlet

Tomcat

基本使用

Apache Tomcat? - Welcome!

image

IDEA集成

Web配置:

Tomcat配置:

启动查看:




    
    Title


    

This is a test page!

重新修改配置:

  • 端口号:8000 --> 8080
  • 应用程序上下文

Servlet

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

    4.0.0

    com.liangjiajia
    servlet
    1.0-SNAPSHOT

    
        8
        8
    
    
        
            aliyun
            aliyun
            https://maven.aliyun.com/repository/public
        
    
    
        
            javax.servlet
            javax.servlet-api
            3.1.0
        
    

FirstServlet.java
package com.liangjiajia.servlet;

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 FirstServlet extends HttpServlet {
    @Override
    protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        String name = req.getParameter("name");
        String res = "

hi," + name + "!


"; System.out.println(res); PrintWriter out = resp.getWriter(); out.println(res); } }
web.xml
<?xml version="1.0" encoding="UTF-8"?>

    
        first
        com.liangjiajia.servlet.FirstServlet
    
    
        first
        /first
    

request --> url --> name -> class -> response

Servlet工程目录

  • /:Java Web根目录
    • MATE-INF
      • MANIFEST.MF:Web应用的版本信息
    • WEB-INF:Web应用安全目录
    • classes:编译后产生的class
    • lib:Web应用依赖
    • web.xml:部署描述符文件
    • index.html:默认首页

Servlet开发步骤

  • 创建Java类,继承HttpServlet
    • 重写service方法
      • 处理请求
      • 生成响应
  • 配置web.xml,绑定访问地址
SampleServlet.java
package com.liangjiajia.servlet;

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 SampleServlet extends HttpServlet {
    @Override
    protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //1.处理请求中的用户数据
        String name = req.getParameter("name");
        String mobile = req.getParameter("mobile");
        //2.通过响应返回结果
        PrintWriter out = resp.getWriter();
        out.println("

name:" + name + "

"); out.println("

mobile:" + mobile + "

"); } }
web.xml
<?xml version="1.0" encoding="UTF-8"?>

    
        first
        com.liangjiajia.servlet.FirstServlet
    
    
        first
        /first
    
    
        sample
        com.liangjiajia.servlet.SampleServlet
    
    
        sample
        /sample
    

Servlet其他

请求参数

  • 单个:getParameter

  • 多个:getParameterValues

studen.html



    
    学员信息登记表


学员信息登记表

姓名:
手机:
性别:
特长: 英语 编程 演讲 游泳
StudentServlet.java
package com.liangjiajia.servlet;

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 StudentServlet extends HttpServlet {
    @Override
    protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        String name = request.getParameter("name");
        String mobile = request.getParameter("mobile");
        String sex = request.getParameter("sex");
        String[] specs = request.getParameterValues("spec");
        PrintWriter out = response.getWriter();
        out.println("

name:" + name + "

"); out.println("

mobile:" + mobile + "

"); out.println("

sex:" + sex + "

"); for (String spec : specs) { out.println("

spec:" + spec + "

"); } } }
web.xml
<?xml version="1.0" encoding="UTF-8"?>

    
        first
        com.liangjiajia.servlet.FirstServlet
    
    
        first
        /first
    
    
        sample
        com.liangjiajia.servlet.SampleServlet
    
    
        sample
        /sample
    
    
        student
        com.liangjiajia.servlet.StudentServlet
    
    
        student
        /student
    


提交后

请求方法

  • Get:不包含敏感信息的查询

  • Post:安全性要求较高的“写”操作

处理方法:

  • 所有请求 – service()方法

  • Get请求 - doGet()方法

  • Post请求 – doPost()方法

RequestMethodServlet.html
package com.liangjiajia.servlet;

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 RequestMethodServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        String name = request.getParameter("name");
        PrintWriter out = response.getWriter();
        out.println("

GET:name:" + name + "

"); } @Override protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { String name = request.getParameter("name"); PrintWriter out = response.getWriter(); out.println("

POST:name:" + name + "

"); } }
web.xml
<?xml version="1.0" encoding="UTF-8"?>

    
        first
        com.liangjiajia.servlet.FirstServlet
    
    
        first
        /first
    
    
        sample
        com.liangjiajia.servlet.SampleServlet
    
    
        sample
        /sample
    
    
        student
        com.liangjiajia.servlet.StudentServlet
    
    
        student
        /student
    
    
        requestMethod
        com.liangjiajia.servlet.RequestMethodServlet
    
    
        requestMethod
        /request_method
    

选用不同的方法

request_method.html



    
    Title


姓名: 手机号:

get 方法




    
    Title


姓名: 手机号:

post 方法




    
    Title


姓名: 手机号:

Servlet 生命周期

  1. 装载–web.xml

  2. 创建–构造方法

  3. 初始化-init()

  4. 提供服务–service()

  5. 销毁–destory()

Servlet:单例多线程

注解配置 Servlet

替换手动配置,使用注解说明

AnnotationServlet.java:

package com.liangjiajia.servlet;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;

@WebServlet("/anno")
public class AnnotationServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        response.getWriter().println("I'm annotation servlet!!");
    }
}

Servlet 进阶

  • URL统一资源定位符,表示Web应用对外暴露的访问地址
    • http://www.baidu.com/index.html
  • URI统一资源标示符,表示Web应用资源的访问路径
    • /index.html

Web 请求与响应解析

HTTP请求

request.html



    
    Title


RequestServlet.java
package com.liangjiajia.servlet;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;

public class RequestServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        response.getWriter().println("This is get method");
    }

    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        response.getWriter().println("This is post method");
    }
}

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

    
        request
        com.liangjiajia.servlet.RequestServlet
    
    
        request
        /request
    


采用get方式后:


采用post方式后:


多端应用

UserAgentServlet.java
package com.liangjiajia.servlet;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;

@WebServlet("/ua")
public class UserAgentServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        response.setContentType("text/html;charset=utf-8");
        String ua = request.getHeader("User-Agent");
        if (ua == null) {
            response.getWriter().println("User-Agent请求头不存在");
            return;
        }
        String output = "";
        if (ua.toLowerCase().indexOf("windows nt") != -1) {
            output = "

这是PC端页面

"; } else if (ua.toLowerCase().indexOf("iphone") != -1 || ua.toLowerCase().indexOf("android") != -1) { output = "

这是移动端页面

"; } response.getWriter().println(output); } }

HTTP响应

  • 响应行

  • 响应头

  • 响应体

HTTP常见状态码

状态码 错误描述
200 成功
404 资源没有找到
500 内部错误
403 拒绝访问
400 无效请求
401 未经授权
503 服务器超负载或正停机处理,无法处理请求

ContentType

ContentType:决定浏览器采用何种方式对响应体进行处理。

ContentTypeServlet.java
package com.liangjiajia.servlet;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;

@WebServlet("/ct")
public class ContentTypeServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        String output = "

百度

"; response.setContentType("text/html;charset=utf-8"); response.getWriter().println(output); } }

请求转发

login.html



    
    Title


    
CheckLoginServlet.java
package com.liangjiajia.servlet.forward;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import java.io.IOException;

@WebServlet("/login")
public class CheckLoginServlet extends HttpServlet {
    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        String username = request.getParameter("username");
        String password = request.getParameter("password");
        if (username.equals("admin") && password.equals("123456")) {
            System.out.println("用户登录成功");
            response.sendRedirect("/index");
        } else {
            System.out.println("用户登录失败");
        }
    }
}
IndexServlet.java
package com.liangjiajia.servlet.forward;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import java.io.IOException;

@WebServlet("/index")
public class IndexServlet extends HttpServlet {
    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        response.setContentType("text/html;charset=utf-8");
        response.getWriter().println("首页......");
    }
}

响应重定向

会出现:

要为重定向的servlet添加get方法(这是重定向的默认方法)

login.html



    
    Title


    
CheckLoginServlet.java
package com.liangjiajia.servlet.forward;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import java.io.IOException;

@WebServlet("/login")
public class CheckLoginServlet extends HttpServlet {
    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        String username = request.getParameter("username");
        String password = request.getParameter("password");
        if (username.equals("admin") && password.equals("123456")) {
            System.out.println("用户登录成功");
            response.sendRedirect("/index");
        } else {
            System.out.println("用户登录失败");
        }
    }
}
IndexServlet.java
package com.liangjiajia.servlet.forward;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import java.io.IOException;

@WebServlet("/index")
public class IndexServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        this.doPost(request, response);
    }

    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        response.setContentType("text/html;charset=utf-8");
        response.getWriter().println("首页......");
    }
}

内置对象

CheckLoginServlet.java
package com.liangjiajia.servlet.forward;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import java.io.IOException;

@WebServlet("/login")
public class CheckLoginServlet extends HttpServlet {
    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        String username = request.getParameter("username");
        String password = request.getParameter("password");
        if (username.equals("admin") && password.equals("123456")) {
            System.out.println("用户登录成功");
            request.setAttribute("username", username);
            request.getRequestDispatcher("/index").forward(request, response);
        } else {
            System.out.println("用户登录失败");
        }
    }
}
IndexServlet.java
package com.liangjiajia.servlet.forward;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import java.io.IOException;

@WebServlet("/index")
public class IndexServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        this.doPost(request, response);
    }

    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        response.setContentType("text/html;charset=utf-8");
        String username = (String) request.getAttribute("username");
        response.getWriter().println("首页......" + username);
    }
}


设置自定义请求属性只适合请求转发,不适合重定向。(要使用类似操作,参考session)


Cookie

response.addCookie(cookie)

RandomServlet.java
package com.liangjiajia.servlet.cookie;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.Random;

@WebServlet("/cookie/random")
public class RandomServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        Integer random = new Random().nextInt(10000);
        Cookie cookie = new Cookie("random", String.valueOf(random));
        cookie.setMaxAge(60 * 60 * 24);
        response.addCookie(cookie);
        response.setContentType("text/html;charset=utf-8");
        response.getWriter().println("

随机数" + random + "已生成

"); } }

request.getCookies()

CookieServlet.java
package com.liangjiajia.servlet.cookie;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;

@WebServlet("/cookie/show")
public class CookieServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        Cookie[] cookies = request.getCookies();
        Integer random = -1;
        response.setContentType("text/html;charset=utf-8");
        if (cookies == null) {
            response.getWriter().println("未包含任何Cookie数据");
            return;
        }
        for (Cookie c : cookies) {
            if (c.getName().equals("random")) {
                random = Integer.parseInt(c.getValue());
            }
        }
        response.getWriter().println("name=random的cookie值为:" + random);
    }
}

注意Cookie的时效性!

Session

  • request.getSession():获取Session对象

  • get|set|removeAttribute():获取|设置|删除Session属性

  • setMaxlnactivelnterval():设置Session超时时间

设置 Session

RandomServlet.java
package com.liangjiajia.servlet.session;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import java.io.IOException;
import java.util.Random;

@WebServlet("/session/random")
public class RandomServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        Integer random = new Random().nextInt(10000);
        HttpSession session = request.getSession();
        session.setAttribute("random" , random);
        response.setContentType("text/html;charset=utf-8");
        response.getWriter().println("

随机数" + random + "已生成

"); } }

获取 Session

SessionServlet.java
package com.liangjiajia.servlet.session;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import java.io.IOException;

@WebServlet("/session/show")
public class SessionServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        HttpSession session = request.getSession();
        Integer random = (Integer) session.getAttribute("random");
        response.setContentType("text/html;charset=utf-8");
        response.getWriter().println("name=random的session值为:" + random);
    }
}

执行原理

CheckLoginServlet.java
package com.liangjiajia.servlet.forward;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import java.io.IOException;

@WebServlet("/login")
public class CheckLoginServlet extends HttpServlet {
    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        String username = request.getParameter("username");
        String password = request.getParameter("password");
        if (username.equals("admin") && password.equals("123456")) {
            System.out.println("用户登录成功");
            HttpSession session = request.getSession();
            session.setAttribute("username", username);
            response.sendRedirect("/index");
        } else {
            System.out.println("用户登录失败");
        }
    }
}
IndexServlet.java
package com.liangjiajia.servlet.forward;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import java.io.IOException;

@WebServlet("/index")
public class IndexServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        this.doPost(request, response);
    }

    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        response.setContentType("text/html;charset=utf-8");
        HttpSession session = request.getSession();
        String username = (String) session.getAttribute("username");
        response.getWriter().println("首页......" + username);
    }
}

Context

ServletContext

ServletContextInitServlet.java
package com.liangjiajia.servlet.servletcontext;

import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;

@WebServlet("/servletcontext/init")
public class ServletContextInitServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        ServletContext servletContext = request.getServletContext();
        servletContext.setAttribute("copyright", "Copyright? 2021 imooc.com  京ICP备 12003892号-11 京公网安备11010802030151号");
        response.setContentType("text/html;charset=utf-8");
        response.getWriter().println("ServletContext已初始化");
    }
}

IndexServlet.java
package com.liangjiajia.servlet.servletcontext;

import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.PrintWriter;

@WebServlet("/servletcontext/index")
public class IndexServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        response.setContentType("text/html;charset=utf-8");
        ServletContext context = request.getServletContext();
        String copyright = (String) context.getAttribute("copyright");
        PrintWriter out = response.getWriter();
        out.println("导航栏");
        out.println("
"); out.println("首页正文"); out.println("
"); out.println(copyright); } }

实践

中文乱码

  • GET
    • Tomcat 8以后,默认对GET请求发送的参数视为UTF-8编码
    • Tomcat 8以前,默认对GET请求发送的参数视为ISO-8859-1
  • POST
    • 手动指定
SearchServlet.java
package com.liangjiajia.servlet.encoding;

import javax.servlet.ServletException;
import javax.servlet.ServletOutputStream;
import javax.servlet.ServletResponse;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;

@WebServlet("/encoding/search")
public class SearchServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        String keyword = request.getParameter("keyword");
        System.out.println(keyword);
        response.setContentType("text/html;charset=utf-8");
        response.getWriter().println(keyword);
    }

    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        request.setCharacterEncoding("UTF-8");
        String keyword = request.getParameter("keyword");
        System.out.println(keyword);
        response.setContentType("text/html;charset=utf-8");
        response.getWriter().println(keyword);
    }
}

web.xml相关

默认首页

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

    
        index.html
        default.html
    
    
        request
        com.liangjiajia.servlet.RequestServlet
    
    
        request
        /request
    

Servlet相关

通配符映射

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

    
        index.html
        default.html
    
    
        request
        com.liangjiajia.servlet.RequestServlet
    
    
        request
        /request
    
    
        pattern
        com.liangjiajia.servlet.PatternServlet
    
    
        pattern
        /class/*
    

PatternServlet.java
package com.liangjiajia.servlet;

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 PatternServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        String uri = request.getRequestURI();
        String id = uri.substring(uri.lastIndexOf("/") + 1);
        response.setContentType("text/html;charset=utf-8");
        PrintWriter out = response.getWriter();
        out.println("

"); if (id.equals("785")) { out.println("Java"); } else if (id.equals("786")) { out.println("C#"); } else { out.println("......"); } out.println("

"); } }

启动时加载Servlet

InitTableServlet.java
package com.liangjiajia.servlet.startup;

import javax.servlet.ServletConfig;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;

public class InitTableServlet extends HttpServlet {
    @Override
    public void init(ServletConfig config) throws ServletException {
        String database = config.getInitParameter("database");
        System.out.println("正在向" + database + "创建数据表...");
    }
}
ImportServlet.java
package com.liangjiajia.servlet.startup;

import javax.servlet.ServletConfig;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;

public class ImportServlet extends HttpServlet {
    @Override
    public void init(ServletConfig config) throws ServletException {
        String file = config.getInitParameter("file");
        System.out.println("正在导入" + file + "文件数据...");
    }
}
web.html
<?xml version="1.0" encoding="UTF-8"?>

    
        index.html
        default.html
    
    
        request
        com.liangjiajia.servlet.RequestServlet
    
    
        request
        /request
    
    
        pattern
        com.liangjiajia.servlet.PatternServlet
    
    
        pattern
        /class/*
    
    
        initTable
        com.liangjiajia.servlet.startup.InitTableServlet
        
            database
            db01
        
        0
    
    
        import
        com.liangjiajia.servlet.startup.ImportServlet
        
            file
            tem.txt
        
        1
    

状态码默认页面

404.html



    
    Title


    抱歉,您访问的页面不存在!


500.html



    
    Title


    服务器内部发生错误,请联系系统管理员,联系方式:....


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

    
        index.html
        default.html
    
    
        request
        com.liangjiajia.servlet.RequestServlet
    
    
        request
        /request
    
    
        pattern
        com.liangjiajia.servlet.PatternServlet
    
    
        pattern
        /class/*
    
    
        initTable
        com.liangjiajia.servlet.startup.InitTableServlet
        
            database
            db01
        
        0
    
    
        import
        com.liangjiajia.servlet.startup.ImportServlet
        
            file
            tem.txt
        
        1
    
    
        404
        /error/404.html
    
    
        500
        /error/500.html
    

JavaWeb打包

  • Java Web应用采用war包进行发布

  • 发布路径为:{TOMCAT_HOME}/webapps

  • 利用Maven实现war包导出

Maven的Scope属性

Scope 描述
compile 默认值,依赖组件作用于所有阶段
provided 依赖组件仅作用在编译与测试阶段
runtime 依赖组件仅作用在测试与运行阶段
test 依赖组件仅作用在测试阶段
system 本地Jar文件仅作用在编译与测试阶段
pom.xml
<?xml version="1.0" encoding="UTF-8"?>

    4.0.0

    com.liangjiajia
    servlet
    1.0-SNAPSHOT

    
        8
        8
    
    war
    
        
            aliyun
            aliyun
            https://maven.aliyun.com/repository/public
        
    
    
        
            javax.servlet
            javax.servlet-api
            3.1.0
            provided
        
    
    
        web-servlet
    

打包

复制到webapps目录下

修改上下文

启动tomcat