week11_day06_Servlet1

1.课程介绍
EE阶段、linux。
三周。
前一周多一点:EE阶段核心知识点。非常重要。一定要重视。
项目一。web项目。7个工作日。
还有一些3-4天左右的内容。
2.回顾
EE:Enterprise Edition。java的企业版本。
对于一个企业来说,需要有哪些?
服务器(不是必须的,阿里云)、企业网站(html页面)、数据库DB。
用户如何访问企业网站?
通过域名,发起一个http请求,去请求对应的一个网站资源
在这里插入图片描述
在这里插入图片描述

在服务器层面,如何获取浏览器的请求资源呢?如何把相应资源写入到响应报文里呢?这些东西就属于JavaEE阶段的东西。
Connector:进来的是一个请求报文,出去的是一个request对象。

对于EE阶段,两个知识点是前置技能要求:
http协议、tomcat(对于tomcat的组成部分要有一个认识、部署应用的几种方式:
1.直接部署-----webapps目录下新建一个目录,那么该目录就是一个应用,目录的名称就是应用名;或者打成war包丢到webapps目录下,tomcat会自动解压)
2.虚拟映射------非常非常重要。Server.xml文件中再host节点下新增一个Context节点;或者conf/Catalina/localhost目录下,新增应用名.xml文件。

静态资源和动态资源
静态资源:一成不变的内容。每个人看到的都是一样的。Html、css、js、图片等。
动态资源:内容是丰富多彩的。你们刷抖音。兴趣爱好不同,刷到的视频都是不同的。登录一个网站,每个人看到的都是自己的用户名。更多的交互性。刷新一个页面,时刻显示最新的时间。Servlet。
动态资源会转成静态资源,再传输回客户端。
3.Servlet
Servlet = Server + applet 服务器上面的一小段程序。
学习官方文档。
http://tomcat.apache.org/tomcat-8.5-doc/servletapi/overview-summary.html
Servlet会对web客户端的请求作出响应。
在这里插入图片描述
定义所有servlet必须实现的方法。

servlet是一个运行在Web服务器中的小型Java程序。servlet通常通过超文本传输协议HTTP接收和响应来自Web客户端的请求。

为了实现这个接口,您可以编写一个扩展javaservlet.GenericServlet或者扩展javax.servlet.http.HttpServlet。

此接口定义了初始化servlet、服务请求和从服务器中删除servlet的方法。这些方法称为生命周期方法,按以下顺序调用:

servlet被构造,然后用init方法初始化。

将处理客户端对服务方法的任何调用。

servlet将停止服务,然后使用destroy方法销毁,然后垃圾收集并最终确定。

除了生命周期方法之外,这个接口还提供getServletConfig方法(servlet可以使用它来获取任何启动信息)和getServletInfo方法(它允许servlet返回自己的基本信息,如作者、版本和版权)。

另见:GenericServlet、HttpServlet

总结一下就是Servlet是一个接口,实现这个接口可以继承GenericServlet、HttpServlet这两个类。

GenericServlet中有个是个抽象类,其中有个抽象方法,其子类必须得实现这个方法。
在这里插入图片描述
在这里插入图片描述


3.1.如何开发servlet

在这里插入图片描述
在这里插入图片描述
问题:包不存在?
为什么SE阶段没有遇到过这个问题呢?
SE阶段用的各种API都是位于jdk中的,但是servlet属于EE,ee的包肯定不在SE的jdk中。
导入该包到内存中。
类加载的机制。
类加载器三类:
1.Bootstrap:主要用于加载jdk中的一些核心类库
2.Extension:主要用来加载jre/ext目录下的类库
3.System:将-classpath后面的jar包加载到内存中

导入Tomcat下lib下的servlet-api.jar包
在这里插入图片描述
编译通过。
JavaEE阶段没有main方法,我们写一些方法供服务器来调用。
Servlet要运行在服务器里,就需要把.class文件导入到Tomcat中。
一个class文件如何放入到tomcat中?
tomcat里面只可以放置应用。
需要在tomcat中新建一个应用(文件夹),然后将class文件放入应用中。

EE项目的目录结构:
webapps目录:
一个一个的应用,比如servlet
-----静态资源文件,html、css、js、图片等
但是如果想放class文件的话,不能直接写一个class文件,如果想放class文件,必须
-----WEB-INF
----------------classes:放置class文件
----------------lib:如果有需要的类库,就都放在lib目录下
----------------web.xml:配置文件

