tomcat和Servlet的一些基础认识(今天两篇,手都打累了,头秃的第n天)
Web相关概念回顾
 1,软件架构:
 C/S:客户端/服务端
 B/S:浏览器/服务端
 2,资源分类
 静态资源:所有用户访问后,得到的结果是一样的,称为静态资源
 静态资源可以直接被浏览器解析,用户请求访问静态资源的过程,称之为 请求!
 如:html , css , js
 动态资源: 用户访问后,得到的结果不一定是一样的,称为动态资源
 动态资源需要先转化为静态资源,再被浏览器解析,返回给用户,这个过程称之为 响应!
 如:servlet jsp php asp
 3,网络通信三要素
 1,IP : 电子设备(计算器)在网络中的唯一标识。
 2,端口 : 应用程序在计算器中的唯一标识。范围(065535),但尽量不要取(11024)的端口号,这些端口号可能被系统占用
 3,传输协议 : 规定了数据传输的规则
 1,基础协议:
 tcp : 安全协议,三次握手 。 但速度稍慢
 udp : 不安全歇息,但速度稍快
Tomcat
web服务器软件
 服务器 : 安装了服务器软件的计算机
 服务器软件 : 接受用户的请求,处理请求,做出响应
 web服务器软件:接收用户的请求,处理请求,做出响应
 在web服务器软件中,可以部署web项目,让用户通过浏览器来访问这些项目
 web容器
 java常见的web服务器软件:
 webLogic : oracle公司的,大型的JAVAEE服务器,支持所有的JAVAEE规范 收费的。
 JAVAEE :java语言在企业级开发中使用的技术规范总和,一共规定了13项大的规范
 webSphere : IBM公司的,大型的JAVAEE服务器,支持所有的JAVAEE规范 收费的。
 JBOSS : JBOSS公司的,大型的JAVAEE服务器,支持所有的JAVAEE规范 收费的。
 Tomcat : Apache 基金组织,中小型的JAVAEE服务器,仅支持少量的JAVAEE规范,但它开源,免费啊!!!能白嫖为什么要给钱?
Tomcat的学习流程:
1,下载
既然是免费的,那肯定走官网啊!
然后左边会有版本号,现在我用的是8,点一下在往下滑,选择适合电脑位数的压缩包
2,安装
将下载的压缩包直接解压就行,注意路径不要有中文和空格
3,卸载
直接把解压后的文件夹删除就好了………………
(吐槽,tomcat的安装和卸载是真的离谱!)
4,启动
在启动这儿说一下tomcat的文件结构,如图:
启动,在bin目录下,双击 startup.bat 文件,就可以启动,如果是 Lunxi 系统 点那个 startup.sh
启动完成后,去浏览器输入
会出现tomcat的一个网页。
这里可以在cmd里面,用 ipconfig 查询自己的 ip 地址 ,然后用自己的 ip 地址代替上面的 localhost
按网上的说法,只要我服务器开着,其他人在电脑上输入我的 ip:8080 是能访问我这个tomcat的,但目前我还没尝试成功
 可能遇到的问题:
 1,黑窗口一闪而过:
 原因:没有正确配置 JAVA_HOME 环境变量(自己网上找教程)
 2,启动报错:
 原因:端口号被占用
 解决:
 1,暴力:找到占用的端口号,并且找到对应的进程,杀死该进程
 1,先在cmd,输入 netstat -ano 找到占用了该端口号的进程的 pid
 2,在任务管理器中找到pid相同的进程,关闭它
 win7任务管理器默认没有显示pid,需要自己调一下,win10在详细信息里面
 2,温柔:修改自身端口号
 在conf目录下个server的文件, 点进去,找到所有的端口的属性(大概有6个,好像),全改了就OK
 ps:对自己好点,直接杀死吧
5,关闭
 1,正常关闭:
 1,启动 bin 目录下的 shutdowm.bat 文件,就关闭了
 2,可以使用 ctrl+c 关闭
 2,强制关闭:
 点击窗口关闭键。
6,配置
 部署项目的方式:
 1,直接将项目放到webapp目录下
 然后在浏览器里输入 http://localhost:8080/项目名/要访问的文件名
 将项目打成一个后缀名为war 的压缩包,再放在webapps目录下。
 2,配置 conf 目录下的 server.xml 文件
					在
					
 docBase : 项目存放的路径
 path : 虚拟目录
 后面通过服务器访问,直接用虚拟目录就可以
 http://localhost:8080/虚拟目录/要访问的文件名
 3,在 conf 目录下的 Catalina 目录下的 localhost 创建任意名称的 xml 文件 ,文件中只用写
						
 只写这一句就行,虚拟目录就是该xml的文件名
 http://localhost:8080/xml文件名/要访问的文件名
 这种就叫热部署
 7,在 idea 上部署 tomcat 。。。。这个建议百度,我懒得一步一步截图,推荐b站09_tomcat_与IDEA集成&创建web项目_哔哩哔哩_bilibili这个视频里面去看吧。
