一个SQL boy开始搞前后端开发了?
静态Web
HTML :网络传输的全都是html,展示的全部内容
CSS:配合HTML ,做静态的 多样化 规范化 展示
JavaScript:页面动态响应方面的展示,运行在前端
一. Socket
Socket相当于TCP UDP提供给外部的访问接口,客户端 & 服务端 都可以利用Socket来操作 TCP UDP 协议的通信,。
最终全部前后端的传输都需要走Socket
二 . Servlet
web server 本质上是一个 Http(TCP)响应的 .html
处理TCP连接,解析HTTP协议这些底层工作统统扔给现成的Web服务器去做,我们只需要把自己的应用程序跑在Web服务器上。为了实现这一目的,JavaEE提供了Servlet API
把这种程序打成war(Java Web Application Archive)包,然后交给支持Servlet API的Web服务器
Servlet相当于服务器中的控制器
三.JSP
JSP : Java Server Pages
JSP在执行前,会被编译成一个Servlet
3.2 session
用来控制用户的认证,不用反复登陆 等等
3.3 Model1
https://www.javatpoint.com/model-1-and-model-2-mvc-architecture
在JSP中有View 和 逻辑处理功能,可以再次解耦合,于是Model2
3.4 Model2
JSP 仅仅 View,这也就是MVC模式
四. MVC
4.1 MVC 1.0
Servlet 适合编写Java 实现逻辑
JSP适合编写HTML
MVC : Model View Controller
┌───────────────────────┐
┌────>│Controller: UserServlet│
│ └───────────────────────┘
│ │
┌───────┐ │ ┌─────┴─────┐
│Browser│────┘ │Model: User│
│ │<───┐ └─────┬─────┘
└───────┘ │ │
│ ▼
│ ┌───────────────────────┐
└─────│ View: user.jsp │
└───────────────────────┘
HttpServletRequest
.getRequestDispatcher("/WEB-INF/user.jsp")
.forward(req, resp);
origin MVC 的缺点:
- JSP还是有些麻烦了,可以用前端框架
- Controller业务逻辑必须extend Servlet
- Servlet 提供的接口偏底层,模版引擎替代比较好
这样将会产生很多Servlet
前端会给众多Servelt发请求
4.2 MVC 2.0
前端只能给DispatcherServlet 发请求,再由DispatcherServlet 发请求给其他Servlet
这里其他的Servlet改名为Controller
3.2 advanced MVC
HTTP Request ┌─────────────────┐
──────────────────>│DispatcherServlet│
└─────────────────┘
│
┌────────────┼────────────┐
▼ ▼ ▼
┌───────────┐┌───────────┐┌───────────┐
│Controller1││Controller2││Controller3│
└───────────┘└───────────┘└───────────┘
│ │ │
└────────────┼────────────┘
▼
HTTP Response ┌────────────────────┐
<────────────────│render(ModelAndView)│
└────────────────────┘
DispatcherServlet 功能分为:
- 根据请求的url ,判定调用哪一个Controller
URL: http://localhost:8080/pro15/hello.do
ServletPath : /hello.do
/hello.do -> hello
hello -> HelloController
具体实现:
String servletPath = request.getServletPath();
servletPath = servletPath.substring(1);
int lastDotIndex = servletPath.lastIndexOf(".do");
servletPath = servletPath.substring(0,lastDotIndex);
Object contrallerBeanObj = beanMap.get(servletPath);
- 解析加载的配置文件applocationContent.xml 获取servletPath对应的classPath
- 根据classPath 反射调用invoke ,得到对应的bean -> View
4.3 IOC
IOC:Inversion of Control
bean的创建 & 销毁 ,完全交给BeanFactory来控制
在Contraller中需要调用bean 就通过反射的方式获取
DI
DI:Dependency Injection
各个bean之间存在依赖关系,简单可以通过DI的方式在.xml文件中配置好
<beans>
<bean id="dataSource" class="HikariDataSource" />
<bean id="bookService" class="BookService">
<property name="dataSource" ref="dataSource" />
</bean>
<bean id="userService" class="UserService">
<property name="dataSource" ref="dataSource" />
</bean>
</beans>