javaWeb——servlet的认识及Tomcat动态部署

Tomcat的下载安装及静态部署
Linux 入门——基础使用及常见命令

目录

1.Servlet初识

1.1创建maven项目

1.2代码编写

1.3创建必要的目录和文件

1.4打包程序

 1.5部署程序

1.6验证程序

2.IDEA smart tomcat:插件plugin:一键打包部署

2.1下载smart tomcat

 2.2配置smart tomcat

2.3验证:访问页面

3.Servlet出现错误的几种形式


1.Servlet初识

Servlet 是一种实现动态页面的技术. 是一组 Tomcat 的 API, 帮助简单高效的开发一个 Web App.

静态页面:内容始终固定的页面. 即使用户不同/时间不同/输入的参数不同 , 页面内容不发生变化. 
 动态页面:用户不同/时间不同/输入的参数不同, 页面内容会发生变化.

Servlet 就是 Tomcat 这个HTTP服务器提供给 Java 的一组 API, 来构建动态页面

Servlet不必关注 Socket, HTTP协议格式, 多线程并发等技术细节, 降低了 web app 的开发门槛, 提高了开发效率.

Servlet 主要做的工作:

1.初始化:允许程序猿创建一个类到Tomcat中, 在 Tomcat 收到某个特定的 HTTP 请求的时候, 执行这个类中的一些代码.

2.进入循环:循环处理很多请求

  • 读取HTTP请求,servlet解析这个请求字符串,生成一个HttpServletRequest对象
  • 根据请求对象生成一个HttpServletRequest对象(表示响应)
  • 把HttpServletRequest对象转换成HTTP响应,返回给浏览器

TCP服务器的工作:

1.初始化

2.进入循环  

  • 读取请求
  • 根据请求计算响应
  • 把相应返回

1.1创建maven项目

步骤:

  • 创建maven项目
  • 引入依赖到pom.xml文件(注意servlet版本和Tomcat版本的对应关系)
  • 在main目录下创建webapp目录,webapp下创建WEB-INF/web.xml 
  • web.xml 内容代码编写
  • 主文件代码编写
  • 打包成war文件并重命名(在 pom.xml 中新增一个 build 标签, 内置一个 finalName 标签, 重命名)
  • 使用Tomcat部署程序(war文件放到Tomcat目录的webapps下,启动Tomcat的startup.文件会自动解压war到当前目录)
  • 验证程序:浏览器输入127.0.0.1:8080/hello即可(hello为注解中的路径)

或者使用smart Tomcat插件进行简化完成打包+部署

(1)创建maven项目

使用Maven方便进行依赖管理,直接在pom.xml中添加依赖,即可导入

(2)引入依赖,servlet API的jar包

1)servlet版本需要和Tomcat对应,我的Tomcat版本是Tomcat8,对应servlet3.1

2)依赖导入到文件,<dependencies> 标签内部放置项目依赖的 jar 包,maven 会自动下载依赖到本地(若有多个依赖也需要放在<dependencies> 标签内,<dependencies> 标签只能有一个)

导入成功颜色恢复正常

<scope> 标签表示当前jar包只在开发阶段使用,而不需要打包到最终的发布包中

Tomcat内置了servlet,把程序部署到Tomcat时,就有了servlet


1.2创建必要的目录和文件

在main目录下创建webapp目录,在webapp目录创建WEB-INF/web.xml

web.xml文件内容(注意保存此文件,手敲代码容易写错)

<!DOCTYPE web-app PUBLIC
        "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
        "http://java.sun.com/dtd/web-app_2_3.dtd" >
<web-app>
    <display-name>Archetype Created Web Application</display-name>
</web-app>

 webapp 目录是未来部署到 Tomcat 中的一个重要目录. 可以放一些静态资源(如 html , css 等). Tomcat 找到web.xml才能正确处理 webapp 中的动态资源.

Alt+enter出现如下显示,选中Ingore external resource 忽略即可报错消失 


 1.3代码编写

在 java 目录中创建一个类classServlet, 代码如下:

创建的类classServlet 需要继承 HttpServlet类,才能让这个类classServlet 被Tomcat给调用到若之前的maven依赖下载失败,此时的父类HttpServlet是不能被补全的;若导入成功,HttpServlet仍报红,说明依赖未刷新,此时刷新右侧maven工具栏即可

代码编写步骤:

  1. 创建一个类classServlet, 继承自 HttpServlet
  2. 加 @WebServlet("/hello") 注解,  Tomcat 收到路径为 /hello的请求才会调用该类的代码 
  3. 重写 doGet 方法.  在 Tomcat 收到HTTP的 GET 请求时触发(调用doGet方法)(do为处理,Get对应到HTTP的GET方法)
  •        1)HttpServletRequest 表示 HTTP 请求:Tomcat 根据 HTTP 请求的格式把 字符串 格式的请求转成了一个 HttpServletRequest 对象. 后续通过HttpServletRequest 对象获取请求中的信息(方法, url, header, body 等) 
  •        2)HttpServletResponse 表示 HTTP 响应:代码中把响应对象构造好

    4.resp.getWriter() .write返回一个write对象(流对象), 通过write往HTTP响应的body中写入数据, , Tomcat 把整个响应转成字符串, 通过 socket 写回给浏览器.

