Tomcat&Servlet

一、web开发相关的概念

1. 软件架构

1.1 C/S架构

  • C:Client客户端, S:Server服务器

  • 比如:QQ、微信、大型网游

  • 优点:

    • 显示效果炫

    • 安全性高

    • 服务器压力小

  • 缺点:

    • 需要安装软件,可能还要有依赖软件

    • 更新维护不方便

1.2 B/S架构

  • B:Browser浏览器,S:Server服务器

  • 比如:网页游戏,京东,淘宝,12306,网银

  • 优点:

    • 不需要安装软件,直接使用浏览器访问

    • 更新维护方便

  • 缺点:

    • 安全性较低:HTTPS,U盾

    • 服务器压力大:集群

    • 显示效果较差:HTML5和CSS3

2. web资源

  • 静态资源:不同人在不同时间不同地方,访问同一资源,看到的效果是一样的。比如:HTML、CSS、js、图片、音频、视频。

  • 动态资源:不同人在不同时间不同地点,访问同一资源,看到的效果是不同的。比如:JSP、Servlet、asp、php

3. 服务器

  • Tomcat:Apache的开源免费的小型服务器软件,支持Servlet和JSP规范。小巧、灵活、使用广泛

  • WebLogic:Oracle的收费的大型服务器软件,支持JavaEE所有规范。功能强大

  • WebSphere:IBM的收费的大型服务器软件,支持JavaEE所有规范。功能强大,并且稳定

二、Tomcat软件

1. 下载与安装

  • 下载:https://tomcat.apache.org/download-80.cgi

  • 安装:免安装,直接解压即可。目录结构如下:

    • bin:可执行命令的文件夹。比如:启动和关闭

    • conf:配置文件夹。

      • server.xml修改Tomcat本身的配置;

      • web.xml是web项目的的默认配置

    • lib:是Tomcat的核心程序jar包

    • logs:日志文件夹

    • temp:临时文件夹

    • webapps:用于部署web项目的文件夹

    • work:工作目录,主要给JSP使用的

2. 启动与关闭

2.1 如何启动和关闭

  • 启动:双击tomcat/bin/startup.bat

  • 关闭:

    • 双击tomcat/bin/shutdown.bat

    • 直接关闭Tomcat的窗口

2.2 启动时可能遇到的问题

2.2.1 Java环境变量配置不正确,导致的启动闪退
  • 正确配置Java的环境变量:

    • JAVA_HOME:配置Java的安装位置

    • CLASSPATH.;%JAVA_HOME%\lib;%JAVA_HOME%\lib\tools.jar

    • Path:增加%JAVA_HOME%\bin

2.2.2 端口冲突导致Tomcat启动不了
  • 现象:在tomcat/logs/catalina*日志文件里有:

    Caused by: java.net.BindException: Address already in use: bind
  • 解决方案:

    1. 杀掉占用端口的进程,然后再启动Tomcat

      • 查找占用端口的进程pid

        • 在cmd里执行命令:netstat -ano|findstr "要查找的端口号"

        • 看结果里最后一列,值就是pid

      • 去任务管理器里结束掉pid进程

    2. 更改Tomcat的配置文件,使用其它端口

      • 找到tomcat/conf/server.xml

      • 搜索port=,把搜索到的端口号改成其它:建议改成:1024~65535之间,或者:80

        • Tomcat默认占用3个端口:8080, 8005, 8009

3. 部署web项目

  • 访问web资源路径的写法

    • 浏览器里地址的写法:http://ip:port/web项目路径(名称)/资源路径

    • 比如:http://192.168.67.51/examples/index.html

    • 如果不写项目名称,默认访问的是ROOT项目

  • 给Tomcat部署web项目

    • 把web项目直接放在tomcat/webapps文件夹里

4. 集成到idea

  • File-->Settings-->Build,Execution,Deployment-->application Servers

  • 点击加号,选择Tomcat Server

  • 选择Tomcat的文件夹,确定

5. idea里创建web项目

6. 把web项目部署到Tomcat

三、Servlet

1. Servlet简介

1.1 什么是Servlet

  • Servlet:Server Applet,运行在服务端的Java程序。是Sun公司提供的一套规范(接口),让客户端可以通过url来远程访问Servlet。

1.2 Servlet的作用

  • 和客户端交互的:

    • 接收客户端提交的参数

    • 完成客户端请求的功能

    • 给客户端返回功能处理的结果

2. Servlet快速入门

  • 步骤:

    1. 创建一个Java类,实现javax.servlet.Servlet接口

    2. 重写接口的方法(共5个方法,了解3个,重点学习1个:service方法)

    3. 给Servlet配置虚拟访问路径(使用注解@WebServlet来配置)

  • 部署到tomcat,启动tomcat, 浏览器就可以访问Servlet

