0,注意事项:
打包为war:
JDK版本不能太高:File->ProjectSrtucture + File->Settings->Build Exception Deployment ->compiler->Java compiler + pom.xml
tomat依赖级别为provide,run->debug-> config->Application->Main->build and run->modify options->include provide scope
1<dependency>
2<groupId>javax.servlet</groupId>
3<artifactId>javax.servlet-api</artifactId>
4<version>4.0.0</version>
5<scope>provided</scope> <!--表示编译时使用,但不会打包到.war文件中,因为运行期Web服务器本身已经提供了Servlet API相关的jar包。 -->
6</dependency>
7<dependency>
8<groupId>org.apache.tomcat.embed</groupId>
9<artifactId>tomcat-embed-core</artifactId>
10<version>9.0.26</version>
11<scope>provided</scope>
12</dependency>
13<dependency>
14<groupId>org.apache.tomcat.embed</groupId>
15<artifactId>tomcat-embed-jasper</artifactId>
16<version>9.0.26</version>
17<scope>provided</scope>
18</dependency>
把注解打包到Class文件,File->Settings->Build Exception Deployment ->compiler->Java compiler->Addition command line parameters添加:-parameters
xxxxxxxxxx
141<build>
2<finalName>LearnJava</finalName>
3<plugins>
4<plugin>
5<groupId>org.apache.maven.plugins</groupId>
6<artifactId>maven-compiler-plugin</artifactId>
7<configuration>
8<compilerArgs>
9<arg>-parameters</arg>
10</compilerArgs>
11</configuration>
12</plugin>
13</plugins>
14</build>
模板必须放在webapp/WEB-INF/templates
目录下,服务器会自动阻止用户直接访问WEB-INF下没有数据的模板,静态文件必须放在webapp/static
目录下。
文件结构
xxxxxxxxxx
411web-mvc
2├── pom.xml
3└── src
4└── main
5├── java
6│ └── com
7│ └── itranswarp
8│ └── learnjava
9│ ├── Main.java
10│ ├── bean
11│ │ ├── SignInBean.java
12│ │ └── User.java
13│ ├── filters
14│ │ └── MyFilter.java
15│ ├── Lisenter
16│ │ └── MyListener.java
17│ ├── controller
18│ │ ├── IndexController.java
19│ │ └── UserController.java
20│ └── framework
21│ ├── DispatcherServlet.java
22│ ├── FileServlet.java
23│ ├── GetMapping.java
24│ ├── ModelAndView.java
25│ ├── PostMapping.java
26│ └── ViewEngine.java
27└── webapp
28├── WEB-INF
29│ ├── templates
30│ │ ├── _base.html
31│ │ ├── hello.html
32│ │ ├── index.html
33│ │ ├── profile.html
34│ │ └── signin.html
35│ └── web.xml
36└── static
37├── css
38│ └── bootstrap.css
39└── js
40├── bootstrap.js
41└── jquery.js
1,Servlet提供的接口仍然偏底层,需要实现Servlet调用相关接口;JSP对页面开发不友好,更好的替代品是模板引擎;业务逻辑最好由纯粹的Java类实现,而不是强迫继承自Servlet。
2,MVC:
控制器:接受并处理请求,并把结果封装成模型传递给视图。视图:接收控制器传递的模型渲染传递HTML文件给用户。模型:控制器处理结果的封装,用于在控制器与视图间传递数据。
3,高级MVC:
、
HttpServletResponse、
HttpSession,和其它类型作为方法参数,通过处理获得要显示的数据Bean,并指明显示Bean所需要的渲染模板,构建ModelAndView对象。Controller不需要实现特定接口,方法只需返回ModelAndView对象。/
,/
表示根请求或者未知的请求,所以所有的请求都会经由DispatcherServlet处理。内部首先扫描所有的Controller,为其中的每个方法建立一个Dispatcher,并构建两个Map保存扫描结果,一个map对应所有的处理Get请求的方法,一个map对应所有的处理Post请求的方法,map中key为方法要处理的URL,value为方法对应的Dispatcher。然后override doPost和doGet方法,在 doPost和doGet方法中通过HttpServletRequest 获得URL并从Map中根据URL获得处理该请求的Dispatcher,然后调用Dispatcher的run方法并传入HttpServletRequest ,HttpServletResponse参数,获得ModelAndView对象,将ModelAndView对象传递给渲染引擎进行渲染。ServletContext
,以及Web应用程序关闭后自动调用它的摧毁方法摧毁ServletContext
。对于每个WebApp,Web服务器都会为其创建一个全局唯一的ServletContext
实例,可用于设置和共享配置信息,如数据库连接。/static/
目录,有些Web服务器会自动为加一个专门负责处理静态文件的Servlet,但如果IndexServlet
映射路径为/
,会屏蔽掉处理静态文件的Servlet映射。因此,需要自己编写一个处理静态文件的FileServlet
。DispatcherServlet
捕获Handler
),最后以HandlerExecutionChain
对象的形式返回Request
中的模型数据,填充Handler
入参,开始执行Handler
(Controller
)ModelAndView
给DispatcherServlet
View
对象对ModelAndView
中的模型数据进行视图渲染DNS 解析: 域名树(.->…->单台计算机)、递归查询的过程 ,本地域名服务器 -> 向根域名服务器(. ) -> com顶级域名服务器(.com. )->google.com域名服务器(google.com.) ->… 找到后缓存到本地域名服务器。
缓存机制:浏览器缓存,系统缓存,路由器缓存,IPS服务器缓存,域名服务器缓存。
根域名服务器(.)收到请求后->返回这个(.com)顶级DNS服务器的IP->请求者(本地域名服务器)收到这台顶级DNS的服务器IP->向该服务器发起查询->.com服务器就会返回下一级的DNS服务器(google.com)的IP->请求者(本地域名服务器)继续查找,直到服务器找到(www.google.com)的主机。
DNS负载均衡:又叫做DNS重定向,返回一个跟用户最接近的点的IP地址给用户。
TCP 连接:三次握手:请求连接、同意连接、同意连接信号的确认。
发送 HTTP 请求:HTTPS:HTTP + SSL(or TLS),非对称加密,对称加密。HTTP请求报文: 请求行(GET index.html HTTP/1.1), 请求报头(附加信息)和请求正文(POST, PUT等方法需要客户端向服务器传递数据)。
服务器处理请求并返回 HTTP 报文:HTTP响应报文: 状态码, 响应报头和响应报文。缓存:Last-Modify(响应头) + If-Modified-Since(请求头),时间比对后若未修改返回304状态码,浏览器将从缓存中获取资源。反之返回200和资源内容。
浏览器解析渲染页面:WebKit渲染,边解析边渲染,下载资源(图片)。
连接结束:TCP释放连接四次握手、持久连接(keep-alive)