前言


    时隔四个月的时间,DRP终于做完了,当初考虑到中间做项目,所以时间长了一点,然后我就发现,我真的看到了现在才看完。所以说,项目定的时间不宜过长,因为定多长时间,自己就会看多长时间。不废话了,总结一下DRP,第一篇博客简单介绍DRP用到的框架。


JSP


    JSP全名为Java Server Page,中文名叫Java服务器页面,其根本是一个简化的Servlet设计。JSP技术有点类似ASP技术,是在传统的HTML网页中,插入Java程序段和JSP标记,从而形成JSP文件。用JSP开发的Web应用是跨平台的,既能在Linux中运行,也能在其他操作系统中运行。


    JSP可以认为就是Servlet,它是在HTML文件中通过标签的形式,嵌入Java代码,通常采用<% %>形式。JSP和Servlet一样,编译完成后会在Tomcat中形成.java文件,它也是在服务器端执行的,执行完成后,返回浏览器HTML文本,显示在浏览器中,称为页面渲染。


    一个JSP文件包括以下几部分:


1、静态数据


    静态数据可以认为是HTML静态页面,它的内容与输出给HTTP相应的内容完全一致。通常的做法是,用HTML写好静态页面,然后引入JSP的文件头,然后将文件改名为.jsp后缀,这也就是JSP页面。文件头可以是从其他项目中拷贝而来,也可以在自己项目中新建JSP页面,它会自动生成JSP头部。


2、JSP指令


    JSP指令常见的是taglib,这是在文件头部引入JSP标签库的指令。另外有include,用于将一个文件包含在这个JSP文件中;import指令用于使一个Java导入声明被插入到最终页面文件中;contentType指令用于规定生成内容的类型;errorPage指令在处理HTTP请求时,如果出现异常,则显示该错误提示信息页面。当然,JSP指令不止这几个,还有其他的指令。


3、JSP脚本元素和变量


    JSP有几个永远可用的脚本变量,分别是out、page、pageContext、request、response、session。out用来向页面中写入数据;page指的是页面本身;pageContext的范围要广,涉及Application中的所有JSP页面;request是Http Request对象;response是Http Response对象;session就是保存对话的session对象。


4、JSP动作

jsp:include

和子过程类似,JAVA SERVLET暂时接管对其它指定的JSP页的请求和响应。当处理完该JSP页后就马上把控制权交还当前JSP页。这样JSP代码就可以在多个JSP页中共享而不用复制。

jsp:param

可以在jsp:include, jsp:forward或jsp:params块之间使用。指定一个将加入请求的当前参数组中的参数。

jsp:forward

用于处理对另一个JSP或SERVLET的请求和响应。控制权永远不会交还给当前JSP页。

jsp:plugin

Netscape Navigator的老版本和Internet Explorer使用不同的标签以嵌入一个applet。这个动作产生为嵌入一个APPLET所需要的指定浏览器标签。

jsp:fallback

如果浏览器不支持APPLETS则会显示的内容。

jsp:getProperty

从指定的JavaBean中获取一个属性值。

jsp:setProperty

在指定的JavaBean中设置一个属性值。

jsp:useBean

创建或者复用一个JavaBean变量到JSP页。


5、用户自定义标签

Servlet


    Servlet是Java编写的服务器端程序,主要功能在于交互式地浏览和修改数据,生成动态Web内容。Servlet运行于支持Java的应用服务器中,从原理上讲,Servlet可以响应任何类型的请求,但是绝大多数情况下Servlet只用来扩展基于HTTP协议的Web服务器。

    客户端和服务端交互的方式:

        1、客户端将请求发给服务端。

        2、服务端将请求信息发送给Servlet。

        3、Servlet生成响应内容,并发送给服务端。响应内容一般动态生成,取决于客户端发送的请求。

        4、服务端将响应返回给客户端。

    一个Servlet被客户端发送的第一个请求激活,然后它会继续运行于后台,等待以后的请求。每个请求会生成一个新的线程,而不是完整的进程,也就是说多个浏览器的请求在同一个进程中的到服务,所以Servlet会有线程安全的问题。

    Servlet的生命周期:

        1、装载Servlet,一般是动态执行

        2、Server创建一个Servlet的实例

        3、Server调用Servlet的init()方法

        4、一个客户端的请求到达Server

        5、Server创建一个请求对象

        6、Server创建一个响应对象

        7、Server激活Servlet的service()方法,传递请求和响应对象作为参数

        8、service()方法获得关于请求对象的信息,处理请求,访问其他资源,获得需要的信息

        9、service()方法使用响应对象的方法,将响应传回Server,最终到达客户端。

JSTL


    JSTL是JSP Standard Tag Library,是JSP的标准标签库,里面有很多JSTL标签,采用这些标签,结合EL表达式,就可以在JSP页面中实现简单功能,例如赋值、循环、判断等。

    使用EL表达式不需要引入Jar包,使用JSTL标签需要将jstl.jar和standard.jar引入到WEB-INF/lib目录下,然后在JSP中添加伪指令,就可以使用标签库中的标签,指令如下:

<%@ taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix="fmt" %> <!--引入函数库-->
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>  <!--引入标签库-->

    taglib是JSP脚本,用于引入标签库。uri是标签库的路径,在standard.jar中有一个META-INF文件夹,其中有各种tld文件,打开tld文件,就可以看到详细信息,包括路径、缩写等。prefix就是缩写名称,也就是用这个名称可以用到某个tld文件中的标签或者函数。

    Servlet中将数据放在request的Attribute中,在页面上可以使用不同的方式去获取,例如:

Servlet中代码:

request.setAttribute("hello", "Hello World");

页面用JSP脚本取值:

<%=request.getAttribute("hello") %>

页面用EL表达式取值:

${hello}

从代码简洁度来说,采用EL表达式取值,代码更简洁。

    而JSTL并不是做这个功能的,JSTL是做页面中简单的逻辑控制的,所以JSP页面一般会跟EL结合者用,它的核心标签有几种:

1、输出数据:

<c:out value="${hello }"></c:out>

2、判断:

<c:if test="${v1 lt v2 }">
	v1小于v2
</c:if>

3、条件控制:

<c:choose>
	<c:when test="${v1 gt v2 }">
		v1大于v2<br>
	</c:when>
	<c:otherwise>
		v1小于v2<br>
	</c:otherwise>
</c:choose>

    除了标签之外,还可以用到函数,引入函数库之后就可以使用。函数库有很多函数,例如日期格式化函数、数字格式化函数、取长度函数等等,在帮助文档中都各有说明。

总结


    其实对于做项目来说,用到什么框架并不重要,如果要知道框架怎么搭起来的,还是需要学习基础知识。JSP其实就是有Java代码的HTML文件,只不过后缀名不一样,而且这部分Java代码也是运行在服务器端的,跟Servlet差不多。听讲课的老师说,他曾经听说过一个项目,没有一个Servlet,只有JSP问题就都解决了,所以说,Servlet的功能JSP同样可以实现,只不过方式不太一样。但是这样的话,JSP的功能就太多了,负担太重,适合于小项目使用,这就是之前的Model1模式。后来的Model2模式就进行了改善,让相应的层做相应的事,Model2模式也是MVC的应用,具体内容,请看下篇博客分解。至于JSTL,如果没有JSTL,我是真想不到HTML如何这么方便的变成动态页面,除非用JS实现。可能是功力尚浅,还未达到那种地步,总之一句话,JSTL很方便的实现了页面和后台代码的动态交互,主要是后台数据在页面显示。

Logo

CSDN联合极客时间,共同打造面向开发者的精品内容学习社区,助力成长!

更多推荐