一、JSP就是一个在服务器端的设计面板
百科说:它是在传统的网页HTML(标准通用标记语言的子集)文件(*.htm,*.html)中插入Java程序段(Scriptlet)和JSP标记(tag),从而形成JSP文件,后缀名为(*.jsp)。他实现了Html语法中的java扩张(以 <%, %>形式)。JSP与Servlet一样,是在服务器端执行的
我说:jsp不是编程语言。JSP的三个英文是java server pages的缩写!
JSP是我们进行WEB开发的页面工具。页面开发,少不了图形,图形开发的时候有一个设计面板,你只需要将一个一个的控件拖进这个设计面板内进行直观设计,而不用自己写代码 ,如textbox,lable等等,jsp就相当于这个设计面板,JSP学习对比我们VB学习的可视化环境中的窗体,控件的设计。JSP会自动识别拖进来的控件并将你的设计、布局转化成java代码,这样就使得程序员可以专注于页面的设计而省的去写那些重复、繁琐的代码了,大大提高了开发效率。
二、、JSP 是Servlet的一个分支
在介绍JSP之前,先回顾一下Servlet。简单地理解Servlet,它就是控制从WEB前端到数据库后台的一个管理器,它主要是做业务逻辑。其实你知道吗?Servlet还可以控制WEB客户端的“输出”。这里的输出指的是和HTML+CSS一样的“页面输出效果。”
看一下如下示例:查询学生的信息
按照上篇博客中servlet的逻辑来进行,首先需要一个WEB,然后一个Servlet,最后一个Dbmanager(这里只演示到Servlet,所以不做数据库连接)
<!--WEB中HTML代码--> <html> <head></head> <body> <h1> 根据出生日期段查询 </h1> <form action="queryStudentServlet"> 出生日期 : <input type="text" name="beginDate"></input> 至 <input type="text" name="endDate"></input> <input type="submit" value="查询学生"></input> </form> </body> </html>
<!--Servlet中业务逻辑--> public class StudentServlet extends HttpServlet { public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doPost(request, response); } public void doPost(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException { String sBeginDate = request.getParameter("beginDate"); String sEndDate = request.getParameter("endDate"); Date beginDate = new Date(); Date endDate = new Date(); try { beginDate = new SimpleDateFormat("yyyy-MM-dd").parse(sBeginDate); endDate = new SimpleDateFormat("yyyy-MM-dd").parse(sEndDate); }catch(Exception e) { e.printStackTrace(); } //System.out.println("sBeginDate=" + sBeginDate); //System.out.println("sEndDate=" + sEndDate); StudentManager studentManager = new StudentManagerImpl(); List<Student> studentList = studentManager.findStudentList(beginDate, endDate); }
问题:在Servlet中查出了我们要查询的数据,接下来需要显示。怎么显示呢?
1、在WEB端写好“显示形式”,或表格,或者文本,或list。
2、在Servlet中写好“显示形式”。让我们来看看Servlet中控制HTML的显示
StringBuffer sbHtml = new StringBuffer(); sbHtml.append("<html>"); sbHtml.append("\n"); sbHtml.append("<head>"); sbHtml.append("\n"); sbHtml.append("<title>学生查询</title>"); sbHtml.append("\n"); sbHtml.append("table"); sbHtml.append("\n"); sbHtml.append("td "); sbHtml.append("\n"); sbHtml.append("</head>"); sbHtml.append("\n"); sbHtml.append("<body>"); sbHtml.append("\n"); sbHtml.append("<h1>"); sbHtml.append("\n"); sbHtml.append("出生日期:" + sBeginDate + " 至 " + sEndDate + " 学生列表"); sbHtml.append("\n"); sbHtml.append("</h1>"); sbHtml.append("\n"); sbHtml.append("<hr>"); sbHtml.append("\n"); sbHtml.append("<table border=1>"); sbHtml.append("\n"); sbHtml.append("<tr>"); sbHtml.append("\n"); sbHtml.append("<td>学生代码</td>"); sbHtml.append("\n"); sbHtml.append("<td>姓名</td>"); sbHtml.append("\n"); sbHtml.append("<td>性别</td>"); sbHtml.append("\n"); sbHtml.append("<td>出生日期</td>"); sbHtml.append("\n"); sbHtml.append("<td>联系电话</td>"); sbHtml.append("\n"); sbHtml.append("<td>家庭住址</td>"); sbHtml.append("\n"); sbHtml.append("<td>班级名称</td>"); sbHtml.append("\n"); sbHtml.append("<td>年龄</td>"); sbHtml.append("\n"); sbHtml.append("</tr>"); sbHtml.append("\n"); for (Iterator<Student> iter=studentList.iterator(); iter.hasNext();) { Student student = iter.next(); sbHtml.append("<tr>"); sbHtml.append("<td>"); sbHtml.append(student.getStudentId()); sbHtml.append("</td>"); sbHtml.append("<td>"); sbHtml.append(student.getStudentName()); sbHtml.append("</td>"); sbHtml.append("<td>"); sbHtml.append(student.getSex()); sbHtml.append("</td>"); sbHtml.append("<td>"); sbHtml.append(new SimpleDateFormat("yyyy-MM-dd").format(student.getBirthday())); sbHtml.append("</td>"); sbHtml.append("<td>"); sbHtml.append(student.getContactTel()); sbHtml.append("</td>"); sbHtml.append("<td>"); sbHtml.append(student.getAddress()); sbHtml.append("</td>"); sbHtml.append("<td>"); sbHtml.append(student.getClasses().getClassesName()); sbHtml.append("</td>"); sbHtml.append("<td>"); long b = 1000L*60L*60L*24L*365L; long a = System.currentTimeMillis() - student.getBirthday().getTime(); sbHtml.append(a/b); sbHtml.append("</td>"); sbHtml.append("</tr>"); } sbHtml.append("</table>"); sbHtml.append("</body>"); sbHtml.append("</html>"); response.setContentType("text/html;charset=GBK"); response.getWriter().println(sbHtml.toString()); }
那么这两种形式如何抉择呢?“业务逻辑”。我们需要分析数据。这些数据是什么?
是回发数据。做过ASP.NET的朋友肯定会了解“html控件”和“WEB控件”的区别,在ASP.NET中我们有asp页面通过WEB控件来处理回发数据。在这个基础上,我们的JAVA 也是同样借鉴了WEB控件的优势,使用java 编写的“用于页面显示”的servlet。把这种特俗用途的servlet叫做JSP。把一个Servlet中的代码分成“业务逻辑”+“页面数据显示”。业务逻辑就是一个标准的Servlet,“页面数据显示”这个servlet就是一个JSP。所以说JSP是Servlet的一部分。 这样们就可以在JSP中写“回发数据”的显示了。
三、JSP 和HTML 的区别
HTML(Hypertext Markup Language)文本标记语言,它是静态页面,和JavaScript一样解释性语言,为什么说是解释性 语言呢?因为,只要你有一个浏览器那么它就可以正常显示出来,而不需要指定的编译工具,只需在TXT文档中写上HTML标记就OK。
JSP(Java Server Page)看这个意思就知道是Java服务端的页面,所以它是动态的,它是需要经过JDK编译后把内容发给客户端去显示,我们都知道,Java文件编译后会产生一个class文件,最终执行的就是这个class文件,JSP也一样,它也要编译成class文件!JSP不止要编译,它还得要转译,首先把JSP转译成一个Servlet文件,然后在编译成class文件。当用户访问JSP时就执行了class文件。
但是值得提醒的是,JSP最终有服务器端发送到WEB客户端,都是也HTML得形式显示的。
下面是通过查找得出的几点:
1.最简单的区别就是,HTML能直接打开,jsp只能发布到Tomact等服务器上才能打开。
2.定义上HTML页面是静态页面可以直接运行,JSP页面是动态页它运行时需要转换成servlet。
3.他们的表头不同,这个是JSP的头“<%@ page language="java" import="java.util.*" pageEncoding="gbk"%>”在表头中有编码格式和倒入包等。
4.在jsp中用<% %>就可以写Java代码了,而html没有<%%>。
这里还要提一下的是:WEB控件和HTML 控件,在使用JSP编写客户端的时候,要合理运用HTML控件和WEB控件,提高系统的性能。
JSP我的认识,你呢?