老师又下了几个任务 先开个坑 把要学的视频先放在这里 以免以后找不到
Docker
fastDFS
Springboot+fastDFS
Nginx
随看随记
- 默认端口号
- tomcat默认端口号:8080
- MySql默认端口号:3306
- http默认端口号:80
- https默认端口号:443
- 网站是如何访问的
- 首先检查本机的C:\Windows\System32\drivers\etc\hosts有没有域名映射
- 如果有直接返回对应的ip,直接访问该网页
- 如果没有,去DNS服务站中寻找,找到了就访问,找不到就找不到网页
- 首先检查本机的C:\Windows\System32\drivers\etc\hosts有没有域名映射
- 网页乱码问题的解决
- 编码:URLEncoder.encoder(“学习”,“utf-8”)
- 解码:URLDecoder.decoder(cookie.getvalue(),“utf-8”)
基本概念
WEB服务器
- 三高问题:高并发,高可用,高性能
- B/S:浏览器端和服务器端
- C/S:客户端和服务器
- JSP/Servlet: sun主推的B/S框架 其对应的位置就是上图的WebService位置
TomCat
tomcat配置
- tomcat默认配置
<Connector port="8080" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" />
- 可以配置的主机名称
默认主机名为localhost—>127.0.0.1
默认的网站存放位置为:webapps
不要修改引擎<Host name="localhost" appBase="webapps" unpackWARs="true" autoDeploy="true">
<Engine name="Catalina" defaultHost="localhost">
- 将指定的web应用放置到tomcat中的webapps文件夹下就可以进行访问了
- 发布网站时应该有的结构
- webapps
- myWeb
- WEB-INFO
- classes: java程序
- lib:web应用所依赖的jar包
- web.xml:网站的配置文件
- index.html 默认的首页
- static
- css
- style.css
- js
- img
- css
- WEB-INFO
- myWeb
- webapps
Http
一种超文本传输协议,是一种简单的请求响应协议,通常运行在TCP之上
- http/1.0 客户端和web服务器连接后只能获得一个web资源,断开连接
- http/1.1 客户端和web服务器连接后,可以获得多个web资源。
Http请求
- 客户端 – 发请求(request) – 服务器
- 请求行
- 请求方式
- get:能够携带的参数少,大小有限制,会在url地址栏中显示数据内容,不安全,但高效。
- post :能够携带的参数多,大小无限制,不会在url地址栏中显示数据内容,安全,但不高效。
- 请求方式
- 消息头
Http响应
- 服务器 – 响应 – 客户端
- 响应体
- 响应状态码
- 200: 响应成功
- 3xx:请求重定向
- 4xx:找不到资源
- 5xx:服务器代码错误 502网关错误
Maven
maven中 注意加上以下代码 可以把资源加载成class
<build>
<resources>
<resource>
<directory>src/main/resources</directory>
<includes>
<include>**/*.properties</include>
<include>**/*.xml</include>
</includes>
<filtering>true</filtering>
</resource>
<resource>
<directory>src/main/java</directory>
<includes>
<include>**/*.properties</include>
<include>**/*.xml</include>
</includes>
<filtering>true</filtering>
</resource>
</resources>
</build>
Servlet
HelloServlet
-
在父工程中建立maven项目,删除src,建立父maven项目。在父maven项目中建立子maven项目,可以继承父项目的依赖
<dependencies> <!-- https://mvnrepository.com/artifact/javax.servlet/javax.servlet-api --> <dependency> <groupId>javax.servlet</groupId> <artifactId>javax.servlet-api</artifactId> <version>4.0.1</version> </dependency> <!-- https://mvnrepository.com/artifact/javax.servlet.jsp/javax.servlet.jsp-api --> <dependency> <groupId>javax.servlet.jsp</groupId> <artifactId>javax.servlet.jsp-api</artifactId> <version>2.3.3</version> </dependency> </dependencies
-
webapp.xml 最新模板
<?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" metadata-complete="true"> </web-app>
-
恢复maven结构
-
编写servlet程序
-
编写一个普通类
-
实现一个接口,直接继承HttpServlet
-
对doget和dopost方法进行重写
public class HelloServlet extends HttpServlet { @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { PrintWriter writer = resp.getWriter(); writer.println("helloWorld!!!!!!!!!!"); } @Override protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { doGet(req, resp); } }
-
编写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" metadata-complete="true"> <servlet> <servlet-name>helloServlet</servlet-name> <servlet-class>com.paleatta.servlet.HelloServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>helloServlet</servlet-name> <url-pattern>/hello</url-pattern> </servlet-mapping> </web-app>
注意 url-pattern的/千万不要忘记 否则会出大问题,我就是找了半天才发现缺了一个/
-
配置Tomcat
-
Servlet原理
- 我们主要通过重写service方法来进行请求和相应之间的达成关系
servlet-mapping
- 一个Servlet可以指定一个映射路径
<servlet>
<servlet-name>helloServlet</servlet-name>
<servlet-class>com.paleatta.servlet.HelloServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>helloServlet</servlet-name>
<url-pattern>/hello</url-pattern>
</servlet-mapping>
- 一个Servlet可以指定多个映射路径
<servlet>
<servlet-name>helloServlet</servlet-name>
<servlet-class>com.paleatta.servlet.HelloServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>helloServlet</servlet-name>
<url-pattern>/hello</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>helloServlet</servlet-name>
<url-pattern>/hello1</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>helloServlet</servlet-name>
<url-pattern>/hello2</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>helloServlet</servlet-name>
<url-pattern>/hello3</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>helloServlet</servlet-name>
<url-pattern>/hello4</url-pattern>
</servlet-mapping>
- 一个Servlet可以指定一个通用映射路径,可以通过添加通配符进行映射通用路径
<servlet>
<servlet-name>helloServlet</servlet-name>
<servlet-class>com.paleatta.servlet.HelloServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>helloServlet</servlet-name>
<url-pattern>/hello/*</url-pattern>
</servlet-mapping>
-
可以指定一些前缀或者后缀 切记不要加/, * 前面不能加映射通配符/
<servlet> <servlet-name>helloServlet</servlet-name> <servlet-class>com.paleatta.servlet.HelloServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>helloServlet</servlet-name> <url-pattern>*.paleatta</url-pattern> </servlet-mapping>
ServletContext
- 数据共享
- servlet是通过web容器生成的上下文,可以在一个web容器下的所有servlet中共用。
public class SetServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
ServletContext servletContext = this.getServletContext();
String username = "paleatta";
servletContext.setAttribute("username",username);
}
}
public class HelloServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
ServletContext servletContext = this.getServletContext();
String username = (String) servletContext.getAttribute("username");
resp.setCharacterEncoding("utf-8");
resp.setContentType("text/html");
resp.getWriter().println("名字"+username);
}
<servlet>
<servlet-name>helloServlet</servlet-name>
<servlet-class>com.paleatta.servlet.HelloServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>helloServlet</servlet-name>
<url-pattern>/hello</url-pattern>
</servlet-mapping>
<servlet>
<servlet-name>setServlet</servlet-name>
<servlet-class>com.paleatta.servlet.SetServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>setServlet</servlet-name>
<url-pattern>/gets</url-pattern>
</servlet-mapping>
HttpServletResponse
- web服务器从客户端接受http请求,针对这个请求,会分别创建一个代表请求的HttpServletRequest对象,和一个代表响应的HttpServletResponse
- 获取客户端请求的参数 : HttpServletRequest
- 提供客户端需要的参数 : HttpServletResponse
- 下载文件:
- 获取下载文件的路径
- 下载的文件名是啥
- 使得浏览器支持我们下载的内容
- 获取下载文件的输入流
- 创建缓冲区
- 获取OutputStream对象
- 将FileOutputStream写入buffer中
- 使用OutputStream将缓冲区的数据输出到客户端
String realPath = "E:\\learn\\SpringMVC\\HelloServlet\\response\\src\\main\\resources\\nobug.jpg";
System.out.println(realPath);
String fileName = realPath.substring(realPath.lastIndexOf("\\") + 1);
resp.setHeader("Content-Disposition", "attachment;filename=" + fileName);
FileInputStream inputStream = new FileInputStream(realPath);
int len = 0;
byte[] buffer = new byte[1024];
ServletOutputStream outputStream = resp.getOutputStream();
while ((len = inputStream.read(buffer)) > 0) {
outputStream.write(buffer, 0, len);
}
inputStream.close();
outputStream.close();
- response实现重定向
-
resp.sendRedirect("/hello"); 将指定的路由重定向到/hello 上
-
请求转发路径不会发生变化,但是页面会变化到重定向的页面
-
如下图所示,在A访问B时,B将C的内容请求后返回给A,因此A仅仅需要访问B的路径就可以了,而不需要访问C的路径。
-
重定向是路径和页面都会发生变化的
-
因为重定向是A在请求发给B后,B将请求返回给A,要求A请求C,因此A实际上是请求了C而不是B,因此路径和内容都是C的内容。
-
HttpServletRequest
- 代表了客户端的请求
- 获取前端传递的参数
- 请求转发
Cookie & Session
- 服务器给客户端一个令牌,客户端下次访问服务端时带上令牌就可以;Cookie
- 服务器登记用户曾经来过,客户端下次访问自动匹配对象;Session
Cookie 令牌 网站登录后,下次不用再登陆,直接进行访问
- 处理cookie可以像处理键值对Str,Obj一样,进行处理,有特定的name值和value值
- cookie可以通过设置setMaxAge参数来设置该条cookie的有效期。
- cookie的细节问题
- 一个cookie只能保存一个信息;
- 一个web站点能给浏览器发送多个cookie,最多存放20个cookie
- Cookie的大小有4Kb的限制
- 浏览器的cookie上限是300个。
Session 会话
- 什么是session
- 我服务器回给每一个用户创建一个Session对象
- 一个Session独占一格浏览器,只要浏览器没有关闭,这个session就会存在
- 用户登录后,整个网闸你都可以访问
- Session和Cookie的区别
- Cooki是吧用户的数据写给用户的浏览器,浏览器保存
- Session把用户的数据写到用户独占的Session中,服务器中保存
- Session对象有服务创建
- 使用场景
- 保存一个登陆用户的信息
- 在震哥哥网站中经常会使用过的数据,