为什么需要这么设置?
假设如果直接将class文件放在servlet应用根目录下,会怎么样?
直接会将你的源代码暴露出来。(访问后直接就下载了)
WEB-INF目录就是为了屏蔽浏览器直接访问的。
在这里插入图片描述
接下来,怎么能够让tomcat调用该class文件。
也是相当于做了一个映射。Web.xml文件中,配置一个映射信息,当访问/xxx的时候,其实是访问当前servlet的内容。

在这里插入图片描述

Servlet-name可以随便取,Servlet-class必须写成classes报下的class文件的全类名。
Servlet-mapping下的Servlet-name必须和Servlet下的Servlet-name保持一致。
通过Servlet-name将Servlet-class和url-pattern进行关联。
url-pattern表示的就是前面这句话:当访问/servlet的时候,其实是访问当前servlet的内容。

问题:如何访问该servlet?
访问servlet的话,同样也是要先访问应用,因为servlet属于某一个应用,
如何去访问到一个应用。

http://localhost:8080/servlet/servlet
第一个servlet表示servlet文件夹(应用),第二个servlet表示当前应用名下的url-pattern,即servlet文件夹下的servlet.class文件。
Web.xml在哪个应用下面,就属于哪个应用的映射。

会发现FirstServlet中有一个System.out.println(“Servlet”);但是在
http://localhost:8080/servlet/servlet中并没有显示出来,应当去日志文件中去看。
如果想让页面每次刷新都显示当前时间:

import javax.servlet.*;
import java.util.Date;

public class FirstServlet extends GenericServlet {
	public void service(ServletRequest req,
           ServletResponse res)
                      throws ServletException,
                             java.io.IOException{

        System.out.println("servlet");
		//动态资源首先要转化成静态资源
		//向响应体中写入数据
        res.getWriter().println(new Date());
    }
}

3.2.总结servlet执行流程
比如访问http://localhost:8080/app/servlet.
1.地址栏打出该地址,浏览器首先帮助你构建一个请求报文
2.传输到目标机器,到达指定端口8080的connector,然后connector接收到该请求,将请求报文转成request对象
3.connector将request对象,和生成一个空的response对象,将这两个对象传给engine
4.engine接着选择host,将这两个对象传给host
5.host选择Context(/app),将这两个对象传给Context(应用)
6.Context在当前应用下去寻找/servlet,如果找到,则往response对象里面写入对应的数据
7.这两个对象依次返回,给connector
8.connector读取response对象里面的数据,然后生成一个响应报文,发送出去

在这里插入图片描述

Request对象是将字符串形式的http请求报文转化成对象形式的request对象
response对象是先给你一个控制对象,你可以在这个控制对象中写一些代码,写完之后,Tomcat会读取里面的东西,按照响应报文的形式正确组装响应报文,返回响应


作业1 今天的作业比较简单,大家就自己手动去编写一个servlet,可以正常访问到即可,不要借助于IDEA

1)首先创建一个MyServlet.java文件,程序代码如下:

import javax.servlet.*;
import java.util.Date;

public class FirstServlet extends GenericServlet {
	public void service(ServletRequest req,
           ServletResponse res)
                      throws ServletException,
                             java.io.IOException{

        System.out.println("servlet");

        res.getWriter().println(new Date());
    }
}

2)然后在FirstServlet.java文件所在目录下打开命令行窗口,输入命令j,获得编译后的FirstServlet.class文件
在这里插入图片描述

3)然后在Tomcat的webapps文件夹下创建项目firstServlet,并在其中创建WEB-INF文件夹,然后在WEB-INF中创建classes文件夹和web.xml文件,其中web.xml文件的内容如下,同时把之前编译好的FirstServlet.class文件放入classes文件夹中

<?xml version="1.0" encoding="UTF-8"?>
<web-app version="3.0" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee                       http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd">


    <servlet>
        <servlet-name>first</servlet-name>
        <servlet-class>FirstServlet</servlet-class>
    </servlet>
	<servlet-mapping>
        <servlet-name>first</servlet-name>
        <url-pattern>/first</url-pattern>
    </servlet-mapping>

</web-app>

4)然后启动Tomcat,并在浏览器中访问http://localhost:8080/firstServlet/first,在Tomcat的控制台中即可看到FirstServlet.java中的程序输出的结果“Servlet”
在这里插入图片描述

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

-玫瑰少年-

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值