一个服务器的工作流程:

  1. 接受请求并解析(Tomcat完成)
  2. 根据请求计算响应(自己需要实现的逻辑,也即是doGet要实现的内容)
  3. 构造响应函数,返回给客户端(Tomcat完成)
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;

//当Tomcat收到路径为/hello的请求,就会调用classServlet的代码
//HttpServlet若此处HttpServlet报红,说明以来导入不成功,此时刷新右侧maven工具栏即可
//当Tomcat收到路径为/hello的请求,就会调用classServlet的代码
// 若请求是get请求,则调用classServlet.doGet方法,若是post请求,调用classServlet.doPost
@WebServlet("/hello") //注解,给入路径
public class classServlet extends HttpServlet {
    //doGet方法是父类HttpServlet的方法,因此子类classServlet需要重写doGet方法才能使用
    // doGet(req, resp):doGet方法根据请求生成响应
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//      super.doGet(req, resp);  //不能使用此方法,super.方法是调用父类的方法,也即是调用HttpServlet的doGet方法
        System.out.println("hello world");  //在控制台显示输出内容
        resp.getWriter().write("hello world");  在浏览器页面显示字符串
    }
}

servlet代码不是通过 main 方法作为入口. main 方法被包含在 Tomcat 里, Tomcat 在合适的时机调用,我们写的代码不是一个完整的程序, 而是 Tomcat 这个程序的一小部分逻辑.

Tomcat 什么时候调用? 满足啥样条件才能被调用呢?

主要满足三个条件:
a) 创建的类需要继承自 HttpServlet
b) 这个类需要使用 @WebServlet 注解关联上一个 HTTP 的路径
c) 这个类需要实现 doXXX 方法.

当这三个条件都满足之后, Tomcat 就可以找到这个类, 并且在合适的时机进行调用.


1.4打包程序

基于maven打包

 注意!!! tomcat不能识别jar包(java-jar命令运行),只能识别war格式

 war 包和 jar 包的区别:


1.jar 包是普通的 java 程序打包的结果. 会包含一些 .class 文件.
2.war 包是 java web 的程序, 会包含 .class 文件, 还包含 HTML, CSS, JavaScript, 图片等 以及其他的 jar 包. 打成 war 包格式才能被 Tomcat 识别.

因此,需要修改pom.xml配置,在添加依赖的下方添加标签,修改打包的类型为war(可被Tomcat识别),先删除原先的jar包(不删会报错,无法生成war包),再次重复打包操作生成war包

   <packaging> war </packaging>

war包部署到Tomcat上会自动解压缩,生成同名的目录;通过浏览器URL访问webapp时,要在URL中带目录的名字。由于生成的war包名字较长,可以rename:此时也需先删除生成的war包

在 pom.xml 中再新增一个 build 标签, 内置一个 finalName 标签, 重命名为:classServlet

    <packaging>war</packaging>
    <build>
        <finalName>classServlet</finalName>
    </build>

得到最后重命名的classServlet.war

 1.5部署程序

classServlet.war包放入到Tomcat/webapps目录下,然后启动Tomcat/bin/startup.bat

1.6验证程序

浏览器输入127.0.0.1:8080/classServlet/hello  (hello为注解中的路径)

访问Tomcat需要指定两级目录(文本路径也即是war包名、注解路径servlet路径)


2.IDEA smart tomcat:插件plugin:一键打包部署

2.1下载smart tomcat

 2.2配置smart tomcat

 点击绿色的三角号(add configuration处), IDEA 就会自动进行编译, 部署, 启动 Tomcat 的过程.

(此时不需要手动启动Tomcat,一键部署会自动在控制台启动;若手动开启了会导致控制台启动Tomcat出错,无法完成一键部署)

2.3验证:访问页面

使用127.0.0.1:8080/servlet/hello 访问页面.(此处的servlet指上图中6中Context Path的路径)

使用 Smart Tomcat 部署的时候,  Tomcat 的 webapps 内部并没有被拷贝一个 war 包,也无解压缩的内容.Smart Tomcat 相当于是在 Tomcat 启动的时候直接引用了项目中的 webapp 和 target 目录.


3.Servlet出现错误的几种形式

(1)出现 404:表示用户访问的资源不存在. 大概率是 URL 的路径写的不正确.(可能是少写了 Context Path或Servlet Path的问题;web.xml内容有问题时,Tomcat不能正确加载到webapps)

(2)出现 405:表示对应的HTTP请求没有实现(没有实现 doGet 方法/没有注释super.doGet)

(3)出现 500:往往是 Servlet 代码中抛出异常导致的

(4)出现 "空白页面":没有 resp.getWritter().write() 操作,没有写入内容

(5)出现 "无法访问此网站":一般是 Tomcat启动失败


浏览器发出GET请求:

1.直接在地址栏输入URL

2.通过<a>标签跳转

3.通过<img>/<link><script>标签

4.通过form表单,method指定为GET

5.通过ajax,type指定为GET

浏览器发出POST请求:

1.通过form表单,method指定为POST

2.通过ajax,type指定为POST

  • 3
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值