(1)jsp执行过程、语法

来源:互联网 发布:郑州软件开发工资 编辑:程序博客网 时间:2024/06/07 21:01

1.为什么会出现jsp技术?
Servlet做界面不方便,于是有了新的技术–》jsp

1.jsp运行在服务器端
2.Jsp(java servlet page)
3.jsp的基础是servlet,相当于对servlet进行包装
4.Jsp是综合技术:Jsp=html+java片段+jsp标签+Javascript(css)
5.Jsp无需配置,直接使用。如果修改可jsp文件,无需重新reload应用。
6.Jsp如何使用:http://ip:8080/web应用名/jsp路径
jsp的路径从WEBRoot开始算,若jsp没有子文件夹,则
http://localhost:8080/jsp1/showTime2.jsp
7.jsp是动态网页技术,可以与用户交流。
Jsp存放地址:E:\apache-tomcat-6.0.39\work\Catalina\localhost\项目名/一直点击即可
快速入门案例

2.web服务器调用并执行一个jsp原理图:
这里写图片描述

3.jsp网络拓扑图
这里写图片描述

4.jsp执行细节
①jsp页面中的HTML排版标签(注意是HTML标签)是如何发送到客户端的?
要结合showTime2_jsp 来看

out.write("   <table>\r\n");      out.write("      <tr> \r\n");      out.write("          <td>apple</td>\r\n");      out.write("          <td>melon</td>\r\n");      out.write("          <td>orange</td>\r\n");      out.write("      </tr>\r\n");

②jsp页面中的Java代码,服务器是如何执行的?

  <%       int i=0;       int j=i+9%>   <%   out.println("j="+j);//上个Java片段的内容也可以在此Java片段中应用,在showTime2_jsp.java中,均在_jspService函数中    %>//被翻译成jsp后:Java文件 int i=0; int j=i+9;

多个<% %>其实相当于一个大的<% %>.在<% %>中定义的变量,会成为servlet函数中的局部变量。

③提供了9个,我们使用了out对象—》PrintWriter out = response.getWriter();
五、jsp特点
jsp这门技术的最大特点在于,写jsp就像在写html,但:
它相比html而言,HTML只能为用户提供静态数据,而jsp技术允许在页面中嵌套Java代码,为用户提供动态数据。
它相比servlet而言,servlet很难对数据进行排版,而jsp除了可以利用Java代码生成动态数据的同时,也很容易对数据进行排版。

六、jsp语法
①指令元素:用于从jsp发送一个信息到容器,比如设置全局变量、文字编码、引入包
1)page指令:<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
这里写图片描述
这里写图片描述
注意导入多个包,用逗号隔开。
解释buffer:out.println(“内容”);//即使是多个out.println,并不是一次就out一次就返回的,则是到一定的大小,才返回。
2)include指令:该指令用于引入一个文件(通常是jsp文件)。jsp引擎
<% @ include file=”文件路径名” %>
注意在%@中间不能有空格。
该指令用于引入一个文件(通常是jsp文件),jsp引擎会把两个jsp文件翻译成一个servlet文件,因此也叫静态引入。
被引入的jsp文件,只需保留page指令即可<html><body> 均可省略。
文件路径名是从WEBRoot开始的,若没有子文件,则写文件名即可。若有子文件,则写/子文件名/jsp名
contentType与pageEncoding区别
3)tag标签指令

<mytag:xx  属性/>

②脚本元素:可以理解就是Java片段scriptlet
1)scriptlet <% Java代码 %>
2)表达式 <%=Java表达式 %>
3)declaration 声明

<%! 变量声明  %>  比如<%! int count=10%> 声明全局变量,在<% %>内的是局部变量。若全局变量和局部变量同名,则以局部变量为主,因为它在Java片段中。<%! 函数声明  %> 相当于在类中定义一个函数
      <!-- 声明变量 -->      <%! int m=90; %>      <%          int n=90;          out.println("m="+(++m)+"---"+"n="+(++n));          //第一次:m=91  n=91          //第二次:m=92  n=91          //第三次:m=93  n=91       %>

③动作元素:是使用xml语法写的,是jsp规定掉的一系列标准动作,在容器处理时,当容器遇到动作元素时,就会执行相应的操作
这里写图片描述
重点了解一:jsp:forward

 <jsp:forward page="manage.jsp"></jsp:forward>

在软件开发中,不允许将转发写在WEBRoot中。通常把jsp放在WEB-INF目录下,目的是防止用户直接访问这些jsp文件。
解决方法:在WEBRoot下有一个入口页面,它的主要作用是转发<jsp:forward page="/WEB-INF/manage.jsp"></jsp:forward>
重点理解二:jsp:include

<jsp:include file=""></jsp:include>动态引入

动态引入和静态引入的区别:
相同点:把一个文件引入到另外一个文件
区别:静态引入会把两个jsp翻译成一个servlet,所以被引入的文件不要包含body、html
动态引入把两个jsp分别翻译,所以被引入的jsp可以包含html、body
④jsp文件的注释

<!--注释内容--> html注释方式,可以使用在jsp中.<%--注释内容-->  jsp专用注释方法

区别:<!-- --> 会在servlet中对应生成out.write("<!-- -》"),这样在返回给浏览器的静态页面也有<!--只是用户看不到。

<%-- --%>则在servlet中没有任何输出,建议使用<%-- --%>

五、jsp九大内置对象
这里写图片描述
pageContext解释

   <%      pageContext.setAttribute("name", "哈哈");//此属性只能在此页面使用    %>    <%      String name=(String)pageContext.getAttribute("name");      out.println("name="+name);     %>

练习:jsp版本的计算器
知识点:
1.如何接收jsp页面提交的数据,并处理
2.jsp中如何使用Java片段
3.jsp中如何使用Javascript完成对数据合法性的校验。

不管是jsp,还是servlet,虽然都可以用于开发动态web资源。但是由于这两门技术各自的特点,在长期的软件开发实践中,人们逐渐把servlet作为控制器组件来使用,而把jsp当成显示端来使用。
因此,在软件开发中,根据这两门技术的特点,让他们各自负责各的,servlet只负责相应请求产生数据,并把数据通过转发技术带给jsp,数据显示用jsp来做。