Servent
关于系统架构
1.系统架构包括什么形式?
-
C/S架构
-
B/S架构
2.C/S架构?
-
Client/Server(客户端/服务器)
-
C/S架构的软件或者说系统有哪些呢?
-
C/S框架的特点:无需安装特定的客户端软件
-
C/S框架的系统优点和缺点分别是什么?
-
优点:
-
速度好(软件中的数据大部分都是集成到客户端软件中的,很少量的数据从服务器端传送过来,所以C/S结构的系统速度快)
-
体验好(速度又快,界面又酷炫,当然体验好了)
-
界面酷炫(专门的语言去实现界面的,更加灵活)
-
服务器压力小(因为大量的数据都是集成在客户端软件当中,所以服务器只需要传送很少的数据量,当然服务器压力小)
-
安全(因为大量的数据是集成在客户端软件当中的,并且客户端有很多个,服务器虽然只有一个,就算服务器那边受损了,问题也不大,因为大量的数据在多个客户端上有缓存,有存储,所以从这个方面来说,C/S结构的系统比较安全)
-
-
缺点:
-
升级维护比较差劲(升级维护比较麻烦,每一个客户端软件都需要升级,有一些软件不是那么容易安装的)
-
-
3.B/S架构
-
B/S(Browser/Server,浏览器/服务器)
-
B/S结构的系统还是一个c/s,只不过这个C比较特殊,这个Client是一个固定不变的浏览器软件
-
优点:
-
升级维护方便,成本比较低。(只需要升级服务器端即可)
-
不需要安装特定的客户端软件,用户操作极其方便,只需要打开浏览器,输入网址即可
-
-
缺点:
-
速度慢(不是因为带宽低的问题,是因为所有的数据都是在服务器上,用户发送的每一个请求都是需要服务器全身心地响应数据,所以)
-
体验差(界面不是那么酷炫,因为浏览器只支持三个语言HTML css JavaScript 再加上速度慢)
-
不安全(所有的数据都在服务器上,只要服务器发生销毁,最终数据全部丢失)
-
4.c/s和B/S结构哪个好,哪个不好?
-
这个问题在不同的业务场景下有不同的使用场景
-
娱乐性软件建议使用?
-
c/s结构
-
-
公司内部使用的一些业务软件建议使用?
-
公司内部使用的系统,需要维护成本低
-
公司内部使用的系统,不需要很酷炫
-
公司内部使用的企业版系统主要是能够进行数据的维护即可
-
B/S结构
-
5.注意了:开发B/S结构的系统,其实就是开发网站,其实就是开发一个WEB系统
-
开发一个web系统需要哪些技术
-
web前端(运行在浏览器上的程序)
-
html
-
css
-
javascript
-
-
web后端(web服务器端的程序)
-
Java可以(java做web开发我们称为javaweb开发,javaweb开发最核心的规范:Servlet[Servent Applet 服务器的Java小程序])
-
c语言也可以
-
c++也可以
-
python也可以
-
php也可以
-
B/S结构的系统通信原理(没有涉及到Java小程序)
-
web系统的访问过程
-
第一步:打开浏览器
-
第二步:找到地址栏
-
第三步:输入一个合法的网址
-
第四步:回车
-
第五步:在浏览器上会展示响应的结果
-
-
关于域名
-
www.baidu.com是一个域名
-
在浏览器地址栏中输入域名,回车之后,域名解析器会将域名解析出来一个具体的ip地址和端口号等
-
解析结果也许是:百度一下,你就知道
-
ip地址是啥?
-
计算机在网络当中的一个身份证号,ip地址是唯一的
-
A计算机要想和B计算机通信,首先需要知道B计算机的IP地址,有了IP地址才能建立连接
-
-
端口号是啥?
-
一个端口代表一个软件(一个端口代表一个应用,一个端口仅代表一个服务)
-
一个计算机当中有很多软件,每一个软件启动之后都有一个端口号
-
在同一个计算机上,端口号具有唯一性
-
-
一格web系统的通信原理?通信步骤:
-
第一步:用户输入网址(url)
-
第二步:域名解析器进行域名解析:百度一下,你就知道
-
第三步:浏览器软件在网络中搜索110.242.68.3这一台主机,直到找到这台主机
-
第四步:定位110.242.68.3这台主机上的服务器软件,因为是80端口,可以很轻松的定位到80端口对应的服务器软件
-
第五步:80端口对应的服务器软件得知浏览器想要的资源名是:index.html
-
第六步:服务器软件找到index.html文件,并且将index.html文件中的内容直接输出响应的浏览器上
-
第七步:浏览器接收到来自服务器的代码(html css js)
-
第八步:服务器渲染,执行html css js代码,展示效果
-
-
什么是URL?
-
统一资源定位符(百度一下,你就知道)
-
关于web服务器软件
-
web服务器软件都有哪些?
-
Tomcat(web服务器)
-
jetty(web服务器)
-
JBOSS(应用服务器)
-
weblogic(应用服务器)
-
websphere(应用服务器)
-
-
应用服务器和web服务器的关系?
-
应用服务器实现了Java EE的所有规范(javaEE有十三个不同的规范)
-
web服务器只实现了javaEE中的Servlet+JSP两个核心的规范
-
通过这个讲解说明了:应用服务器是包含web服务器的
-
用过JBOSS服务器的同学应该清楚,JBOSS中内嵌一个Tomcat服务器
-
-
Tomcat下载
-
apache网址:http://www.apache.org
-
tomcat官方网址:http://www.tomcat.apache.org
-
tomcat开源免费的轻量级web服务器
-
可以配置主机的名称
-
默认的主机名为localhost->127.0.0.1
-
默认网站应用存放的位置为:webapps
面试题:
请你谈谈网站是如何访问的?
-
输入一个域名:回车
-
检查本机的配置文件下有没有这个域名映射
-
有:直接返回对应的ip地址,这个地址中,有我们需要访问的web程序,可以直接访问
-
无:去DNS服务器找,找到的话就返回,找不到就返回找不到
-
发布一个web网站
模仿
-
将自己写的网站,放到服务器(tomcat)中指定的web应用文件夹(webapps)下,就可以访问了
-
网站应有的结构
`webapps:tomcat服务器的web目` -root -hh :网站的目录名 -web-inf -classes:java程序 -lib:web应用所依赖的jar包 -web.xml:网站配置文件 —index.html:默认的首页 -static —css -style.css -js -img
HTTP协议:面试
Maven:构建工具
-
Maven安装包
Servlet入门
-
HelloWorld
-
Servlet配置
-
原理
-
什么是http
http(超文本传输协议) 是一个简单的请求-响应协议,它通常运行在tcp之上
-
文本:html,字符串...
-
超文本:图片,音乐,视频,定位,地图...
-
80
https:安全的
-
443
两个时代
http1.0
-
http/1.0:客户端可以与web服务器连接后,只能获得一个web资源,断开连接
http2.0
-
http/1.1:客户端可以与web服务器连接后,可以获得多个web资源,
http请求
-
客户端---发请求(request)---服务器
http响应
-
服务器---响应---客户端
请求行
-
请求行中的请求方式:get
-
请求方式:Get,post,head,delete,put
-
get:请求能够携带的参数比较少,大小有限制,会在浏览器的url地址栏显示数据内容,不安全,但高效
-
post:请求能够携带的参数没有限制,大小没有限制,不会在浏览器的url地址栏显示数据内容,安全,但不高效
消息头
Accept: 告诉浏览器,它所支持的数据类型 Accept-Encoding: 支持哪种编码格式 GBK UTF-8 GB2312 Accept-Language: 告诉浏览器,它的语言环境 Cache-Control: max-age=0 Connection: 告诉浏览器,请求完成是断开还是保持连接 Refresh:告诉客户端,多久刷新一次 Host: 主机。。。。。。/ Location:让网页重新定位
-
响应状态码
200 :请求响应成功 200
3xx:请求重定向
-
重定向:你重新到新位置
4xx:找不到资源 404
-
资源不存在
5xx:服务器代码错误 500 502 网关错误
Maven
我们为什么要学这个技术?
1.在javaweb开发中,需要使用大量的jar包,我们手动去导入
2.如何能够让一个东西自动帮我们导入和配置这个jar包
由此,Maven诞生了
Maven项目架构管理工具
我们目前用来就是方便导入jar包的
Maven的核心思想:约束大于配置
-
有约束,
镜像:方便下载使用
Maven是国外的,国内有墙,我们访问外网会非常的慢; 翻墙,vpn
配置环境变量
在我们的系统环境变量中
配置如下:
M2_HOME maven目录下的bin 目录
MAVEN_HOME maven的目录
在系统的path中配置,%MAVEN_HOME%\bin
检测Maven是否安装成功,保证必须配置完毕
阿里云镜像
镜像:mirrors
-
作用:加速我们的下载
国内推荐使用阿里云的镜像
<mirror> <id>alimaven</id> <mirrorOf>central</mirrorOf> <name>aliyun maven</name> <url>http://maven.aliyun.com/nexus/content/repositories/central/</url> </mirror>
本地仓库
在本地的 仓库,远程仓库
建立一个本地仓库:localRepository
<localRepository>D:\25791\Documents\apache-maven-3.8.6\maven-repo</localRepository>
Servlet
1.Servlet简介
-
Servlet就是sun公司开发动态web的一门技术
-
Sun在这些API中提供一个接口叫做:Servlet,如果想开发一个Servlet程序
只需完成两个小步骤:
-
编写一个类,实现Servlet接口
-
把开发好的Java类部署到web服务器中
把实现了Servlet接口的Java程序叫做,Servlet
-
2.HelloServlet
1.构建一个普通的Maven项目,删掉里面的src目录,以后我们的学习就在这个项目里面建立Moudel;这个空的项目就是Maven主工程
2.关于Maven父子工程的理解:
父项目中会有
<modules> <module>servlet-01</module> </modules>
子项目会有:
<parent> <artifactId>javaweb-01-maven02</artifactId> <groupId>com.he</groupId> <version>1.0-SNAPSHOT</version> </parent>
父项目中的Java子项目可以直接使用
son extends father
3.Maven环境优化
-
修改web.xml为最新的
-
将maven的结构搭建完整
4.编写一个Servlet程序
-
编写一个普通类
-
实现Servlet接口,这里我们直接继承HttpServlet
//由于get或者post只是请求实现的不同的方式,可以相互调用,业务逻辑都一样; @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { ServletOutputStream outputStream = resp.getOutputStream(); PrintWriter writer = resp.getWriter(); writer.print("Hello,Servlet"); } @Override protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { }
5.编写Servlet的映射
为什么需要映射:我们写的是Java程序,但是要通过浏览器访问,而浏览器需要连接web服务器,所有我们需要在web服务器中注册我们写的Servlet,还需要给他一个浏览器能够访问的路径;
6.配置tomcat
略
7.启动测试
Mapping问题
1.一个Servlet可以指定一个映射路径
2.一个Servlet可以指定多个映射路径
3.一个Servlet可以指定通用映射路径
4.指定一些后缀或者前缀等等......
5.优先级问题
指定了固有的映射录井优先级最高,如果找不到就会走默认的处理请求
ServletContext
web容器在启动的时候,它会为每个web程序都创建一个对应的ServletContext对象,它代表了当前的web应用;
-
共享数据
在这个Servlet中保存的数据,可以在另一个Servlet中拿到;
@Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { //this.getInitParameter();初始化数据 //this.getServletConfig();Servlet配置 //this.getServletContext();Servlet上下文 ServletContext context = this.getServletContext(); String username = "小何"; context.setAttribute("username",username);//将一个数据都保存在ServletContext中,名字为Username,值username }
@Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { ServletContext context = this.getServletContext(); String username = (String) context.getAttribute("username") ; resp.setContentType("text/html"); resp.setCharacterEncoding("utf-8"); resp.getWriter().print("名字"+username); } @Override protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { }
<servlet> <servlet-name>hello</servlet-name> <servlet-class>com.he.servlet.HelloServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>hello</servlet-name> <url-pattern>/hello</url-pattern> </servlet-mapping> <servlet> <servlet-name>getc</servlet-name> <servlet-class>com.he.servlet.GetServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>getc</servlet-name> <url-pattern>/getc</url-pattern> </servlet-mapping>
<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" metadata-complete="true"> </web-app>
2.获取初始化参数
<!--配置一些web应用的初始化参数--> <context-param> <param-name>url</param-name> <param-value>jdbc:mysql://localhost:3306/mybatis</param-value> </context-param>
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { ServletContext context = this.getServletContext(); String url = context.getInitParameter("url"); resp.getWriter().print(url); }
3.请求转发
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { ServletContext context = this.getServletContext(); System.out.println("进入了ServletDemo04"); context.getRequestDispatcher("/gp").forward(req,resp); }
4.读取资源文件
Properties
-
在java目录下新建properties
-
在resources目录下新建properties
都被打包到了同一个路径下:classes,我们俗称这个路径为classpath;
思路:需要一个文件流
username = root123 password = 123123
@Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { InputStream is =this.getServletContext().getResourceAsStream("/WEB-INF/classes/com/he/servlet/aa.properties"); Properties prop = new Properties(); prop.load(is); String user = prop.getProperty("username"); String pwd = prop.getProperty("password"); resp.getWriter().print(user+":"+pwd); } @Override protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { doGet(req,resp); }
访问测试即可ok;