@WebServlet(urlPatterns = "/demo01")
public class Demo01Servlet implements Servlet {
   @Override
   public void init(ServletConfig servletConfig) throws ServletException {

  }

   @Override
   public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException {
       System.out.println("Demo01Servlet.service 运行了");

       servletResponse.getWriter().print("hello, laodi");
  }

   @Override
   public void destroy() {

  }

   @Override
   public ServletConfig getServletConfig() {
       return null;
  }

   @Override
   public String getServletInfo() {
       return null;
  }
}

3. Servlet的原理

4. Servlet的生命周期和API

4.1 Servlet的生命周期(面试题)

  • 何时创建:

    • 默认第一次访问时,Tomcat会创建Servlet对象

    • 创建Servlet对象时,会执行init方法

    • init方法只执行一次

  • 何时销毁:

    • 服务器关闭时/把web项目从Tomcat里取消部署时,Servlet对象会销毁

    • Servlet对象销毁时,会执行destroy方法

    • destroy方法只执行一次

  • 每次访问必定执行的方法:service方法

问题:

有一个DemoServlet部署在Tomcat里。有10个人,每人访问1次,然后关闭Tomcat。问:

  1. DemoServlet类,有几个对象存在?1个

  2. service方法执行了几次:10次

  3. destroy方法执行了几次:1次

4.2 Servlet的API

  • init(ServletConfig):初始化方法

    • 参数ServletConfig:是Servlet的配置信息对象,由Tomcat创建并传递进来的。作用了解:

      • config.getServletName():获取Servlet的名称

      • config.getInitParameter("参数名"):获取初始化参数

      • config.getServletContext():获取ServletContext对象

  • service(ServletRequest, ServletResponse):业务处理的方法

    • 参数ServletRequest:代表http请求的对象,用于接收客户端提交的参数

      • request.getParameter("表单项的name"):得到提交的表单项的值

    • 参数servletResponse:代表http响应的对象,用于向客户端返回响应结果

      • response.getWriter().print("显示到客户端页面上的内容")

  • destroy():销毁方法

5. Servlet的简化开发方式

5.1 Servlet的开发方式

  • 创建Java类,实现Servlet接口:

    • 有大量的冗余重复代码,用不上,也必须要写。除了service方法,其它方法都是重复冗余的

  • 创建Java类,继承GenericServlet:

    • GenericServlet实现了Servlet接口,帮我们实现了不需要的抽象方法。

    • 我们的代码只要实现service方法即可

    @WebServlet(urlPatterns = "/demo02")
    public class Demo02GenericServlet extends GenericServlet {
       @Override
       public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException {
           System.out.println("Demo02GenericServlet.service 运行了......");
      }
    }
  • 创建Java类,继承HttpServlet

    • HttpServlet继承了GenericServlet

      • 根据不同的请求方式,调用了不同的方法

        • get请求,调用了doGet方法

        • post请求,调用 了doPost方法

    • GenericServlet实现了Servlet接口

    @WebServlet(urlPatterns = "/demo03")
    public class Demo03HttpServlet extends HttpServlet {

       @Override
       protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
           System.out.println("处理get和post请求的功能代码");
      }

       @Override
       protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
           this.doGet(req, resp);
      }
    }

5.2 HttpServlet创建的模板

四、作业

要求:

  • 提供一个页面,页面里有登录表单。写完用户名和密码,点击登录时,提交到LoginServlet里。

  • 在LoginServlet里:

    • 接收表单提交的用户名和密码。执行SQL语句,校验用户名密码是否正确

    • 如果用户名和密码正确,要求给客户端返回显示:login success

    • 如果用户名或密码错误,要求给客户端返回显示:login failded

内容总结

  1. 知道软件开发的架构:C/S 和B/S

  2. 知道web资源的分类:静态资源, 动态资源

  3. 了解常见的服务器软件:Tomcat, WebLogic, WebSphere

  4. 能够启动和关闭Tomcat

  5. 如果启动时遇到问题:会解决

    • 环境变量配置不正确,导致无法启动

    • 端口冲突导致无法启动

  6. 把Tomcat配置到idea里

  7. 能够在idea里创建web项目,并把web项目部署到Tomcat,使用浏览器访问

  8. Servlet

    1. Servlet的作用:和客户端交互的

    2. 能够编写Servlet的快速入门

    3. 能够说出Servlet的生命周期(面试题)

    4. 能够理解Servlet的运行原理

    5. 能够创建HttpServlet

