Web相关概念回顾
1,软件架构:
C/S:客户端/服务端
B/S:浏览器/服务端
2,资源分类
静态资源:所有用户访问后,得到的结果是一样的,称为静态资源
静态资源可以直接被浏览器解析,用户请求访问静态资源的过程,称之为 请求!
如:html , css , js
动态资源: 用户访问后,得到的结果不一定是一样的,称为动态资源
动态资源需要先转化为静态资源,再被浏览器解析,返回给用户,这个过程称之为 响应!
如:servlet jsp php asp
3,网络通信三要素
1,IP : 电子设备(计算器)在网络中的唯一标识。
2,端口 : 应用程序在计算器中的唯一标识。范围(0~65535),但尽量不要取(1~1024)的端口号,这些端口号可能被系统占用
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 文件
在<HOST> 标签体中配置
<Contest docBase = "项目存放路径" path="/随便写" />
docBase : 项目存放的路径
path : 虚拟目录
后面通过服务器访问,直接用虚拟目录就可以
http://localhost:8080/虚拟目录/要访问的文件名
3,在 conf 目录下的 Catalina 目录下的 localhost 创建任意名称的 xml 文件 ,文件中只用写
<Contest docBase = "项目存放路径" />
只写这一句就行,虚拟目录就是该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文件中,的<web-app>标签内写
<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 文件里的<url-pattern>找有没有文本内容为 /test1 的标签,
没有就报404,
有就去拿同父节点下的<servlet-name>标签内容,
拿到了再去找<servlet> 标签中的<name>标签,找到内容相同的,
再拿同一个<servlet> 标签中的<servlet-class>标签中的内容(这个内容是全类名)
最后通过反射,创建该类对象,又因为该类必须继承自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>标签,在该标签下添加
<!--
指定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目录下,浏览器是没办法直接访问这个目录的!
Servlet的体系结构
1, Servlet------------接口
GenericServlet 继承 Servlet ------------ 抽象类
将 Servlet 接口中其他的方法做了默认空实现,只将 service() 方法作为抽象
将来定义 Servlet 实现类时,可以继承 GenericServlet ,实现 service() 方法即可
HttpServlet 继承 GenericServlet ------------- 抽象类(推荐)
对 HTTP 协议的一种封装,简化操作
在具体说这个类之前,我先说一下 service() 方法是怎么处理请求的
首先,我们知道,浏览器在发送请求的时候,是有两种方式,,,学过 html 的话,就知道表单发送的时候有两种方式,POST 和 GET 两种, HTTP 发送的时候也有这两种
通过浏览器直接请求是GET方式,目前学的只是只有表单能完成POST方式
了解了浏览器发送请求的两种方式后,我们再说说服务器的接收和处理,,,对于不同的发送方式,浏览器需要不同的方式来处理,,这里是有一个方法的
String method = req.getMethod();//这个方法会根据不同的请求返回一个字符串,如果是GET请求,就会返回"GET",POST请求就会返回"POST";
然后再判断
if("GET".equals(method)){
//get方式获取数据
}else if("POST".equals(method)){
//post方式获取数据
}
其实这个过程是非常麻烦的,但 HttpServlet 帮你做了处理!
使用方法:
1,定义类继承 HttpServlet
2,重写 doGet 和 doPost 方法
Servlet 路径访问相关配置
urlpartten:Servlet 访问路径
一个 Servlet 可以定义多个访问路径,比如:@WebServlet({"/test2","/test22","/test222"})
-
路径定义规则
-
/xxx
-
/xxx/xxx 多层路径,目录结构
-
/*.do 这里也是一定要后缀 .do 试了一下,这样也是可以的@WebServlet("/zhoupeng.com")
标签:web,浏览器,Tomcat,认识,方法,访问,服务器,Servlet From: https://www.cnblogs.com/fssnjcl/p/17032322.html