JSP——Java Server Pages
大部分刚开始接触JavaWeb编程的同学应该都会选择从JSP开始学起。的确,JSP确实是入门JavaWeb的一个好方式。那么什么是JSP呢?
JSP全名Java Server Pages,其根本是一个简化的Servlet设计,它是在传统的网页HTML文件中插入Java程序段和JSP标记,从而形成JSP文件。——摘自《百度百科》
以上定义摘自百度百科,从上面的定义其实我们已经不难看出JSP是什么了,在传统的HTML页面中插入Java代码,这就是JSP的具体用法。这种用法可以很自然的将前端网页与后端逻辑及数据结合在一起。那么具体该如何从零开始创建一个简单的JSP工程呢?接下来就跟着文章一起做吧
注:系统环境:macOS 10.12 + java 1.8.0_144 + tomcat9 + IntelliJ IDEA 2017.2
首先打开IDEA,新建工程后选择建立Java Enterprise工程,勾选上Web Application以及Create web.xml选项。之后便可建立一个最基本的JavaWeb工程了
IDEA自动帮我们生成了许多工程文件。这里列出各个目录及文件的基本信息
- src:Java源代码目录,编写各种Java类
- web/WEB-INF/web.xml:本web项目的配置文件,servlet便是在其中进行注册
- web/index.jsp:初始的主页jsp文件
接下来直接运行一下这个刚刚建立的工程,看看会发生什么,点击运行按钮(需先配置IDEA的服务器配置)
底下的控制台中应该打印出了许多信息,如下图所示
这时打开浏览器在地址栏键入 http://localhost:8080 便可看到IDEA自动生成的首页了
这便是最简单的JavaWeb项目了。但是这里只是用到了Tomcat作为Web服务器的作用,展示出来的只是个静态页面而已,那么接下来我们便对这个index.jsp文件进行修改,让它成为一个动态页面。在编写代码之前,笔者先简单介绍一下jsp中几个内置的对象,以便于接下去的编写
- out对象:out对象是JspWriter的实例,它的作用是向页面中打印出一段文本,其中的方法与System类中的out对象相似,只不过是向页面中进行输出而已
- request对象:request对象是HttpServletRequest的实例,这个对象封装了HTTP请求中的信息,包括Cookies,Header,Session以及请求参数
- response对象:response对象是HttpServletResponse的实例,它封装了HTTP响应中的信息,可以对HTTP响应进行响应的设置,诸如设置Content-Type等HTTP头。还可以获取响应流的OutputStream
在jsp文件中,Java代码部分使用<% %>这一对标签包裹住,那么接下来就对这个jsp文件进行修改,达到动态网页的作用。
修改后index.jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>$Title$</title>
</head>
<body>
<%
String uuid = UUID.randomUUID().toString();
DateFormat format = SimpleDateFormat.getInstance();
String time = format.format(new Date());
%>
<p>UUID:<span style="color: red"><%=uuid %></span></p>
<p>CurrentTime:<span style="color: green"><% out.print(time);%> </span></p>
</body>
</html>
这段代码的逻辑非常简单,在页面被加载时,随机生成一个UUID并且获取当前时间,然后将UUID及时间打印在页面上。运行这个WebApplication,打开浏览器键入URL,我们就能看到效果了。
刷新页面会发现UUID以及时间会发生改变。我们通过几段简单的Java代码就能够在原本的静态页面中加入业务逻辑部分,在这个示例中我们只是简单的加入了随机UUID和时间进行验证,那么同样我们可以在这里加上十分复杂的业务逻辑以及数据库查询,这样就可以做出各种各样功能强大的web应用程序。
但是,熟悉应用开发的同学肯定会知道,在开发过程中通常会将程序进行分层开发,最经典的就是MVC模式。它将数据,控制以及显示层分离,最大限度的提升了代码的复用性。那么web开发也是一样的,如果说大量的业务逻辑,数据库查询,更新操作的代码都写在一个jsp文件中,那么将会导致写出大量的重复代码,并且之后对代码进行修改以及查错也将会变得异常繁琐与复杂。所以,在开发中我们都会尽可能的提升代码的复用性,尽量将相似的功能抽象成一个类,通过面向对象的方式降低各层之间的耦合度。但是JSP页面有个致命的缺点,那便是它无法做到页面与业务完全的分离,仍然会有许多与页面有关的逻辑将编写在JSP页面中,从而影响到分层的效果。那么为了解决这一系列的问题,就会用到接下来我们要说的Servlet了