Servlet
 概念: 运行在服务器端的小程序
 其实就是一个接口,定义了Java类被浏览器(Tomcat识别)的规则
 这样解释吧,浏览器的动态资源,是需要遵循一定的逻辑才能获取,这个逻辑就是由java类来判断,但这个java类的运行,是在tomcat服务器上运行(我直接理解为,不在jvm虚拟机上运行),但tomcat毕竟不是jvm虚拟机,它只认识一定规范的java类,这个规范就是Servlet
 我们自己写个类,实现Servlet接口,重写方法
 快速入门:
	## 1,创建JavaEE项目
 百度,谢谢
2,定义一个类,实现Servlet接口
public class Servlet_t1 implements Servlet 
3,实现接口中的抽象方法
 idea有快捷键,自己弄
4,配置Servlet
在WEB-INF目录下的web.xml文件中,的
	<servlet>
        <servlet-name>test1</servlet-name><!-- 随便写 -->
        <servlet-class>com.example.demo.Servlet_t1</servlet-class><!-- 需要链接的类的全类名 -->
    </servlet>
    <servlet-mapping>
        <servlet-name>test1</servlet-name><!-- 和上面那个保持一致 -->
        <url-pattern>/test1</url-pattern><!-- 链接 -->
    </servlet-mapping>
 这样写后,当你需要调用这个类后,只需要打开服务器,在浏览器中访问,http://localhost:8080/test1就可以调用了
 这里说一下原理吧。其实也不难,其实主要就是前面学的反射
 拿上面的代码举例吧:
 浏览器访问http://localhost:8080/test1
 先通过localhost:8080 找到主机和端口号,
			然后去该项目的 web.xml 文件里的
 没有就报404,
			有就去拿同父节点下的
			拿到了再去找
			再拿同一个
 最后通过反射,创建该类对象,又因为该类必须继承自Servlet 类,所以肯定重写了,void service() 方法,通过反射创建对象后直接调用该方法
Servlet的方法
下面是继承Servlet接口后需要重写的5个方法,具体效果写注释了
  /**
     *初始化方法,
     * 在Servlet 被创建时执行,会执行一次
     * @param servletConfig
     * @throws ServletException
     */
    @Override
    public void init(ServletConfig servletConfig) throws ServletException {
        System.out.println("Servlet 开始执行");
    }
    /**
     * 获取ServletConfig对象
     * ServletConfig:Servlet的配置对象
     * @return
     */
    @Override
    public ServletConfig getServletConfig() {
        return null;
    }
    /**
     * 提供服务的方法
     * 每一次Servlet被访问的时候都会被执行
     * @param servletRequest
     * @param servletResponse
     * @throws ServletException
     * @throws IOException
     */
    @Override
    public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException {
        System.out.println("HELLO , SERVLET!");
    }
    /**
     * 获取Servlet的一些信息,版本,作者等等
     * @return
     */
    @Override
    public String getServletInfo() {
        return null;
    }
    /**
     * 销毁方法
     * 在服务器正常关闭时,执行,
     * 执行一次
     */
    @Override
    public void destroy() {
        System.out.println("Servlet 关闭");
    }
Servlet 的生命周期
 1,被创建
 执行init方法,只执行一次
 Servlet 什么时候被创建?
 默认情况下:第一次被访问的时候,Servlet被创建
 可以修改配置,使Servlet在服务器启动时被创建
						在 web.xml 文件里,找到该 Servlet 全类名的那个
<!-- 
	指定Servlet的创建时机
	1,第一次被访问时,创建
 			则x为负数(不要写太小)
	2,在服务器启动时,创建
			则x为0或者正整数(不要写太大)
-->
<load-on-startup>x(一个数)</load-on-startup>
 这里说一下,一个Servlet的init方法,只执行一次,说明Servlet在内存中只存在一个对象,Servlet 是单例的!
 多个用户同时访问的时候,可能会设计到线程安全问题
 解决方法:尽量不要在Servlet的类中定义成员变量,即使定义了成员变量,也不要修改其值,直接弄final修饰吧
 2,提供服务
 执行service方法 ,执行多次
 3,被销毁
 执行destroy方法,执行一次
 这个方法可以理解为,人死之前的遗言,也就是说还没死呢,先执行这个方法,释放资源什么的,再销毁程序
Servlet3.0
 好处:
 可以使用注解配置
 步骤:
 1,创建JAVAEE项目,选择Servlet的版本3.0以上,可以不创建web.xml
 2,定义一个类,实现Servlet接口
 3,重写方法
 4,在类上使用@webServlet 注解 ,进行配置
	@WebServlet("Servlet的资源路径")
 这是最简单的写法,建议可以去看看注解类,不过我写累了,不想写了
注意事项
 不要把文件写到,WEB-INF目录下,浏览器是没办法直接访问这个目录的!
 
                    
                     
                    
                 
                    
                 
                
            
         
         浙公网安备 33010602011771号
浙公网安备 33010602011771号