用客户端的思想玩转前端

以前所做的大多是客户端方面的工作,很少参与前端的开发,一直以为web前端使用html、js和css写代码是一件挺痛苦的事情,最近在项目中参与了前端界面的开发,再次深入的对于前端的各种功能进行了学习和尝试,突然发现前端并没有以前详细的那么繁琐,很多在移动开发中的经验都能够让我们更快更好的开发出前端的功能。


1.html,css,js

对于任何一个开发者而言,这几样东西都不陌生,也都很清楚在前端界面中的作用,所以这里并不是介绍他们是什么,而是整理下如何引用其他文件中的资源。

html中引用css

在html文件中引用另一个css文件,需要使用link标签,设置rel为shtylesheet
<link href="/res/css/bootstrap.min.css" rel="stylesheet">
之后就可以在其他标签中设置class=xxx来指定样式,如果再设置了class的同时还设置了style,那么会以style设定的参数为准。

html中引用JavaScript

在html文件中引用另一个JavaScript脚本,需要使用script标签,和直接在html中使用js类似
<script type="text/javascript" src="/res/js/cookie.js"></script>

html中引用html

在html中引用其他html代码片段时,有很多方式可以实现,比如可以使用iframe标签嵌套,但我更倾向于使用jQuery的load方法进行导入
 $("#header").load("/header.jsp");
引用html的情况在后面组件化部分详细说明。


2.*.js &*.min.js

在使用js的过程中,用到了两种js的文件,分别以js和min.js作为扩展名,其实两种文件的作用是一样的,只是min.js类似于编译后的js,占用空间更小,而js更方便开发者阅读和修改。


3.组件化开发

在早期的web开发中,虽然已经将html、css和js分离开,但在开发过程中还是以页面为单位开发的


这种开发模式的耦合性比较高,每个模块只是针对所在的页面去实现,各模块几乎没什么复用性(可能js和css的复用相对高一些)。在移动开发的过程中,会将不同的控件(比如按钮、输入框、甚至部分布局)封装成不同的View,然后在不同的场景下对这些View进行操作就可以了。在Web开发中也可以使用这种模式,我们将能够复用的部分(比如header、侧边栏等)封装出来,写在单独的html文件中,这样就就可以在我们需要的时候直接加载这些html,再封装的时候,直接使用<div>标签即可,不必再控件的html中也增加<html><body>等标签。组件化之后的架构变成了这样:


以上两张图均来自 网络


4.前后端分离

在很多传统的web应用开发中,前后端并不是分离开的,比如在struts中,可以在jsp中直接写一些jsp语句直接与后台的action交互,这里出现的问题和上面没有组件化类似,随着工程的不断扩大,程序会越来越臃肿,代码的耦合性也越来越高。因此,将前后端分离开,使得整个架构更加清晰。
后台提供统一的api接口,供前端和客户端调用,而web前端则完全通过ajax的方式与后端进行交互,比如我们要访问一个post的接口,便可以使用下面的代码
$.post("/demo", {key:"value"}, function (data) {
    console.log(data);
}
这样便可以通过异步的post请求对接口进行调用,进行想要进行的操作,除了$.post之外,还有$.get等方法进行不同的http请求,甚至可以通过$.ajax进行更加个性化的设置。通过ajax的方式,使得前端界面只需要关心数据的展示问题,而不需要关心数据是如何处理的,而且使用ajax带来的另外一点好处是只需要刷新局部界面,而不用对整个页面进行刷新。


5.解析json

在java开发中,json的生成与解析是一件很方便的事情,无论是直接使用org,json,还是使用gson等框架,都可以对json进行处理。而在JavaScript中却没有想象的那么简单,jQuery提供了json解析的方法,但是它所能解析的json中,key和value必须都是字符串,否则就会报错。一般而言,json中的key都是字符串,但是value中却可能出现数字等其他类型的内容,经过查找,发现通过 jquery-json可以解决这个问题。解析json也比较容易,可以参考下面的代码
var parsedJson = $.toJSON(data); //解析data
var demo = $.evalJSON(parsedJson).demo;   //获取data中demo对应的值


6.字符串替换

在处理某些内容的时候,需要对字符串进行替换,比如把字符串中所有的a字母替换为b字母,一开始尝试使用replace('a','b')进行替换,结果发现只有第一个匹配的内容被替换掉了,后来发现需要使用正则表达式进行替换,写为:
replace(/a/g,"b")

/a表示替换的内容是a,/g则表示全文中符合的条件。


7.json缩进 

有的时候,我们会希望在网页中展示缩进后的json内容,jQuery为我们提供了很方便的方法
JSON.stringify(data,undefined,2)
其中第一个参数表示我们要转换的json对象,第二个参数一般为null或undefined,第三个参数是缩进的内容,如果是数字则为缩进的空格数。

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
如果你想在服务端向客户端发送数据时,让前端直接渲染接收到的数据,可以按照以下步骤实现: 1. 在服务端创建SSE连接,用于向客户端发送数据。 ``` @GET @Path("/events") @Produces(MediaType.SERVER_SENT_EVENTS) public void getServerSentEvents(@Context SseEventSink eventSink) { //TODO: Add event listener and send events to eventSink } ``` 2. 在服务端添加事件监听器,用于接收客户端发送的请求,并向客户端发送数据。 ``` @POST @Path("/events") @Consumes(MediaType.APPLICATION_JSON) public void postServerSentEvents(String message, @Context Sse sse, @Context SseEventSink eventSink) { OutboundSseEvent event = sse.newEventBuilder() .name("message") .data(message) .build(); eventSink.send(event); } ``` 3. 在前端页面中添加EventSource对象,监听服务端发送的数据,并在回调函数中使用innerHTML将数据渲染到页面中。 ``` var eventSource = new EventSource('http://localhost:8080/events'); eventSource.addEventListener('message', function(event) { document.getElementById('message-container').innerHTML = event.data; }); ``` 在上述代码中,我们使用了document.getElementById('message-container')获取了一个用于显示数据的HTML元素,并将事件回调函数中接收到的数据event.data赋值给innerHTML属性,从而实现了数据的渲染。 注意事项: - SSE连接仅支持单向通信,即服务端只能向客户端发送数据,不能接收客户端发送的数据。 - 在服务端发送数据时,需要使用SseEventSink对象的send方法,将OutboundSseEvent对象发送给客户端。 - 在前端接收数据时,需要使用EventSource对象的addEventListener方法,监听服务端发送的事件,并在事件回调函数中处理数据。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值