传智播客——JSP(一)

来源:互联网 发布:网页制作php 编辑:程序博客网 时间:2024/05/18 00:37

一,jsp出现的的原因
     看两段代码的对比
  1 servlet实现
public class Welcome extends HttpServlet {
  int num = 1;
  public void doGet(HttpServletRequest request,
                    HttpServletResponse response)
              throws ServletException, IOException {
    response.setContentType("text/html; charset=ISO-8859-1");
    PrintWriter out = response.getWriter();
    Date d = new Date();
    out.println("<html>");
    out.println("<head><title>Welcome Servlet</title></head>");
    out.println("<body>");
    out.println("Today is : " + new Date() + "<P>");
    out.println("Visitors : " + num );
    num++;
    out.println("</body></html>");
    out.close();
2,用jsp实现
<%@ page import="java.text.*, java.util.*" %>
<html>
<head><title>Welcome JSP</title></head>
<%! int num = 1; %>
<body>
Today is : <%= new Date() %><p>
Visitors : <%= num++ %>
</body>
</html>

这两者效果完全相同,如果servlet实现的页面代码让美工去优化前台页面,这对于不熟悉java语言的美工来说是灾难,
二,Jsp的执行顺序
    1,浏览器发出请求
    2,服务器端相应请求,如果由servlet实现则调用相应的servlet
    3,如果由jsp实现,则 jsp引擎将jsp文件转化和编译成servlet

三,jsp语法细节
    (1)1,JSP原始代码中包含了JSP元素和Template(模板) data两类
         2,Template data指的是JSP引擎不处理的部分,即标记<%……%>以外的部分,例如代码中的HTML的内容等 ,这些数据会直接传送到客户端的浏览器
         3,JSP元素则是指将由JSP引擎直接处理的部分,这一部分必须符合JSP语法,否则会导致编译错误。
    (2)动态java代码必须包含在特定的标签中
         1,jsp标准指令
            标准指令用来设定JSP网页的整体配置信息JSP中的全局变量,声明类,要实现的方法和输出内容的类型等特点:它们并不向客户端产生任何输出,所有的指令在JSP整个文件范围内有效为编译译阶段提供了全局信息
语法:
 <%@  标准指令 属性=属性值  %>
 <%@ diectivename  attribute=“value”,  attribute=“value” %>
        2,include指令
        include指令用于通知JSP引擎在翻译当前JSP页面时将其他文件中的内容合并进当前JSP页面转换成的Servlet源文件中,这种在源文件级别进行引入的方式称之为静态引入,当前JSP页面与静态引入的页面紧密结合为一个Servlet。
语法:
 <%@ include file="relativeURL"%>
 其中的file属性用于指定被引入文件的相对路径。 
细节:
被引入的文件必须遵循JSP语法,其中的内容可以包含静态HTML、JSP脚本元素、JSP指令和JSP行为元素等普通JSP页面所具有的一切内容。 
被引入的文件可以使用任意的扩展名,即使其扩展名是html,JSP引擎也会按照处理jsp页面的方式处理它里面的内容,为了见明知意,JSP规范建议使用.jspf(JSP fragments)作为静态引入文件的扩展名。
在将JSP文件翻译成Servlet源文件时,JSP引擎将合并被引入的文件与当前JSP页面中的指令元素(设置pageEncoding属性的page指令除外),所以,除了import和pageEncoding属性之外,page指令的其他属性不能在这两个页面中有不同的设置值。
       除了指令元素之外,被引入的文件中的其他元素都被转换成相应的Java源代码,然后插入进当前JSP页面所翻译成的Servlet源文件中,插入位置与include指令在当前JSP页面中的位置保持一致。 
引入文件与被引入文件是在被JSP引擎翻译成Servlet的过程中进行合并,而不是先合并源文件后再对合并的结果进行翻译。当前JSP页面的源文件与被引入文件的源文件可以采用不同的字符集编码,即使在一个页面中使用page指令的pageEncoding或contentType属性指定了其源文件的字符集编码,在另外一个页面中还需要用page指令的pageEncoding或contentType属性指定其源文件所使用的字符集 。
Tomcat在访问JSP页面时,可以检测它所引入的其他文件是否发生了修改,如果发生了修改,则重新编译当前JSP页面
file属性的设置值必须使用相对路径,如果以“/”开头,表示相对于当前WEB应用程序的根目录(注意不是站点根目录),否则,表示相对于当前文件。

学习总结:JSP和servlet是侧重不同方面的处理方式,JSP侧重页面处理,servlet侧重数据处理,适用于不同的需要,在很复杂的情况下,甚至两种方法都要使用。

原创粉丝点击