在Jsp页面中关闭html和body标签的目的

时间:2017-06-27 18:18:55

标签: java html jsp

我对Jsp和HTML有一个非常基本的问题,下面的例子来自Java EE7黑皮书。

的login.html

<html> 
<body>
    <pre>
    <form action="LoginProcess.jsp">
        <b>User Name</b> : <input type="text" name="uname"/>
        <b>Password</b>  : <input type="password" name="pass"/>
        <input type="submit" value="LogIN"/>
    </form> 
    </pre>
</body>
</html>

以下是JSp的代码

<%@page import="java.sql.*" errorPage="\MyError.jsp"%>
<html>
<body>
    <% 
    Connection con=null;
    String uname=request.getParameter("uname");
    String pass=request.getParameter("pass");
    try 
    {
        Class.forName("oracle.jdbc.driver.OracleDriver");
        con=DriverManager.getConnection("jdbc:oracle:thin:@192.168.1.123:1521:XE","scott","tiger");
        Statement st=con.createStatement();
        ResultSet rs=st.executeQuery("select * from userdetails where uname='"+uname+ "' and pass='"+ pass +"'");
        if (!rs.next())
        {   

    %>

    User details given for user name : <%=request.getParameter("uname")%> and 
    password : <%=request.getParameter("pass")%> are not valid <br/> Try again 
    <%@include file="Login.html"%>
</body>
</html>
<% 
        return; 
    }//if
}//try
finally 
{
    try
    {
        con.close();
    }catch(Exception e){}
}//finally
%>

This is a Home Page <br/>
Welcome, <%=uname%>

我的问题是关于挂在代码中间的</body> & </html>标签,在return语句的正上方[不知道如何在代码中突出显示它们]。我不明白这两个标签的目的。我对为什么关闭html和body标签感到困惑。如何在关闭html标记后呈现更多代码。有人可以对此有所了解。

提前致谢。

1 个答案:

答案 0 :(得分:3)

所以,虽然它的风格代码非常古老,但让我对它有所了解(为了其他初学者也是如此):

首先,你给出的代码是非常丑陋和古老的风格。

作为学术观点 -

在jsp中,你可以有3种类型的基本标签 -

  1. Scriptlets:&lt; %%&gt;
  2. 声明:&lt;%! %GT;
  3. 表达式:&lt;%=%&gt;
  4. 所有jsp页面都在内部转换为等效的servlet,并且为等效的servlet文件中的每个jsp创建了一个默认方法_jspService(httpServletRequest,httpServletResponse)。

    放在scriptlet中的代码自动进入_jspService(httpServletRequest,httpServletResponse)

    <强>因此:

    • 在scriptlet中声明的变量成为_jspService(httpServletRequest,httpServletResponse)方法的局部变量。
    • 因为java不支持嵌套方法,所以我们不能在scriptlet中放置任何方法。
    • 在声明标签中,您可以声明变量。
    • 放在jsp的声明标签内的代码来自于 _jspService(httpServletRequest,httpServletResponse)等效servlet方法
    • 声明标记内声明的变量成为实例 等效servlet类的变量。
    • 在jsp中我们有9种类型的隐式对象(request,response,out, 页面等。)
    • 所有隐含对象都是_jspService的局部变量(req,res) 方法,因此这些隐式对象在内部无法访问 jsp的声明标签。
    • 表达式标签评估给定的表达式并写入 生成的输出到浏览器窗口作为网页内容。
    • 算术运算,逻辑运算,java方法调用 返回值等可以放在表达式标记内。

    除了这3个脚本标签外,我们在jsp

    中有3个指令标签
    1. 页面指示标记:&lt;%@ page%&gt;此标记为jsp等效servlet程序提供全局信息,如导入包,增加缓冲区大小,指定错误页面等。
    2. 包含指令标记:&lt;%@ include file =&#34; ...&#34; %GT;此标记包含目标jsp的等效servlet代码到源jsp
    3. 的等效servlet
    4. Taglib指令:&lt;%@ taglib%&gt;它用于在我们的jsp文件中包含和使用JSTL标记库。
    5. 除此之外,我们还有超过8个标准动作标签:

       1. <jsp:useBean >
       2. <jsp:forward > etc.
      

      现在提出您的问题: 你对html和body标签关闭的原因感到困惑。如何在关闭html标记后呈现更多代码。

      首先,我上面告诉过你的是,这是一种非常古老的风格编码,完全没有趋势。我们总是建议使用JSTL和其他 jsp中的标签,使jsp文件易于阅读,清洁,易于维护。 JSP文件用于视图层,我们不应该将任何java代码放在jsp文件中。 所以你给出的jsp文件是一团糟。

      并且在关闭body和html标签之后编写的代码是一个scriptlet,它将在_jspService(req,rs)方法中转换为等效的java代码,该方法适用于jsp等效的servlet类。

         <% 
                  return; 
              }//if
          }//try
          finally 
          {
              try
              {
                  con.close();
              }catch(Exception e){}
          }//finally
          %>
      

      此代码是简单文本以及表达式标记(再次为您提供以文本格式显示在网页上的输出)

      This is a Home Page <br/>
      Welcome, <%=uname%>
      
        

      [&GT;省略html,head和body标签以及在外面写文本   他们   当然,HTML规范允许这样做。根本原因是   浏览器一直试图与现有网页保持一致,   HTML的早期版本没有定义这些元素。什么时候   HTML 2.0首先做了,它是以标签的方式完成的   丢失时推断。[来源] 1

      有关详细信息,请参阅here