HTTP
HTTP信息头,也成为头字段或部首,是构成HTTP报文的要素之一,具有传递额外重要信息的作用。
HTTP信息头通常包括4类:
- 请求头(Request Header)
- 响应头(Response Header)
- 通用头
- 实体头
请求头是从客户端向服务器发送请求报文时所用的字段。
在网络爬虫采集数据时,为了更好地模拟浏览器访问服务器,经常需要设置一些请求头信息,比如添加多个不同的User-Agent。
响应头是从服务器端向客户端发送响应报文时所用的字段。
Http请求头的字段名及其功能:
字段名 | 功能 |
Accept | 指定客户端可以处理的数据类型 |
Cookie | 客户端发送请求时,会把保存在该请求域名下的所有cookie值一起发送给服务器 |
Accept-Language | 指定浏览器可接收的语言种类 |
Accept-Encoding | 指定浏览器能够进行解码的数据编码格式 |
Referer | 告知服务器请求的原始资源的URL,即包括协议、域名、端口信息等 |
Http响应头的字段名及其功能:
字段名 | 功能 |
Set-Cookie | 用来由服务器端向客户端发送cookie |
Server | 指明服务器软件以及版本号 |
HttpServlet类
看到全类名:就要想到反射!
优先级比较低!
String也有contains???
//
页面分为静态页面(HTML)和动态页面(ASP PHP JSP),其区别在于是否存在与服务器交互。
1. Servlet
servlet是一个重要的技术。Servlet是利用Java类编写的服务器端程序,与平台架构、协议无关,它通常是在服务端运行的程序,打开浏览器即可调用一个。它可以被看做是位于客户端和服务端的中间层,负责接收和请求客户端用户的响应。JSP的实质是Servlet,因为所有的JSP页面传回服务器端时都要转换为Servlet进行编译、运行。由于JSP编写HTML页面直观且易调试,因此JSP逐步取代Servlet在开发页面中的作用。
Servlet: 是前后端交互的基石。
javaweb三大组件:
- Servlet
- Filter(过滤器)
- Listener(监听器)
1.1 Servlet可以对客户端发送的数据进行读取和拦截:
客户端在发送一个请求时,一般而言都会携带一些数据(例如URL中的参数、页面中的表单、Ajax提交的参数等),当一个Servlet接收到这些请求时,Java Servlet中的类通过所提供的方法就能得到这些参数,也正是这个原因,Servlet可以对发送请求起到拦截作用,它在某些请求前先做一个预处理分析,从而判断客户端是否可以做某些请求,当Servlet具有如上功能时,一般称之为拦截器。
1.2 Servlet可以读取客户端请求的隐含数据:
客户端请求的数据可以分为隐含数据和显式数据:隐含数据一般不直接跟随于URL中,它存在于请求的来源、缓存数据(Cookie)、客户端类型中;显式数据是用户可以看到的。Servlet不仅可以处理显式数据,还可以处理隐式数据。
1.3 Servlet运行结果或者生成结果:
当一个Web应用程序对客户端发出的请求做出响应时,一般需要很多中间过程才能得到结果。Servlet起到这个中间角色的功能,协调各组件、各部分完成相应的功能,根据不同的请求做出相应的响应并显示结果。
根据Servlet的功能可以将Servlet的特点概括如下:
- Servlet是一个供其他Java程序(Servlet引擎)调用的Java类,它不能独立运行。
- Servlet引擎是一种容器程序,他负责管理和维护所有Servlet对象的生命周期,因此也被称为Servlet容器或Web容器。
- Servlet的加载、执行流程,以及如何接收客户端发送的数据和如何将数据传输到客户端等具体的底层事务,都是由Servlet引擎来实现的。
Servlet的生命周期:
- init()
- service()
- destroy()
Servlet初始化阶段会创建Servlet对象、创建ServletConfig对象和加载Servlet类及.class对应的数据。
Servlet的工作原理:根小猪同学点餐的过程很类似。用户通过浏览器想Web服务器发生HTTP请求,服务器选择相应的Servlet响应浏览器的请求,并将响应的结果返回给浏览器。
其实服务器中也有一个类似食堂窗口服务员这一角色的组件,称为Servlet引擎,也叫Servlet容器。服务器实际上是通过Servlet
JSP--->前后端分离,前端使用VUE。
JSP的开发效率不高,性能不好。JSP作为了解,VUE一定要回。
servlet是一个复合词,是Server+Applet的组合,翻译为小服务程序,也是运行在服务端的小程序。
Servlet没有main()方法不能独立运行,必须被部署到Servlet容器中,由容器来实例化和调用请求处理方法(如doGet()和doPost()),Servlet容器还负责Servlet加载和Servlet的生命周期管理。Servlet项目在普通的Web服务器中无法运行,需要部署运行在包含Servlet容器的Web服务器中。常见的包含Servlet容器的Web服务器有Tomcat等。
服务器启动之后,用户通过单击某个链接或者直接在浏览器的地址栏中输入URL来访问Servlet服务,请求处理和响应的步骤如下:
- Web服务器接收到HTTP请求。
- Web服务器将请求转发给Servlet容器。
- 容器查找对应的Servlet,如果容器中不存在所需的Servlet,容器就会加载该Servlet。如果存在,则跳转到步骤(5)
- 容器调用Servlet的init()方法对Servlet进行初始化。
- 容器调用Servlet的service()方法(HttpServlet使用doGet()或doPost()等方法)来处理HTTP请求。加载过的Servlet会被保留在容器中,下次该Servlet的请求就不需要初始化了。
- Web服务器将动态生成的结果返回。
2. JSP
Servlet用来响应HTML页面显示时,通过Java代码组成HTML并输出,在处理一些简单页面显示时还可以应付,但是在处理复杂样式(CSS)和动态效果较多(JS)的页面响应时就显得捉襟见肘。把一个.html页面源码使用字串连接起来使用HttpServletResponse返回,可读性和维护性都极差,容易出错且难于追踪。于是,Java官方推出了JSP技术。
JSP注释:<%-- 注释 --%>
JSP全称Java Server Pages, 是一种动态页面开发技术。
Tomcat是一个免费的开源JSP引擎,安装了Tomcat的计算机称作一个Tomcat服务器。
JSP页面实质上也是一个HTML页面,只不过它包含了用于产生动态网页的Java代码,这些java代码可以是JavaBean、SQL语句等。
将动态部分用特殊的标记嵌入即可,这些标记常常以“<%"开始并以"%>”结束。
JSP文件的执行方式是“编译式”,并非“解释式”,即在执行JSP页面时,是把JSP文件先翻译为Servlet形式的Java类型的字节码文件,然后通过Java虚拟机来运行。
在<% ...%>中声明的变量是JSP的局部变量。
在<%! ...%>中声明的变量是JSP的全局变量。
表达式:
<%= 表达式 %>表达式元素表示的是一个在Java脚本语言中被定义的Java表达式,在运行后被自动转换成字符串,然后插入到表达式所在JSP文件的位置显示。例如:
<%=new java.util.Date()%>//输出系统当前时间
<%=1+3+5%>//输出9
JSP的表达式中没有分号,除非在加引号的字符串部分才使用分号。
表达式实际上是被转换成out.println()方法中的内容。如<%="hello world"%>相当于JSP页面中的
<%out.println("hello world");%>
<jsp:useBean>
<jsp:setProperty>
JSP内置对象:
对象 | 主要功能 |
out | 是一个用于向客户端浏览器输出信息的流对象 |
request | 代表客户端的请求,用它可获取客户端的信息 |
response | 代表队客户端的响应 |
session | 用于存放当前用户“全局变量”的容器对象 |
application | 用于存放所有用户“全局变量”的容器对象 |
pageContext | 代表JSP页面的运行环境 |
config | 配置对象,利用它可以获取服务器的配置信息 |
page | 代表JSP页面本身 |
exception | 用于显示异常信息 |
- page对应的是当前的页面,一个JSP页面实质是一个Servlet,对应的page对象的类型是java.lang.Object。
- session是会话对象,在客户端第一次请求时创建,超过一定时间没有访问就会被销毁。超时时间可以自行配置。
- application就是ServletContext,每个应用维护一个。
- pageContext是页面上下文,通过它可以获得page、session和application对象。
request对象主要用于接收客户端通过HTTP协议连接传输到服务器端的数据。
request对象常用方法:
方法 | 说明 |
String getParameter(String name) | 从客户端获取name所指定的参数值 |
void setAttribute(String name, Object obj) | 设定name所指定的属性值为obj |
String getServerName() | 返回服务器名称 |
int getServerPort() | 返回服务器接收请求的端口 |
Session getSession() | 返回请求相关的Session对象 |
Cookie[] getCookies() | 返回客户端所有的Cookie对象 |
void setCharacterEncoding(String chaen) | 设定请求正文中所使用的字符编码 |
HttpSession session1 = request.getSession(); out.println("<font color='blue'>"+session1.getId()+"</font>"); |
|
String str = request.getParameter("radius"); double r; r=Double.parseDouble(str); |
|
response对象用于将服务器端数据发送到客户端以响应客户端的请求。response对象实现HttpServletResponse接口。
Cookie
Cookie是一种应用较久的技术了,早在HTML刚刚出现的时候,在每个独立的页面之间没有办法记录和标识不同的用户,后来人们就发明了Cookie技术,当用户访问网页时,它能够在访问者的机器上创立一个文件,我们把他叫做Cookie,写一段内容进去,来标识不同的用户。
Cookie是一个存储在浏览器目录的文本文件,当浏览器运行时,存储在RAM中。
网站可以利用Cookie跟踪统计用户访问该网站的习惯。
目前Cookie最广泛的是记录用户登录信息。
类型 | 方法名 | 方法解释 |
String | getValue() | 返回Cookie值 |
int | getVersion() | 返回Cookie所遵从的协议版本 |
String | getName() | 返回Cookie的名字 |
String | getPath | 返回Cookie适用的路径。 |
JVM只能识别和处理Java类型文件,并不能识别JSP,JSP最终是由Servlet容器转化为Servlet类,所以JSP的本质还是Servlet。以Tomcat为例,有一个应用的名字是myApp,包含一个hello.jsp文件,则编译后的.class文件放置在*\jsp目录中,则编译后的文件名是hello_jsp.class。
JSP没有也不会完全取代Servlet,因为Servlet和JSP各有所长,也互补缺点,Servlet适合控制逻辑和数据处理,用来做页面展示则可读性差且维护困难;JSP擅长页面显示,如果混入业务逻辑那么显示效果也不好。这种情况也导致了很多时候对JSP和Servlet的使用界限比较模糊甚至二者混用,而MVC模式的出现,有效规避了JSP和Servlet各自的短板,Servlet只负责业务逻辑而不会通过out.append()动态生成HTML代码;JSP专注页面展示,不混入大量的业务代码,提高了代码的可读性和可维护性。
JSP页面第一次被请求时,会有一些延迟,而再次访问时会感觉快了很多。
Tomcat是JSP规范和Servlet规范的参考实现。
MVC模式
MVC分别对应Model、View和Controller的首字母,是将数据模型、视图展现和业务逻辑进行分离的方式来组织代码,以此提高代码的结构性、可重用性、可读性和可维护性。
- Model:模型,要展示的数据,包括数据及其行为。
- View:视图,复杂模型的展示,也就是页面。
- Controller:控制器,负责应用的流程控制,用于接收用户请求,然后委托模型进行处理,再将处理后的结果交给试图展示。
SUN公司是使用JSP+Servlet+JavaBean的技术来实现MVC架构。
- JavaBean作为模型分为两种,一种是数据模型封装业务数据,另一种是业务逻辑模型处理业务操作。
- JSP作为视图层,提供页面展示数据。
- Servlet作为控制器,接收用户请求,实现转换业务模型数据及调用业务模型的相关方法,执行完成后将结果返回给视图。
Selenium
SpringMVC
Spring MVC的正式名称应该是Spring Web MVC。
Spring MVC Web是一个Java Web的后端框架。
组件与依赖注解:
与Spring核心容器一致,配置<context:component-scan>就可以自动扫描和注册对应包下的组件和依赖注入的注解。相比@Component的通用组件注解,SpringMVC项目中可以使用对应不同层级更为精准的自建注解,具体使用如下:
- @Controller:控制器组件。
- @Service:服务组件。
- @Repository:DAO组件。
- @Component:组件的泛型,使用于不好归类的组件类,如一些用于和配置文件对应的类。
依赖注入的注解和核心容器基本相同:
- @Resource:依赖注入,Java标准,默认按名称装配。
- @Autowired:依赖注入,Spring自定义,默认按类型装配。
请求映射与参数注解:
SpringMVC常用的注解汇总表:
请求映射:
注解 | 应用的目标 | 功能 |
@RequestMapping | 类或方法 | 通用请求映射 |
@GetMapping | 类或方法 | GET请求映射,获取数据 |
@PostMapping | 类或方法 | POST请求映射,创建数据 |
@PutMapping | 类或方法 | PUT请求映射,修改数据 |
@patchMapping | 类或方法 | PATCH请求映射,修改部分数据 |
@DeleteMapping | 类或方法 | DELETE请求映射,删除数据 |
参数匹配:
注解 | 应用的目标 | 功能 |
@RequestParam | 方法参数 | 请求参数 |
@PathVariable | 方法参数 | 路径变量 |
@MatrixVariable | 方法参数 | 矩阵变量 |
@ModelAttribute | 方法或方法参数 | 模型属性 |