本来想写一篇关于jstl和el的文章,但是写起来之后发现,先要说清楚jsp。
jsp:java server page
明确一点:我们的web工程实现了什么? 其实说到底就是数据的展示和收集。
数据的收集:用户在浏览器中输入一个地址,填写一个姓名,点击一下,滑动一下,甚至是盯着屏幕看,都可以看做数据收集。这个过程在客户端实现。
数据的展示:将一段新闻,一个页面等等,返回给到前端,这就是展示。jsp页面就是为了让显示更好看。
可能你听到这个比较纳闷,让页面显示不应该是html,css的作用吗?
是这样的?但是这有个前提,就是你html必须将需要展示数据展示出来。 记住数据才是重点,样式反倒是其次(当然,一个赏心悦目的页面现在同样非常重要)。
其实说到底:这里就是一个如何把样式和数据统一起来。
如果仅仅有数据,太丑,仅仅有样式,没意义。两种解决方案
1. 先给客户端一个样式,然后获取数据,通过js将数据显示在页面。也就是前后端分离思想。
2. 将数据直接填写到样式中,然后将数据和样式一起返回到客户端。
优缺点:
1. 前后端分离优点:可以让前后端的工作互不相关。专业的人做专业的事情。加快项目进度。 缺点:需要增加人员,后端人员对前端的理解减弱。可能会有多余数据传输(很多时候,一个接口多个地方使用,同一个api)。数据直接暴露,增加风险(有部分)。
2. 数据样式一起 优点:加深后端人员对前端技术理解。数据使用粒度容易把握。 缺点:不利于快速开发,前后端人员工作耦合,前后端代码也有耦合。前端调试麻烦。
ps:这里的优缺点个人见解,网上有成篇大章有关优缺点的。 这都是一些题外话,想到了就写上了。
jsp就是数据样式一体的具体体现。它的做法是,在样式上,将数据进行解析,嵌套到页面上,然后将整个页面返回到客户端(浏览器)。
例如:有个a标签,服务器需要动态展示一个名字,比如登录的是张三,就出现张三。 那就在返回前 将战三两个字,嵌入到a标签中。 <a>张三</a>
这就是我们所说的,jsp为动态资源(里面的内容能够动态发送变化),而js和css等为静态资源的原因。 有人说我的js也可以,我前端页面点击,填写等等。这里的动态指的是在服务器上,资源能否变化。
前面只说了jsp是数据样式一体的。它是如何实现的。 这里只说原理,不做深入说明。
我们都知道一句话,jsp就是servlet,可是我们每次看到的就是一个.jsp文件,servlet至少也是一个类,两者差距有点大。
这里就有一个jsp的翻译工作,其实就是在客户端访问jsp的时候,将jsp转化为一个servlet类。 归根结底,在java中,资源都是通过流输出的,只要遇到 html啊,a标签这些,全部输出,遇到jsp中的数据处理,按照规则转为java代码。
例如${username}这个,就是从几大域对象中获取这个属性的值就可以啦。
最终类似返回了一个静态页面,只不过是将数据放到的指定的地方。
说到底,就是拿到一个html的页面,在里面响应位置添加了一些数据而已。