服务器温习笔记(一)Tomcat和Servlet
动态资源和静态资源
静态资源
所有用户访问后,得到的结果都是一样的,称为静态资源,静态资源可以直接被浏览器解析。如html, css, JavaScript
动态资源
每个用户访问相同的资源后,得到的结果可能不一样。称为动态资源。动态资源被访问后,需要转换成为静态资源,在返回给浏览器。如:sevlet/jsp/php,asp;
web服务器软件
服务器: 安装了服务器软件的计算机
服务器软件: 接收用户的请求,处理请求,做出响应
web服务器软件: 接收用户请求,处理请求,做出响应。
- web服务器软件中,可以部署web项目,让用户通过浏览器来访问这些项目。
- web容器
javaEE: Java语言在企业级开发中使用的技术规范的总和。一共规定了13项大的规范。
常见java web服务器软件
weblogic
weblogic为oracle 公司开发的大型JavaEE服务器,支持所有的JavaEE规范,收费的。
webSphere
webSphere:IBM公司,大型的JavaEE服务器,支持所有的JavaEE规范,收费的。
JBOSS
JBOSS:JBOSS公司,大型的JavaEE服务器,支持所有的JavaEE规范,本身免费,但文档等服务是收费的,所以是间接收费的。
Tomcat
Tomcat:Apache基金组织,中小型的JavaEE服务器,仅仅支持少量的JavaEE规范servlet/jsp,开源的,免费的。
Tomcat
web服务器软件
下载
下载地址
直接找到download下载即可:
tomcat目录结构
安装
安装也是比计较简单,直接解压即可完成安装。
notes:安装目录建议不要有中文和空格。
使用(windows环境)
启动
在windows下启动比较简单,进入解压后的tomcat的bin目录,直接双击startup.bat即可启动
访问浏览器输入:http://localhost:8080
http://ip:8080
已经启动成功
tomcat启动常见的问题
- 黑窗口一闪而过
原因: 没有正确的配置JAVA_HOME环境
tomcat的启动和运行都是依赖于JAVA_HOME,可以参考脚本文件。
此类可直接配置正确的jdk环境变量即可,若果不会配置,请看小猿的文章jdk离线安装即可。 启动报错
可以查看日志文件
此类问题有两种解决方法:
方法一:暴力解决方案
cmd进入黑窗口,输入命令:netstat -ano
在黑窗口中输入命令.
taskmgr.exe
如果pid不显示,可进行如下操作
再次启动就不会报错了。
方法二:修改配置文件
修改tomcat安装目录下的config目录下的server.xml中的默认端口,比较麻烦,还可能会导致修改一次不成功的现象。需要根据错误信息,将所有冲突端口逐一修改。
一般情况下只需要修改下面的一段配置文件。
<Connector port="8080" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443" />
关闭
正常关闭
通过tomcat bin目录下的批处理文件
bin/shutdown.bat
通过ctrl+c
强制关闭
直接点击启动窗口的关闭按钮(X)
配置
配置主要体现在部署项目的方式上:
- 直接将文件目录或者war包放在webapps目录下即可
项目目录+虚拟目录(不用war包,直接拷贝)
简化部署:达成war包,拷贝到webapps下面即可。tomcat将会自动解压并完成部署。 配置文件部署
hello.html文件<!DOCTYPE html>
跳转首页
30秒钟后自动跳转首页
在server.xml中添加部署文件。
<Context docBase="D:\hello" path="/tomcat"/>
其中path是虚拟目录,访问项目。
tomcat中可以部署多个项目,若直接在server.xml配置文件中部署项目,则会破坏原有的默认配置,若有多个部署的项目,则此种方法无法完成。
在conf/Catalina/localhost目下写入xml文件(热部署方法,最推荐的部署方式)
xml文件直接可以将原来的项目标签复制过来并删除path属性
卸载
删除安装目录即可
静态项目和动态项目
java动态项目的目录结构:
项目的根目录
-- WEB-INF目录:
-- web.xml:web项目的核心配置文件
-- classes目录:放置字节码文件的目录
-- lib目录:放置依赖的jar包
如果是静态项目则进行配置即可。
tomcat与idea的整合
需要设置tomcat
最后连续点击ok即可实现tomcat配置,目前小猿的tomcat已成功配置。
建立项目。
点击finish后返回到上一层窗口,点击ok等待项目创建完成即可。
tomcat虚拟目录配置
tomcat实现热部署
选择后就可实现更新资源热部署。
tomcat与idea的相关配合
IDEA会为每一个tomcat部署的项目单独建立一份配置文件
查看控制台的log:Using CATALINA_BASE:C:\Users\lxpxu\AppData\Local\JetBrains\IntelliJIdea2020.1\tomcat_day15
修改端口会改变临时的Servlet
- 工作空间项目 和tomcat部署的web项目
tomcat真正访问的是“tomcat部署的web项目”,“tomcat部署的web项目”对应着”工作空间项目” 的web目录下的所有资源。
web。
WEB-INF目录下的资源不能被浏览器直接访问。 - tomcat断点调试
在需要调试的程序里面打上断点,然后以小虫子的方式启动即可
linux环境下tomcat的安装和使用
至于linux环境下tomcat的安装和使用请看小猿tomcat专栏下的如何在tomcat服务器中手动部署war包文章,其中详细描述了如何在linux下使用tomcat。
servlet
什么是servlet
servlet :server applet 即运行在服务器端的小程序。
servlet 的英文解释是:
servlet本质是一个接口,该接口定义了java类被浏览器访问到(tomcat识别)的规则。
servlet原理图示:
servlet 的用法
- 创建javaEE项目。
- 定义一个类,实现Servlet接口。
实现接口中的抽象方法
实现servlet中五个方法的重写。
在service方法写入响应代码://提供服务的方法
@Override
public void service(ServletRequest servletRequest,
ServletResponse servletResponse) throws ServletException, IOException {
System.out.println("hello java");
}
配置servlet
需要在web.xml中配置servlet接口。<?xml version=”1.0” encoding=”UTF-8”?>
<web-app xmlns=”http://xmlns.jcp.org/xml/ns/javaee“xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee
http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
version="4.0">
<!--set servlet-->
<servlet>
<servlet-name>test01</servlet-name>
<servlet-class>com.feitian.web.servlet.My01Servlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>test01</servlet-name>
<url-pattern>/test01</url-pattern>
</servlet-mapping>
测试结果:
在浏览器输入栏中键入访问地址,就不断会执行service里面的方法。
http://localhost:8080/servlet/test01
servlet执行原理
执行说明:
- 当服务器接受到客户端浏览器的请求后,会解析请求URL路径,获取访问的Servlet的资源路径
- 查找web.xml文件,是否有对应的标签体内容。
- 如果有,则在找到对应的全类名
- tomcat会将字节码文件加载进内存,并且创建其对象
调用其方法(上个例子中暂时调用servlet方法)。
servlet 中几个重要的函数public class My01Servlet implements Servlet {
//首次访问servlet时,servlet被创建,该方法别执行,该方法只能被执行一次@Override
public void init(ServletConfig servletConfig) throws ServletException {
}
//获取servlet配置对象,了解一下即可
@Override
public ServletConfig getServletConfig() {
return null;
}
//提供服务的方法,每访问一次Servlet,就执行一次service方法。可以多次执行
@Override
public void service(ServletRequest servletRequest,
ServletResponse servletResponse)
throws ServletException, IOException {
System.out.println("hello java");
}
//获取servlet的一些信息,版本作者等等。
@Override
public String getServletInfo() {
return null;
}
//销毁方法,在服务器正常关闭之前执行,只执行一次。
//非正常关闭,该方法就不会别执行。
@Override
public void destroy() {
}
}
servlet执行的生命周期
被创建:
执行init方法,只执行一次,一般用于加载资源
Servlet什么时候被创建?
默认情况下,第一次被访问时,Servlet被创建
可以配置执行Servlet的创建时机。
在<servlet>标签下配置
1)第一次被访问时,创建
<load-on-startup>的值为负数
2)在服务器启动时,创建
<load-on-startup>的值为0或正整数
Servlet的init方法,只执行一次,说明一个Servlet在内存中只存在一个对象,Servlet是单例的
多个用户同时访问时,可能存在线程安全问题。
解决:尽量不要在Servlet中定义成员变量。即使定义了成员变量,也不要对修改值
提供服务
每次访问Servlet时,Service方法都会被调用一次,可执行多次
被销毁
Servlet被销毁时执行。服务器关闭时,Servlet被销毁。
只有服务器正常关闭时,才会执行destroy方法且只执行一次。
destroy方法在Servlet被销毁之前执行,一般用于释放资源。
Servlet3.0
优点:
支持注解配置,可以不创建web.xml
注解开发使用步骤
- 创建JavaEE项目,选择Servlet的版本3.0以上,可以不创建web.xml
- 定义一个类,实现servlet接口
- 复写方法
在类上使用@WebServlet注解,进行配置
@WebServlet注解代码public @interface WebServlet {
String name() default "";
String[] value() default { };
String[] urlPatterns() default { };
int loadOnStartup() default -1;
WebInitParam[] initParams() default { };
boolean asyncSupported() default false;
String smallIcon() default "";
String largeIcon() default "";
String description() default "";
String displayName() default "";
}
其中最重要的有urlPatterns,还有value
在servlet实现类上加入
@WebServlet(urlPatterns = "/test02")
//或者直接使用省略模式
@WebServlet("/test02")
Servlet 的体系结构
GenericServlet:将Servlet接口中其他的方法做了默认空实现,只将service()方法作为抽象
将来定义Servlet类时,可以继承GenericServlet,实现service()方法即可
HttpServlet:对http协议的一种封装,简化操作。
- 定义类继承HttpServlet。
- 复写doGet/doPost方法。
Servlet相关配置
- urlpartten:Servlet访问路径
一个Servlet可以定义多个访问路径 :@WebServlet({"/directory01","/directory02","/directory03"})
路径定义规则:
1)/xxx:路径匹配
2)/xxx/xxx:多层路径,目录结构*.do:扩展名匹配
还没有评论,来说两句吧...