栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

【后端】Tomcat和Servlet

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

【后端】Tomcat和Servlet

一、Tomcat 1. 基本介绍

Tomcat服务器是一个免费的开放源代码的Web应用服务器。

1.1 Web

WEB,在英语中web即表示网页的意思,它用于表示Internet主机(服务器)上供外界访问的资源

Web资源分类

  • 静态资源:web页面中供人们浏览的数据始终是不变 (eg: html,css,js、音视频)
  • 动态资源:指web页面中供人们浏览的数据是由程序产生的,不同的用户或者不同时间点访问web页面看到的内容各不相同(eg: servlet,jsp)

web通信

基于http协议的请求响应机制,请求一次响应一次,先有请求后有响应。

1.2 HTTP协议

HTTP是HyperText Transfer Protocol(超文本传输协议)的简写,传输HTML文件。

HTTP作用:用于定义WEB浏览器与WEB服务器之间交换数据的过程和数据本身的内容

交互过程: 浏览器请求, 服务请求响应

  • 请求:请求行,请求头,请求体

    请求行

    • 请求方式
    • 请求路径

    请求头:它是由键值对构成

    请求体:只有post请求才有请求体,用于携带请求参数的

  • 响应:响应行,响应头,响应体

    响应行:包含响应状态码

    • 常见的响应状态码:
      1. 200 OK
      2. 302 Redirect 重定向
      3. 304 Cache 读取缓存
      4. 400 BAD REQUEST 请求有问题(可能是请求参数等等不符合规定)
      5. 403 Forbidden 拒绝处理
      6. 404 NOT FOUND 找不到资源
      7. 500 SERVER ERROR 服务器异常

    响应头: 由多个键值对构成,服务器指示浏览器的操作

    • Location: http://www.it315.org/index.jsp指示新的资源的位置,通常和状态,码302一起使用,完成请求重定向
    • Content-Type: text/html; charset=UTF-8; 设置服务器发送字符的编码类型
    • Refresh: 5;url=http://www.baidu.com 指示客户端刷新频率。
    • Content-Disposition: attachment; filename=a.jpg 指示客户端(浏览器)下载文件

    响应体:

    • 可以用于客户端页面的展示

    • 可以用于下载

2. 环境配置 2.1 安装Tomcat 2.2 IDEA创建Web项目配置Tomcat 1. 创建Web工程

2. 配置tomcat

3. 发布Web项目
  • 情况一: 已经关联成功的情况(因为我创建项目的时候, 已经选择了tomcat)

  • 情况二: 如果之前没有选择tomcat, 现在就需要自己关联发布

2.3 IDEA导入Web项目 1. 导入项目

2. 配置tomcat

3. 发布项目

二、Servlet 1. 基本介绍

Servlet 运行在服务端(tomcat)的Java小程序(对象),是sun公司提供一套规范,就是动态资源

  • 用来接收、处理客户端请求、响应给浏览器的动态资源。
  • 实质就是java代码,通过java的API动态的向客户端输出内容

Servlet与普通Java程序的区别

  • 必须实现servlet接口

  • 必须在servlet容器(服务器 tomcat)中运行

  • servlet程序可以接收用户请求参数以及向浏览器输出数据

2. 实现 2.1 体系结构
  1. 实现Servlet接口

    public class ServletDemo02 implements Servlet{
    
        @Override
        public void init(ServletConfig config) throws ServletException {
    
        }
    
        @Override
        public ServletConfig getServletConfig() {
            return null;
        }
    
        @Override
        public void service(ServletRequest req, ServletResponse res) throws ServletException, IOException {
            System.out.println("ServletDemo02执行了...");
        }
    
        @Override
        public String getServletInfo() {
            return null;
        }
    
        @Override
        public void destroy() {
    
        }
    }
    
  2. 继承GenericServlet 类

    GenericServlet 已经实现好了一些servlet接口所需的方法,只需要重写service方法即可

    public class GenericDemoServlet extends GenericServlet {
        @Override
        public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException {
            System.out.println("GenericDemoServlet执行.......");
        }
    }
    
  3. 继承HttpServlet类

    HttpServlet继承GenericServlet适配HTTP协议下的开发。,根据Http不同的请求,只需重写doGet、doPost等方法中一个即可

    public class ServletDemo02 extends HttpServlet{
        @Override
        protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
            doPost(req,resp);
        }
    
        @Override
        protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
            System.out.println("编写很多代码处理这次post请求");
        }
    }
    

IDEA中可以直接创建继承HttpServlet的类,直接在IDEA里面new Servlet

2.2 映射路径

路径配置的方式

  • 配置文件配置:web/WEB-INF/web.xml文件

    
    
    
        
        
            
            ServletDemo01
            
            com.itheima.web.ServletDemo01
        
        
            
            ServletDemo01
            
            /demo01
        
    
    
    
  • 注解方式配置

    @WebServlet("/demo02")	//添加注解配置映射路径
    public class ServletDemo02 extends HttpServlet{
        @Override
        protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
            doPost(req,resp);
        }
    
        @Override
        protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        }
    }
    

路径配置的范围

  • 完全路径匹配: “/demo01”
  • 目录匹配: “ //原则: 如果是将类路径下载文件转换成流使用类加载器的getResourceAsStream()方法 //如果是将web里面的资源转换成流就使用ServletContext的getResourceAsStream()方法 InputStream is = getServletContext().getResourceAsStream("img/timg.jpg"); } } 2. 案例 2.1 注册提交
    @WebServlet("/login")
    public class LoginServlet extends HttpServlet {
        @Override
        protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
            doGet(request, response);
        }
    
        @Override
        protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
            //1. 获取客户端提交的请求参数: 客户端携带过来的请求数据都在request对象中
            String username = request.getParameter("username");
            String password = request.getParameter("password");
    
            //2. 校验客户端提交的用户名和密码是否正确
            if ("jay".equals(username) && "123456".equals(password)) {
                //登录成功
                //将校验结果响应给客户端
                response.getWriter().write("login success!!!");
            }else {
                //登录失败
                response.getWriter().write("login failed!!!");
            }
        }
    }
    
    2.2 统计访问次数
    @WebServlet("/count")
    public class CountServlet extends HttpServlet {
        @Override
        public void init(ServletConfig config) throws ServletException {
            super.init(config);
            //往ServletContext中存储一个计数器,数值为0
            getServletContext().setAttribute("count",0);
        }
    
        @Override
        protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
            doGet(request, response);
        }
    
        @Override
        protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
            //每次有用户访问我们的CountServlet,我们就将ServletContext中存储的访问次数+1
            //1. 取出count的值
            Integer count = (Integer) getServletContext().getAttribute("count");
    
            //数值++
            count++;
    
            //将count存入到ServletContext
            getServletContext().setAttribute("count",count);
        }
    }
    
    @WebServlet("/show")
    public class ShowServlet extends HttpServlet {
        @Override
        protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
            doGet(request, response);
        }
    
        @Override
        protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
            //目标:展示用户的访问次数
            //1. 从ServletContext中取出count
            Integer count = (Integer) getServletContext().getAttribute("count");
            //2. 使用response将数据展示到页面上
            response.getWriter().print(count);
        }
    }
    
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/490774.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号