zoukankan      html  css  js  c++  java
  • 【读书笔记】《Java Web整合开发实践》第3章 JSP

    1. JSP:Java Server Pages

    2. JSP注释:<%--注释内容--%>

    3. page指令(页面指令):定义JSP页面的全局属性。

    <%@ page language="java" contentType="text/html; charset=ISO-8859-1" pageEncoding="ISO-8859-1"%>

    常见属性见下表:

    属性

    定义

    language=”ScriptLanguage”

    指定JSP Container用什么语言来编译,目前只支持JAVA语言。默认为JAVA

    extends=”className”

    定义此JSP网页产生的Servlet是继承哪个

    import=”importList”

    定义此JSP网页要使用哪些Java API

    session=”true|false”

    决定此页面是否使用session对象。默认为true

    buffer=”none|size in kb”

    决定输出流(Input stream)是否又缓冲区。默认为8kb

    autoFlush=”true|false”

    决定输出流的缓冲区慢了后是否需要自动清除,缓冲区慢了后会产生异常错误(Exception).默认为true

    isThreadSafe=”true|false”

    是否支持线程。默认为true

    errorPage=”url”

    如果此页发生异常,网页会重新指向一个url

    isErrorPage=”true|false”

    表示此页面是否为错误处理页面。默认为false

    contentType=”text/html;charset=gb2312”

    表示MIME类型和JSP的编码方式。笔者使用例左

    pageEncoding=”ISO-8859-1”

    编码方式。(笔者已经加入使用的编码)

    isELLgnored=”true|false”

    表示是否在此JSP页面中EL表达式。true则忽略,反之false则支持。默认为false

    4. include文件加载指令,用于在JSP文件中插入一个包含文本或代码的文件。它把文件插入后与原来的JSP文件合并成一个新的JSP页面。被插入的文件可以是一个文本文件,一个HTML文件或一个JSP文件。插入文件的路径,一般不用"/"开头,而使用相对路径。

    <%@include file = "被包含文件的地址"%>

    例如:

    <%@ include file="a.txt"%>
    <%@ include file="a.html"%>
    <%@ include file="a.jsp"%>

    5. taglib标签指令,引入标签库并设置标签库前缀。

    <%@ taglib uri="tagLibraryURI" prefix="tagPrefix"%>

    6. JSP脚本元素:通过JSP脚本元素可以将Java代码嵌入到JTML页面中。所有可执行的Java代码,都可以通过JSP脚本来执行。JSP脚本主要包含:声明语句,表达式,Scriptlets。

    (1)JSP声明语句用于声明变量和方法,该变量或方法在整个JSP页面中都有效。

    <%! java变量的声明语句%>

    例如:

     1 <%@ page language="java" contentType="text/html; charset=ISO-8859-1"
     2     pageEncoding="ISO-8859-1"%>
     3 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
     4 <html>
     5 <head>
     6 <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
     7 <title>WebProject</title>
     8 </head>
     9 <%!
    10     public int a;
    11     public String printStr(){
    12         return "JSP method";
    13     }
    14 %>
    15 <body>
    16     <%
    17         out.println(printStr());
    18     %>
    19 </body>
    20 </html>

    (2)JSP表达式,插入一个表达式,必须能够求值,并且计算结果会以字符串形式发送到客户端显示出来。

    <%= 表达式 %>
    <%@ page language="java" contentType="text/html; charset=ISO-8859-1"
        pageEncoding="ISO-8859-1"%>
    <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
    <html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
    <title>WebProject</title>
    </head>
    <%!
        String str = "JSP expression";
    %>
    <body>
        <!-- JSP expression -->
        <%=
            str
        %>
    </body>
    </html>

    (3)JSP Scriptlet是一段Java代码段。在JSP Scriptlet中声明的变量是JSP页面的局部变量,调用JSP Scriptlet时,会为局部变量分配内存空间,调用结束后,释放局部变量占有的内存空间。

    <% Java代码 %>

    7.<JSP:include>JSP动作元素:当JSP页面运行时才会载入该文件,并不是简单地将被包含文件与JSP页面合并成一个新的JSP页面。

    <jsp:include page="relative URL"  flush="true|false"/>

    page属性:指定被包含文件的url地址,是一个相对路径。

    flush属性:指定当缓冲区满时,是否将其清空,默认值是false。

    <body>
        <jsp:include page="hello.txt"></jsp:include>
        <jsp:include page="hello.jsp"></jsp:include>
    </body>

     8. <jsp:forward>页面重定向动作元素:停止当前JSP页面的执行,将客户端请求转交给另一个JSP页面。

    <jsp:forward page="转向页面的URL地址"/>
    1 <body>
    2     <%
    3          System.out.println("跳转前");
    4     %>
    5     <jsp:forward page="forward.jsp"></jsp:forward>
    6     <%
    7           System.out.println("跳转后");
    8     %>
    9 </body>

    上述代码中第7行就不会执行了,因为此时页面已经跳转到了forward.jsp。

    9. <jsp:param>提供参数的附属动作元素:通常和<jsp:include>,<jsp:forward>和<jsp:plugin>一起使用来传递参数。

    <jsp:param name="参数名字" value="指定给param的参数值">

    在index.jsp中有如下代码:

    <%@ page contentType="text/html; charset=GB2312" %>
    <html>
    <body>
        <!-- JSP forward -->
        <jsp:forward page="forward.jsp">
            <jsp:param name="username" value="jack"/>
            <jsp:param name="age" value="27"/>
        </jsp:forward>
    </body>
    </html>

    在跳转的页面forward.jsp中有如下代码:

    1 <%@ page contentType="text/html; charset=GB2312" %>
    2 <html>
    3 <body>
    4     <P>USE INFORMATION IS AS FOLLOWS:
    5     <br>
    6         <%="User name is "+request.getParameter("username")%> 
    7         <%="User age is "+request.getParameter("age")%>
    8 </body>
    9 </html>

    可以看到username和age就从index.jsp页面传到了forward.jsp页面了。

    10.JSP内置对象

    (1)request对象:获取客户端信息,包含的主要方法如下:

    一下的例子显示form表单和reaquest结合用法:

    index.jsp

     1 <%@ page contentType="text/html; charset=GB2312" %>
     2 <html>
     3 <head>
     4     <title>表单页</title>
     5 </head>
     6 <body>
     7     <form action="forward.jsp" method="post">
     8         <p>用户名<input type="text" name="username"/></p>
     9         <br>
    10         <p>年龄<input type="text" name="age"/></p>
    11         
    12         <input type="submit" value="提交"/>
    13     </form>
    14 </body>
    15 </html>

    forward.jsp

     1 <%@ page contentType="text/html; charset=GB2312" %>
     2 <html>
     3 <head>
     4     <title>receptive page</title>
     5 </head>
     6 <body>    
     7         <%request.setCharacterEncoding("gb2312"); %>
     8         User name is:<%=request.getParameter("username")%>
     9         Age is:<%=request.getParameter("age") %>
    10 </body>
    11 </html>

    其中第7行是为了防止中文乱码的。

    这样forward.jsp就可以从index.jsp页面获取到用户的姓名和年龄了。

    如果不知道跳转前的页面有多少个参数,叫什么名字,则可以用 Enumeration params = request.getParameterNames(); 获得所有的参数,再用循环的方法遍历。

    (2)response对象

    void sendRedict(String url):重定向JSP文件。

    与<jsp:forward>动作元素的最大区别在于<jsp:forward>只能在本网站内跳转,而response.sendRedict则可以跳转到任何一个地址的页面。

    (3)out对象:向客户端返回信息。

    11.JavaBean

    JavaBean是用Java语言描述的软件组建模型,是一种特殊的Java类,具有一下几个语法特征:

    (1)JavaBean是一个public类

    (2)应该包含一个无参的构造方法

    (3)JavaBean中属性的获取和设置需要使用标准格式定义的getXxx()方法和setXxx()方法。对于boolean类型的成员变量,可以使用isXxx()来代替。

    在JSP中调用JavaBean有3个标准的动作指令:<jsp:useBean>,<jsp:setProperty>,<jsp:getProperty>

    JavaBean实现用户登录的DEMO如下:

    JavaBean类对应的User.java文件

     1 package javabean;
     2 public class User {
     3     private String username;
     4     private String password;
     5     
     6     public void setUsername(String username){
     7         this.username = username;
     8     }
     9     public String getUsername(){
    10         return username;
    11     }
    12     public void setPassword(String password){
    13         this.password = password;
    14     }
    15     public String getPassword(){
    16         return password;
    17     }
    18     
    19 }

    index.jsp

     1 <%@ page contentType="text/html; charset=GB2312" %>
     2 <html>
     3 <head>
     4     <title>表单页</title>
     5 </head>
     6 <body>
     7     <form action="forward.jsp" method="post">
     8         <p>用户名<input type="text" name="username"/></p>
     9         <br>
    10         <p>密码<input type="password" name="password"/></p>
    11         
    12         <input type="submit" value="提交"/>
    13     </form>
    14 </body>
    15 </html>

    forward.jsp

     1 <%@ page contentType="text/html; charset=GB2312" %>
     2 <html>
     3 <head>
     4     <title>User Information</title>
     5 </head>
     6 <body>    
     7         <jsp:useBean id="userbean" scope="page" class="javabean.User"/>
     8         
     9         <!-- pass username from request object to username in JavaBean userbean -->
    10         <jsp:setProperty property="username" name="userbean" param="username"/>
    11         <jsp:setProperty property="password" name="userbean" param="password"/>
    12         
    13         <!-- get username from userbean -->
    14         Username
    15         <jsp:getProperty property="username" name="userbean"/><br>
    16         Password
    17         <jsp:getProperty property="password" name="userbean"/>
    18         
    19 </body>
    20 </html>

    注意User.java这个类文件一定不能放在默认的包里面,要新建一个包把它放进去。

  • 相关阅读:
    POJ 1269 Intersecting Lines
    POJ 3304 Segments
    BZOJ 4591 超能粒子炮·改
    POJ 2318 TOYS/POJ 2398 Toy Storage
    BZOJ 1044 木棍分割
    BZOJ 2836 魔法树
    BZOJ 3176 Sort
    BZOJ 1668 馅饼里的财富
    Flood-it!
    Eight
  • 原文地址:https://www.cnblogs.com/sunshineatnoon/p/4073224.html
Copyright © 2011-2022 走看看