我下午就感觉怪了,老师忽然不写 <% 改用 <jsp:scriptlet> 当时没去多想 他说为了格式更好一点
我今晚在家在 myeclipse7.0 怎么打怎么没有 以为是下午他刚讲的 EL表达式 结果不是
想想会不会是 下午另讲的 JSTL 也不是 但是 页面打不出来 是怎么回事啊
<jsp:scriptlet> 这个我记得有啊
希望大家讲解一下 <jsp:scriptlet> 这是什么 我晕死了
在网上找了好久 好像也没有这种表达方法 但myeclipse中好像也有一些 <jsp:userbean>
难道这些都是 一样的 不过我很纳闷 <jsp:scriptlet> 为什么没有
在前面的教程中我们已经在一个scriptlet中使用了“out”变量来产生HTML输出。对于更复杂的HTML,如果我们还是使用“out”变量那就会失去JSP编程的许多优势。其实我们可以很简单地就实现Scriptlets 和 HTML的混合。
假如你要在HTML产生一个表格。产生表格是一个普通的操作,在实践中你可能想从一个SQL表格或者从文件的行产生一个表格。为了是所举的例子尽量的简单,我们产生一个表格,使这个表格包含从1到N的数字。虽然以下的例子不是很有用,但是你从中可以学到一些技巧的。以下就是JSP的程序片段:
<TABLE BORDER=2>
<%
for ( int i = 0; i < n; i++ ) {
%>
<TR>
<TD>Number</TD>
<TD><%= i+1 %></TD>
</TR>
<%
}
%>
</TABLE>
在编制代码之前,你应该首先定义一个整型(int)变量“n”,利用这个变量我们要输出“n”行的表格。从上面的代码中我们可以注意到%> 和 <%字符出现在“for”循环中,原来这是为了使你退到HTML然后又回到scriptlet,其实这正是Scriptlets 和 HTML的混合的技巧。
上面的代码其实很简单:可以退出scriptlet的时候,就编写HTML;然后又回到scriptlet中去。任何的循环控制表达式,比如“while”或者“for”循环以及“if”语句都可以控制HTML。如果HTML处在一个循环中它就会在每一次的循环中执行一次。
JSP简单的说就是HTML+Java代码,文件后缀为.jsp的文件。
JSP和Servlet是JavaEE的重要基础,看起来JSP和Servlet是两个完全不同的东西,但是JSP其实就是Servlet的一种形式,JSP最终需要被编译成Servlet;
JSP页面必须部署到web容器中才能够访问,因为单单的JSP页面时没有用处的;必须要转换成Servlet才能够使用;
JSP是面向对象的,因为最后会变成Servlet,而Servlet是一个类,这个可能不好理解,下面会有讲解.
而用户访问JSP页面看到的输出时Servlet输出流的结果;
JSP可以不处理异常,因为如果产生异常有两种处理方法:
1.在浏览器页面显示;
2.跳转到errorPage;
JSP到Servlet的转换
当第一次访问某个JSP文件时,web服务器会将JSP文件转换成Servlet,再由Servlet提供输出流将HTML输出给客户.因此客户接触的只是HTML而已,而JSP的处理过程都是在服务器完成的;
注意:每个Servlet类的对象在容器中只有一个,因此每个客户访问的同一个JSP页面都是一个Servlet对象;
假设有null.jsp文件,此文件内容为空,如下所示:
[html] view plain copy
- <%@ page contentType="text/html;charset=utf-8" pageEncoding="utf-8" info="This is a JSP " %>
- <html>
- <body>
- </body>
- </html>
在tomcat的work目录中会生成null_jsp.java和null_jsp.class,null_jsp.java的代码如下:
[java] view plain copy
- package org.apache.jsp;
-
- import javax.servlet.*;
- import javax.servlet.http.*;
- import javax.servlet.jsp.*;
-
-
- //HttpJspBase是Servlet的子类
- /*
- 此类主要有三个方法组成:
- 1.init(); 初始化
- 2.destroy(): 销毁
- 3.service(); 接收客户端请求并处理
- */
-
-
- public final class null_jsp extends org.apache.jasper.runtime.HttpJspBase
- implements org.apache.jasper.runtime.JspSourceDependent {
-
- public String getServletInfo() {
- return "This is a JSP ";
- }
-
- private static final JspFactory _jspxFactory = JspFactory.getDefaultFactory();
-
- private static java.util.List<String> _jspx_dependants;
-
- private javax.el.ExpressionFactory _el_expressionfactory;
- private org.apache.tomcat.InstanceManager _jsp_instancemanager;
-
- public java.util.List<String> getDependants() {
- return _jspx_dependants;
- }
-
- public void _jspInit() {
- _el_expressionfactory = _jspxFactory.getJspApplicationContext(getServletConfig().getServletContext()).getExpressionFactory();
- _jsp_instancemanager = org.apache.jasper.runtime.InstanceManagerFactory.getInstanceManager(getServletConfig());
- }
-
- public void _jspDestroy() {
- }
-
- public void _jspService(final HttpServletRequest request, final HttpServletResponse response)
- throws java.io.IOException, ServletException {
- //生成JSP内置对象
- final PageContext pageContext;
- HttpSession session = null;
- final ServletContext application;
- final ServletConfig config;
- JspWriter out = null;
- final Object page = this;
- JspWriter _jspx_out = null;
- PageContext _jspx_page_context = null;
-
-
- try {
- response.setContentType("text/html;charset=utf-8");
- pageContext = _jspxFactory.getPageContext(this, request, response,
- null, true, 8192, true);
- _jspx_page_context = pageContext;
- application = pageContext.getServletContext();
- config = pageContext.getServletConfig();
- session = pageContext.getSession();
- out = pageContext.getOut();
- _jspx_out = out;
- //输出JSP页面中的显示
- out.write("\r\n");
- out.write("<html>\r\n");
- out.write("\t<body>\r\n");
- out.write("\r\n");
- out.write("\t</body>\r\n");
- out.write("</html>");
- } catch (Throwable t) {
- if (!(t instanceof SkipPageException)){
- out = _jspx_out;
- if (out != null && out.getBufferSize() != 0)
- try { out.clearBuffer(); } catch (java.io.IOException e) {}
- if (_jspx_page_context != null) _jspx_page_context.handlePageException(t);
- }
- } finally {
- _jspxFactory.releasePageContext(_jspx_page_context);
- }
- }
- }
从以上代码就可以很清晰地看出JSP和Servlet的关系了,JSP编写的<%%> <%=%> 和 html代码都是在Service函数中实现;
而<%! %>中的代码作为Servlet类的成员变量和成员方法;
JSP内置对象就是在这个文件中被创建的。