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
xxxxxxxxxx141<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目录下。
文件结构
xxxxxxxxxx411web-mvc2├── pom.xml3└── src4└── main5├── java6│ └── com7│ └── itranswarp8│ └── learnjava9│ ├── Main.java10│ ├── bean11│ │ ├── SignInBean.java12│ │ └── User.java13│ ├── filters14│ │ └── MyFilter.java15│ ├── Lisenter16│ │ └── MyListener.java17│ ├── controller18│ │ ├── IndexController.java19│ │ └── UserController.java20│ └── framework21│ ├── DispatcherServlet.java22│ ├── FileServlet.java23│ ├── GetMapping.java24│ ├── ModelAndView.java25│ ├── PostMapping.java26│ └── ViewEngine.java27└── webapp28├── WEB-INF29│ ├── templates30│ │ ├── _base.html31│ │ ├── hello.html32│ │ ├── index.html33│ │ ├── profile.html34│ │ └── signin.html35│ └── web.xml36└── static37├── css38│ └── bootstrap.css39└── js40├── bootstrap.js41└── 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给DispatcherServletView对象对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)