Tomcat&Servlet的更多相关文章

  1. What is the difference Apache (Http Server) and Tomcat (Servlet Container)

    The Apache Project The Apache Project is a collaborative software development effort. Its goal is to ...

  2. TOMCAT ---> servlet概念

    1 TOMCAT ---> servlet概念 2 TOMCAT 目录结构 (各个文件夹都存放什么东西) 3 TOMCAT 程序的层级 web | |---- js,jsp,html,css ( ...

  3. Android网络(3):HttpClient作client,Tomcat Servlet作server的交互演示样例

    前面相继介绍了Android网络编程里的Socket传输图片.HttpURLConnection,今天看HttpClient. 第一部分:JavaEE版的Eclipse配置Tomcat [备注:开发后 ...

  4. Web开发之Tomcat&Servlet

    <!doctype html>01 - JavaEE - Tomcat&Servlet figure:first-child { margin-top: -20px; } #wri ...

  5. tomcat&servlet初记

    tomcat&servlet初记 1. web相关概念 2. web服务器软件的学习:tomcat 3. servlet入门学习 web相关概念 1,软件架构 1,cs架构:客户端/服务器端 ...

  6. JavaWeb基础(day15)( http + tomcat + servlet + 响应)

    HTTP+Tomcat+Servlet+响应 HTTP HTTP  超文本传输协议(Hyper Text  Transfer  Protocol  ),一种网络协议. 协议的组成和过程 HTTP协议由 ...

  7. tomcat servlet 线程

    在服务器里,有一个servlet,当客户端第一次访问服务器时,tomcat会 帮我们建一个servlet的对象出来,(注意: tomcat里面可能部署了10个Servlet,如果某一个Servlet从 ...

  8. Tomcat+Servlet面试题都在这里

    下面是我整理下来的Servlet知识点:  图上的知识点都可以在我其他的文章内找到相应内容. Tomcat常见面试题 Tomcat的缺省端口是多少,怎么修改 Tomcat的缺省端口是多少,怎么修改 ...

  9. Tomcat &servlet字符集编码问题

    1.字符编码的原由 1.1 request和response的默认编码是? 如果未指定字符编码,则Servlet规范要求使用ISO-8859-1的编码. HTTP消息正文(请求或响应)的字符编码在Co ...

随机推荐

  1. 前向纠错码(FEC)的RTP荷载格式

    http://www.rosoo.net/a/201110/15146.html 本文档规定了一般性的前向纠错的媒体数据流的RTP打包格式.这种格式针对基于异或操作的FEC算法进行了特殊设计,它允许终 ...

  2. Gym 100801J Journey to the "The World's Start"(二分+单调队列)

    题意: 现在有1,2,3...N这N个站, 给定限定时间Limt,  N-1种票的价格, 分别对应一个最远距离,  叫你选择一种票, 满足可以在规定时间到达N站台,而且价格最低 思路: 如果买距离为L ...

  3. box head上身旋转问题

    现有资源: 1.可旋转上身的动画,旋转角度左右各90度. 2.下身没有旋转动画(腿部左转右转动画) 使用场景: 1.整个模型随鼠标位置旋转,不使用上身旋转动画. 缺点:人物转向动画僵硬.  解决方案: ...

  4. webpy+nginx+uwsgi安装配置

    转:(1)安装Nginx1.1 下载nginx-1.0.5.tar.gz并解压1.2 ./configure (也可以增加--prefix= path指定安装路径)此时有可能会提示缺少pcre支持,如 ...

  5. 【转】 Pro Android学习笔记(六二):Preferences(6):header

    目录(?)[-] 代码实现 header xml文件 在前面的例子,我们主要学习了PreferenceScreen的xml如何写,preference有哪些类型.在代码中,我们为了不提示warning ...

  6. 【转】Pro Android学习笔记(十一):了解Intent(中)

    Intent的构成 Intent可以带有action,data(由URI表达),extra data(key/value map,键值对),指定的类名(成为component name).一个inte ...

  7. JAVA 1.5 并发之 ReentrantLock

    在文章里我不打算具体讲Lock的实现,对此有兴趣的请点击这篇博文 http://www.blogjava.net/BucketLi/archive/2010/09/30/333471.html 我是一 ...

  8. nop前端分页实现思路及步骤

    注:nop本身已经有啦可以实现分页的类,所以我们直接去使用就可以啦 . (编程部分)步骤如下: 第一步,针对Model操作,在需要使用分页的界面Model中将分页类作为该Model类的成员,并在Mod ...

  9. Windchill 配置LOG文件,使开发中的代码能显示打印的信息

    如开发代码的类HomeLogic.java, 包路径在pnt.report.home 需求:需监控此类的打印数据 方法:配置D:\ptc\Windchill_10.1\Windchill\codeba ...

  10. #410(div2)B. Mike and strings

    time limit per test 2 seconds memory limit per test 256 megabytes input standard input output standa ...