首页 > 代码库 > JSP我的认识,你呢?

JSP我的认识,你呢?

 一、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=http://www.mamicode.com/"查询学生">>
		<!--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控件,提高系统的性能。