web开发
服务器:服务器本身就是一段应用程序,作用:用于存放可执行的代码。根据用户的请求去匹配一段在报务器中保存的代码,并将之运行起来,最后将运行的结果反馈给用户。
服务器的类型:
apache nginx tomcat。。。。
tomcat安装:
安装包解压即可用。
解压时注意:解压一个无中文无空格的目录中。
配置环境变量。
web项目的架构形式:
CS:c:client(客户端) s:server(服务端)
优势:客户端和服务端都是同一家公司开发的,客户端与服务端的通信成本很低
缺点:客户端需要单独进行开发,客户端一般都比较大,下载时比较耗资源
BS:b:browse(浏览器), s:server(服务端)
实际上将浏览器当成了通用的客户端。
优势:无需开发专用的客户端,使用浏览器作为通用客户端。无需下载,节约资源。
缺点:浏览器与服务端的通信将变得非常困难。
协议:
HTTP协议,超文本传输协议 hyper text transfer protocal,是一个简单的请求-响应协议。
http请求格式:
1、请求行:请求提交方式 URL 。。。。。
2、请求头:以键值对的形式出现
3、空行
4、请求正文:请求的提交方式决定了是否存在请求正文。
GET:无请求正文,因为用户提交的数据会拼接在URL后
POST:有请求正文,因为URL中不拼接用户数据,需要通过请求正文将用户提交的数据发送到后台服务器中
http响应格式
响应状态码
常见错误响应状态码
400-499 客户端错误响应
- 400 Bad Request: 请求语法有问题,服务器无法识别:没有host请求头字段,或者设置了超过一个的host请求头字段。
- 401 UnAuthorized: 客户端未授权该请求。缺乏有效的身份认证凭证,一般可能是未登陆。登陆后一般都解决问题。
- 403 Forbidden: 服务器拒绝响应。权限不足。
- 404 Not Found: URL无效或者URL有效但是没有资源。
- 405 Method Not Allowed: 请求方式Method不允许。
- 406 Not Acceptable: 资源类型不符合服务器要求。
- 407 Proxy Authorization Required: 需要代理授权。
- 408 Request Timeout:服务器将不再使用的连接关闭。响应头会有Connection: close。
- 426 Upgrade Required: 告诉客户端需要升级通信协议。
500-599 服务器错误响应
- 500 Internal Server Error: 服务器内部错误,未捕获。
- 502 Bad Gateway: 服务器作为网关使用时,收到上游服务器返回的无效响应。
- 503 Service Unavailable: 无法服务。一般发生在因维护而停机或者服务过载。一般还会伴随着返回一个响应头Retry-After: 说明恢复服务的估计时间。
- 504 Gateway Timeout: 网关超时。服务器作为网关或者代理,不能及时从上游服务器获取响应返回给客户端。
- 505 Http Version Not Supported: 发出的请求http版本服务器不支持。如果请求通过http2发送,服务器不支持http2.0,就会返回该状态码。
URI和URL
URI:统一资源标识符,作用:用于标记一个互联网上的资源名称。
URL:统一资源定位符,作用:不但可以标记一个互联网上的资源名称,还可以标记该资源所在的位置。URL是URI的子集。
uri表现形式:协议:资源名称
fttp://a.png
url的表现形式:协议+主机名+端口+资源名称
http://192.168.40.132:8099/a.png
ip:用于定位一台互联网上的设备
端口:用于定位设备中的某个软件
web开发三大组件
三大组件:servlet、filter、 listener
servlet
作用:接收请求,作出响应。
servlet的三种创建方式
1、实现servlet接口
package com.woniuxy.servlet;
import javax.servlet.*;
import java.io.IOException;
/**
* 实现servlet接口创建servlet
*/
public class ImplementsServletInterfaceServlet implements Servlet {
/**
* servlet的初始化时执行的方法
* @param servletConfig
* @throws ServletException
*/
@Override
public void init(ServletConfig servletConfig) throws ServletException {
System.out.println("servlet init...");
}
/**
* 此方法用于获取servletConfig
* @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("servlet service...");
}
/**
* 用于编写一些对当前servlet的描述信息
* @return
*/
@Override
public String getServletInfo() {
return null;
}
/**
* servlet销毁时调用的方法
*/
@Override
public void destroy() {
System.out.println("servlet destroy...");
}
}
2、继承GenericServlet
package com.woniuxy.servlet;
import javax.servlet.GenericServlet;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import java.io.IOException;
public class ExtendsGenericServlet extends GenericServlet {
@Override
public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException {
System.out.println("ExtendsGenericServlet service...");
}
}
3、继承HttpServlet
package com.woniuxy.servlet;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse