Java Web开发的总结

前言
今年毕业,学了四年的编程,仍然是个半吊子,新技术太多,不清楚技术的发展方向,这段时间在做Web开发,上网时在网上也找到一些资料,并进行了一些总结,理一下思路。

大中型的公司需要专业人才,小公司需要全才,如果一辈子就吃java这碗饭,就别去研究css,js等等,将精力专注在java,jvm原理,spring原理,mysql锁,事务,多线程,大并发,分布式架构,微服务,以及相关的项目管理等,这样核心竞争力才会越来越高。
大多数人在进行后端开发都是先接触的后台开发框架SSM,SSH,等
大多数项目在java后端都是分类三层,控制层,业务层,持久层。
控制层负责接收参数,调用相关业务层,封装数据,以及路由到jsp页面。然后jsp页面使用各种标签(jstl/el)或者手写java(<%%>)将后台的数据展现出来。
在这种情况下,需求定完了,代码写完了,测试写完了,然后进行发布。
你需要使用maven或者eclipse等工具将代码打包成war包,然后将这个war包发布到你的生产环境下的web容器中(tomcat/jboss/weblogic/websphere/jetty/resin)里
这种情况下,前后端的代码全都在那个war包中,包括js,css,图片,各种第三方库。
在浏览器中输入你的网站域名(www.xxx.com)…浏览器在通过ip路由到你的服务器,在tcp3次握手后,通过tcp、协议开始访问你的web服务器,你的web服务器得到请求后,开始提供服务,接收请求,之后,通过response返回你的应答给浏览器。
现在有这么一种情况,假设你首页中有100张图片,以及一个单表查询,此时,用户的看似一次http请求,其实并不是一次,用户在第一次访问的时候,浏览器中不会有缓存,你的100张图片,浏览器要连着请求100次http请求(这里不讨论http长短链的问题),你的web服务器及维护搜这些请求,都需要耗费内存去创建socket来玩tcp传输。重点来了,这样的话,你的web服务器的压力会非常大,因为页面中的所有请求都只是请求到你这台服务器上,如果1个人还好,如果10000个人并发访问呢,那你的服务器能抗住多少个tcp链接?服务器的内存有多大,能抗住多少IO,你给服务器分的内存有躲到,会不会宕机?
这就是为什么,越是大中型的web应用,越是要解耦。
理论上你可以将数据库+应用程序+消息队列+缓存+用户上传的文件+日志+等等都仍在一台主机上,但是这样就好比把鸡蛋都放在一个篮子中,隐患非常大。
正常的分布式架构,都是要拆开的,你的应用服务器集群(前,后)——文件服务器集群+数据库服务器集群+消息队列集群+缓存集群等等。
下面步入正题,首先以后的大型java web项目都应该尽量避免使用jsp,要前后台解耦,玩分布式架构,这样我们的引用架构才更强。
使用jsp的缺点:
1.动态资源和静态资源全部耦合在一起,无法做到真正的动静分离服务器压力太大,因为服务器会受到各种http请求,例如css的http请求,js的,图片的,当太代码的等等。一旦服务器出现状况,前后台一起玩完,用户体验极差。(之前见过的一些大型网站界面都是用html做的
2.前后端工程师做好html之后,需要有java工程师来将html修改成jsp页面,储存率较高(因为页面中经常会出现大量的js代码),修改问题时需要双方协同开发,效率低下。
3.jsp必须要在支持java的web服务器里运行(例如tomcat等),无法使用nginx等(Nginx 使用基于事件驱动架构,使得其可以支持数以百万级别的 TCP 连接
4.第一次请求jsp,必须要在web服务器中编译成servlet,第一次运行会比较慢。
5.每次请求jsp都是访问servlet再用输出流输出到html页面,效率没有直接用html高。
6.jsp内有较多的标签和表达式,前端工程师在修改页面时会促襟见肘,遇到很多痛点。
7.如果jsp的内容很多,页面响应会很慢,因为是同步加载。
基于上面的一下缺点,我们应该将整个项目的开发权重向前移,实现前后端真正的解耦!
相比之下
以前的老方式是:
1.客户端请求
2.服务器的servlet或者controller接收请求(路由规则由后端制定,整个项目开发的权重大部分在后端)
3.调用service,dao代码完成业务逻辑
4.返回jsp,jsp展现一些动态代码
新的方式是:
1.浏览器发送请求
2.直接到达html页面(路由规则又前端规定,整个项目的开发权重前移)
3.html页面负责调用服务器端接口产生数据(通过ajax等)
4.填充数据,展现动态效果。
这样做的好处是
1.可以真正实现前后端解耦,前端服务器使用nginx。
前端服务器放的是css,js,图片等一系列静态资源(甚至你还可以将css,js,图片等资源放到特定的文件服务器,例如阿里的oss(对象存储),并使用cdn加速),前端服务器负责控制页面引用,跳转没调用后端的接口,后端服务器使用tomcat。
(这里需要使用一些前端工程化的框架比如说nodejs,react,router,react,redux,webpack)
2.发现bug,可以快速定位是谁的问题,不会出现互相踢皮球的象限。
页面逻辑,跳转错误,浏览器兼容性问题,脚本错误,页面内样式错误,全部由前端工程师来负责。接口数据出错,数据没有提交成功,应答超时等问题,全都有后端工程师去解决。双放互不干扰。
3.在大并发的情况下,我们可以同时水平扩展前后端服务器,如淘宝的一个首页就需要2000台服务器做集群来抗住日均多少亿+的日均pv。
4.减少后端服务器的并发压力,除了接口意外的其他所有http请求全部转移到前端nginx上。
5.集市后端服务器暂时超时或者宕机了,前端页面也会正常访问,只不过数据刷不出来而已。
6.也许你也需要有微信相关的轻应用,那样你的接口完全可以共用,如果也有app相关的服务,那么只要铜鼓一些代码重构,也可以大量复用接口,提升效率。
7.页面显示的东西再多也不怕,因为是异步加载。

以上引用自:https://www.php.cn/java-article-418656.html

根据上面接着讨论,前端开发和后台开发在解耦方向做出的改变。

后台开发:
在小型项目上使用的依然是mvc框架,但在大型的项目上MVVM(Model-View-ViewModel)框架更适合需求,MVVM就是将其中的View状态进行抽象化,让视图UI和业务逻辑分开。
MVVM框架的优点
1.低耦合
2.可重用性
3.独立开发
4.可测试

前端开发:
nginx和apache的区别:
1.apache是一个同步多进程模型,一个链接对应着一个进程,而nginx是一步的,多个链接(万级别)可以对应一个进程。
2.nginx轻量级,抗并发,处理静态文件好。
3.Apache超稳定,对php支持比较简单,nginx需要配合其他后端用,处理动态请求权有优势
4.建议使用nginx前端nginx抗并发,后端apache集群,配合起来会更好

前端页面开发模式的变化:
jquery的出现简化了dom
什么是dom驱动:简单来说就是直接通过代码操作页面上的html元素,从而改变值

var contentDiv = document.getElementById('content')
contentDiv.innerHtml = 'hello everyone'

什么是数据驱动:数据驱动,顾名思义,通过数据来驱动页面变化。

<template>
    <div>{{val}}<div>
</template>
<script>
export default {
    data(){
        return {
            val:'text'
        }
    }
}
</script>

dom驱动和数据驱动的对比
1.dom驱动的出现,是为了将标记型文档封装成对象,并将其中所有的内容封装成对象,从而方便地对其中的属性进行操作,这种dom解析方式有很大的弊端:需要将标记型文档放入内存,文档较大是会浪费空间。
2.jquery的出现简化了dom操作,使得操作极为简单,如上面代码所示,只需通过改变val的值就能改变div里面的内容。

MVVM的出现带来的改变:
dom操作时业务无关的逻辑,不应该出现在业务代码中,虽然使用jquery简化看很多,但代码依然难以维护和复用的,而MVVM把数据和视图的绑定变成了自动化的操作,进而把dom操作从业务代码中移除。业务代码因此变得更加纯粹,也更容易复用。

以上引用:https://blog.csdn.net/Fundebug/article/details/84314230
以上引用:https://www.squirrelzoo.com/archives/642

整理的一些前端开发框架:
bootstrap:入手简单,短期使用建议。
Vue+node.js:上手难度高,功能强大,长远使用考虑,使用MVC/MVVM框架首选。
layui:国人开发的一套框架,更偏向与后端开发人员,做后台框架。
react/Angular:近十年的开源项目,更成熟的技术支持,更全面的功能。

总结:
希望通过这种方式,对java web开发的发展与技术进行一些总结,初步形成自己的知识框架,以上的所有内容,目前只是对后台开发比较了解,对前端的开发还只是刚刚入门阶段,可能其中会出现很多错误。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值