JSP学习笔记

1        Scriptlet

Scriptlet是指一个有效的程序段,这个程序段可以包含多个JSP语句、方法、变量和表达式。

使用Scriptlet,可以做以下的事:

1.      声明将要用到的变量或方法

2.      编写JSP表达式

3.      使用任何隐含的对象和任何用声明过的对象

使用scriptlet,要注意以下几个方面的问题:

1.      在编写JSP语句时,如果你使用JAVA语言,这些语句必须遵从JAVA语言规范

2.      任何文本,HTML标记,JSP元素必须在Scriptlet之外

3.      JSP收到客户的请求时,Scriptlet就会被执行,如果Scriptlet有显示内容,这些显示的内容就被存在out对象中

Scriptlet的基本语法格式如下:

<% 代码体(code fragment%>

这个格式和表达式的格式有些像,注意。

 

2       

是一个与Applet或者Beans有关的指令。它用来执行一个AppletBean。(可能要一个JAVA插件来执行它)

3        JSPJava Servlet

Java Servlet是一个Java类,是运行在请求/响应模式的服务器上的模块.

Servlet都是由HttpServlet继承下来的,可以说是在服务器上运行的Applet,其基本结构如下代码所示:

import java.io.*;

import javax.servlet.*;

import javax.servlet.http.*;

public class SomeServlet extends HttpServlet

{

   public void doGet(HttpServletRequest request,HttpServletResponse response)throws ServletException,IOException

   {

          //用“request”可以读取输入的值(e.g.cookies)和表单提交的数据

          //用“response”返回输出的内容

          PrintWriter out=response.getWriter*();

          //用“out”向浏览器写内容

   }

}

 

4        捕捉异常

1.     当抛出异常时,有几件事会随之发生.首先要像创建其它JAVA对像那样,创建一个异常对象.然后,停下来当前的执行路径,再将异常对角的reference从当前运行环境中弹出去。现在异常处理机制开始接管程序了,它会去找到一个合适的地方来继续执行这个程序。这个地方就是“异常处理程序(exception handler)“,其功能就是将程序从问题中恢复过来,于是程序或者是尝试把关换一务运行路径,或者是继续运行下去。

2.     如:if(t==null) throw new NullPointerException();

3.     异常的参数——所有的标准异常都有两个构造函数:第一个是默认的构造函数,第二个是要拿一个字符串当参数的,因此你可以在异常中放入一些相关的信息:

throw new NullPointerException(“t=null”);

    将来这个字符串可以用各种方法提取出来。

4.     try{

   //Code that might generate exceptions

}catch(Type1 id1){

   //Handle exceptions of Type1

}catch(Type2 id2){

   //Handle exceptions of Type2

}

//etc…

5.     要想创建你自己的异常,你必须继承已有的异常,最好是意思上同你要创建的那个新异常比较相近。创建一个新的异常类的最简单的做法是直接让编译器为你生成一个默认的构造函数,这样做几乎不需要写任何代码:(F:/勉強/JAVA/JAVABOOK/CHAR9.PDF         P5

 

5        让一个编辑控件不能输入数字以外的字符

如果你是一个编辑控件不能入数字以外的字符,可以:
    var
        dwStyle:   DWORD;
    ...
    //  
你的编辑控件叫   edtEdit
    dwStyle   :=   GetWindowLong(edtEdit.Handle,   GWL_STYLE);
    dwStyle   :=   dwStyle   or   ES_NUMBER;
    SetWindowLong(edtEdit.Handle,   GWL_STYLE,   dwStyle);
    //  
搞定

6        JSP动作指令

(飞思科技产品研发中心,《JSP应用开发详解》,电子工业出版社,2003-5P76

1.       Include指令

标签包含一个静态的或者动态的文件

语法:

          flush=”True”/>

        or

       

               

       

2.       Forward指令

标签重定向一个HTML文件、JSP文件,或者是一个程序段。

JSP语法:

   

    or

   

             value=”paraValue”/>

   

3.       UseBean指令

标签用来在JSP页面中创建一个Bean实例并指定它的名字以及作用范围.

4.       GetProperty指令

这个属性获取Bean的属性的值并将之转化为一个字符串,名后将其插入到输出的页面中.

语法:

   

5.       SetProperty指令

标签用来设置Bean中的属性值。

基本语法:

   

6.       把字符串转化为其它类型的方法

Property类型

方法

boolean

java.lang.Boolean.valueOf(String).booleanValue()

Boolean

Java.lang.Boolean.valueOf(String)

Byte

Java.lang.Byte.valueOf(String).byteValue()

Byet

java.lang.Byte.valueOf(String)

char

java.lang.Character.valueOf(String).charValue()

Character

java.Character.valueOf(String).charValue()

Double

java.lang.Double.valueOf(String).doubleValue()

int

java.lang.Integer.valueOf(String).intValue()

Integer

Java.lang.Integer.valueOf(String)

… …

 

 

7.       Plugin指令

执行一个AppletBean,有可能的话还要下载一个Java插件用于执行它。

7        JSP的内建对象概述

 

7.1.     处理汉字信息

当用request对象获取客户提交的汉字字符时,会出现乱码问题,所以对含有汉字字符的信息必须进行特殊的处理方式。首选项,将获取的字符串用ISO-8859-1进行编码,并将编码存放到一个字节数组中,然后再将这个数组转化为字符串对象即可。如下列所示:      String str=request.getParameter(“girl”);

    Byte b[]=str.getBytes(“ISO-8859-1”);

    str=new String(b);

通过上述过程,提交的任何信息(无论是汉字字符或西欧字符)都能正确地显示。

实验不通过

7.2.     常用方法举例

6.     getProtocol()    获取客户向服务器提交信息所使用的通信协议,比如http/1.1

7.     getServletPath() 获取客户请求的JSP页面文件的目录

8.     getContentLength()       获取客户提交的整个信息长度

9.     getMethod()      获取客户提交信息的方式,比如postget

10. getHeader(String s)      获取HTTP头文件中由参数s指定的头名字的值

11. getHeaderNames() 获取头名字的一个枚举

12. getHeaders(String s)     获取头文件中指定头名字的全部值的一个枚举

13. getRemoteAddr()  获取客户的IP地址

14. getRemoteHost()  获取客户机的名称(如果获取不到,就获取IP地址)

15. getServerName()  获取服务器的名称

16. getServerPort()  获取服务器的端午号

17. getParamerterNames()     获取客户提交的信息体部分中name参数值的一个枚举

 

8        JSP的乱码解决方案:

1.       文件头加上

<%@ page contentType=”text/html; charset=GBK”%>

<%@ page contentType=”text/html; charset=GB2312”%>

 

 

9        语句、ResultSets以及与数据库的互动

“语句”对象是发送/执行(常规)SQL语句,并通过相关“连接”检索结果的容件或传输机制。“连接界面控制的区域”中曾经介绍,语句类型有三种,包括Prepared StatementsCallable Statements,两者都是“语句”的子界面。如前所述,无需创建新的“语句”实例,而是请求相关的“连接”进行创建:

Statement stmt=con.createStatement();

Execute系列是“语句”方法最常使用的:

executeQuery()用来执行返回单个ResultSetSQL语句。

executeUpdate()用来执行修改表或表中列值的SQL语句,并返回修改过的行数(在DDL语句中为零)

excecute()可用于执行任何类型的SQL语句,但更针对那些可以返回多个结果或值的SQL语句。

 

10  JavaBeans的属性

属性是Bran组件内部状态的抽象表示。javaBeans的属性可以分为以下四类:

l         Simple简单的

l         Indexed索引的

l         Bound绑定的

l         Constrained约束的

 

简单属性依赖于标准命名约定来定义getXXX()方法和setXXX()方法。

索引属性则允计读取和设置整个数组,也允许使用数组索引单独地读取和设置数组元素。

绑定属性则是其值发生变化时要广播给属性变化监听器的属性。

约束属性则是那些值发生改变及起作用之前,必须由约束属性变化监听生效的属性。

1、简单属性(Simple

    一个简单属性表示一个伴随有get/set方法的变量。基本上,采用通常所说的存取方法来设置和检索Bean的属性。即:

public void set(value);

public get();

例如,对于“MyBean”属性,我们可以采用下面的方法:

public void setMyBean(MyBeanType value);

pulbic MyBeanType getMyBean();

 

对于布尔属性,我们使用下面的方法:

pubilc boolean inMyBooleanBean();

public void setMyBooleanBean(boolean value);

 

2、索引属性(Indexed

一个Indexed索引属性表示一个数组值。同上所述的Simple简单属性一样,可以合用get/set方法取得数组中的值。

 

3、绑定属性(Bound

绑定属性提供一种机制,即通知监听器一个JavaBeans组件的属性发生了改变。监听器实现了PropertyChangeListener接口并接收由JavaBeans组件产生的PropertyChangeEvent对象,PropertyChangeEvent对象包括一个属性名字,旧的属性值以及第一个监听器可能要访问的新属性值。

 

4、约束属性(Constrained

约束属性和绑定属性类似,但是属性值的变化首先要被所有的监听器验证之后,值得变化才能由JavaBeans组件发生和用。一个JavaBeans的约束属性是指当这个属性的值要发生变化时,与这个属性已经建立了某种连接的其他Java对象可否决属性值的改变。任何一个监听器都可以否决属性变化,JavaBeans组件同意不使属性变化才能生效。

11  JavaBeans的应用

方法是处理事件的手段,而事件处理则是JavaBeans体系结构的核心之一。

JavaBeans容器环境可以接收JavaBeans组件事件通知,并且,如果JavaBeans组件符合一些简单规则,就可以在设计时选择JavaBeans组件可以响应的事件。在JavaBeans组件上加入和删除方法必须以标准方式定义,以便分别加入和删除事件监听器。JavaBeans容器能够加入或删除对事件监听器的引用,它使用允许容器与组件事件交互的JavaBeans组件。

12  编写beans规则

为了能让使用这个beans的应用程序构建工具(比如JSP引擎)知道这个beans的属性和方法,只需在类的方法命名上遵守以下几点:

       如果类的成员变量的名字是xxx,那么为了更改或获取成员变量的值,即更改或获取属性,在类中可以使用两个方法:

getXxx(),用来获取属性xxx

setXxx(),用来修改属性xxx

       对于boolean类型的成员变量,即布尔逻辑类型的属性,允许使用is代替上面的getset

       类中方法的访问属性都必须是pubic

       类中如果有构造方法,那么这个构造方法也是public的,并且是无参数的。

(耿祥义,张跃平,《JSP实用教程》,清华大学出版社,200411月,P184

13  什么是JSP

简明扼要地说,JSP是一种用来开发含有动态内容网页的技术。

14  Servlet

简单地说,servlet是一段向服务器(通常是Web服务器)上加入新功能的代码。

15  jsp语句

1、  现在很少用table来定位了,table不是表示层的语言,现在一般用div+css来定位。后者可以较方便地改变界面设计,而前者,要改变界面风格,很难。

2、  table中最好不要嵌套form语句,一个jsp页面中,最好只有一个form语句, jsp中,除了id, name不可以改变以外,其它的属性都可以通过程序段来改变,所以,提交不同的submit,可以触发不同的action

3、  table中嵌套form语句,虽然服务器不会报错,但代码会很不美观。

 

16  jsp页面从servlet中取出类对象

this.getServletContext().getRequestDispatcher("所要发送到的目的页面URL").forward(request, response);

 

13:jsp/servet重定向问题
不改url的:
  1
:)servlet:
    public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

      getServletContext().getRequestDispatcher(test2URL).forward(request, response);
 2:)jsp
 
url的:
  1
:)response.sendRedirect("/web/mail/pop3.jsp");

 

 

Listing 1

//...
//initialize RequestDispatcher object; set forward to home page by default
RequestDispatcher rd = request.getRequestDispatcher("home.jsp");

//Prepare connection and statement
rs = stmt.executeQuery("select password from USER where userName = '" + userName + "'");
if (rs.next()) { //Query only returns 1 record in the result set; only 1
  password per userName which is also the primary key
   if (rs.getString("password").equals(password)) { //If valid password
      session.setAttribute("User", userName); //Saves username string in the session object
   }
   else { //Password does not match, i.e., invalid user password
      request.setAttribute("Error", "Invalid password.");


      rd = request.getRequestDispatcher("login.jsp");
   }
} //No record in the result set, i.e., invalid username
   else {

      request.setAttribute("Error", "Invalid user name.");
      rd = request.getRequestDispatcher("login.jsp");
   }
}

//As a controller, loginAction.jsp finally either forwards to "login.jsp" or "home.jsp"
rd.forward(request, response);
//...

In this and the rest of the accompanying sample Web applications, the security realm is assumed to be an RDBMS. However, this article's concept is transparent and applicable to any security realm.

17  在文本框中只能输入数字和小数点

1.          type="text"    name="input"

onpropertychange="if(isNaN(value))execCommand('undo')"  />

此种方法只能输入数字和小数点,且像000000000000012454这样的数字也能给把前面的0都去掉。

 

18  关于数据库暂停与停止而出现的问题(未解决)

 

头儿,我发现了一个很奇怪的现象,不知道是为什么。

 

首先,数据库保持连接,程序正常运行;

现在我把数据库暂停,然后运行要与数据库进行连接的程序,居然还能得到正确结果。

 

然后,我把数据库关了,程序的运行结果和预期一样跳到错误页面

现在我重启数据库,刷新了页面,程序居然还是会跳到错误页面,提示是数据库那里出了问题。

 

最后,我重新登录了我的程序,程序就能正常运行了。

 

19  checkboxjsp中的使用方法

%@ page language="Java" contentType="text/html" %
%@ page import="com.ora.jsp.util.*" %
html
body bgcolor="white"
form action="checkbox.jsp"
input type="checkbox" name="fruits" value="Apple"Applebr
input type="checkbox" name="fruits" value="Banana"Bananabr
input type="checkbox" name="fruits" value="Orange"Orangebr
input type="submit" value="Enter"
/form

%
String[] picked = request.getParameterValues("fruits");               //
得到checkbox的值,是一个数组
if (picked != null && picked.length != 0) {                                  //
判断有选择

%
You picked the following fruits:                                      //
输出选择的内容
form
input type="checkbox" name="fruits" value="Apple"
%= ArraySupport.contains(picked, "Apple")?"checked" : "" %> >Applebr
input type="checkbox" name="fruits" value="Banana"
%= ArraySupport.contains(picked,"Banana")?"checked":"" %> >Bananabr
input type="checkbox" name="fruits" value="Orange"
%= ArraySupport.contains(picked,"Orange")?"checked" : "" %> >Orangebr
/form
% } %
/body
/html

20  Servlet/JSP服务器端的重定向

通常,在一个设计良好的Web用中,都会合使用ServletJSPServlet控制业务JSP则负责业务处果的示。此,将大量用到重定向技

重定向技可以分,一是客端重定向,一是服器端重定向。客端重定向可以通过设置特定的HTTP,或者写JavaScript脚本实现。本文主要探器端重定向技实现

器端的重定向相关类



器端的重定向技术涉及到javax.servlet.ServletContextjavax.servlet.RequestDispatcherjavax.servlet.http.ServletRequestjavax.servlet.http.ServletResponse等几个接口。


服务器端的重定向方式



器端的重定向可以有两方式,一是使用HttpServletResponsesendRedirect()方法,一是使用RequestDispatcherforward()方法。下面对这方式行介

HttpServletResponse.sendRedirect()
方法

HttpServletResponse
接口定了可用于向的sendRedirect()方法。如下:

public void sendRedirect(java.lang.String location)throws java.io.IOException

个方法将响定向到参数location指定的、新的URLlocation可以是一个绝对URL,如response.sendRedirect("http://java.sun.com")也可以使用相URL。如果location“/”开头容器认为于当前Web用的根,否,容器将解析于当前求的URL这种重定向的方法,将致客浏览器的URL。从浏览器中的地址中可以看到新的URL地址,作用似于上面HTTP应头信息的实现

RequestDispatcher.forward()方法

RequestDispatcher是一个Web源的包装器,可以用来把当前request传递该资源,或者把新的源包括到当前响中。RequestDispatcher接口中定了两个方法,参如下代

public interface RequestDispatcher {

 void forward(ServletRequest request, ServletResponse response);

 void include(ServletRequest request, ServletResponse response);

}

forward()方法将当前的requestresponse重定向到RequestDispacher指定的源。实际项目中大量使用,因完成一个业务操作往往需要跨越多个步骤步骤完成相理后,向到下一个步骤。比如,通常业务处理在Servlet理,理的向到一个JSP示。这样看起来似于Servlet的功能,但是有一些区。一个RequestDispatcher象可以把送到任意一个服源,而不仅仅是另外一个Servlet include()方法将把Request Dispatcher源的出包含到当前出中。

注意,只有在尚未向客出响应时才可以forward()方法,如果存不空,在重定向前将自清除存。否将抛出一个IllegalStateException异常。

如何得到RequestDispatcher


有三方法可以得到Request Dispatcher象。

1.javax.servlet. ServletRequest
getRequestDispatcher(String path)方法,其中path可以是相路径,但不能越出当前Servlet上下文。如果path“/”开头解析于当前上下文的根。

2.javax.servlet. ServletContext
getRequestDispatcher(String path)方法,其中path“/”开头,路径相于当前的Servlet上下文。可以ServletContextgetContext(String uripath)得到另一个Servlet上下文,并可以向到外部上下文的一个服接。

3.
使用javax.servlet. ServletContextgetNamedDispatcher(String name)得到名name的一个Web源,包括ServletJSP面。源的名字在Web用部署描述文件web.xml中指定。

方法的使用有微的差。比如,下面是一个用的配置文件web.xml





"http://java.sun.com/j2ee/dtds/web-app_2_2.dtd">





FirstServlet

org. javaresearch.redirecttest.ServletOne





SecondServlet

org.javaresearch. redirecttest.ServletTwo





FirstServlet

/servlet/firstservlet/





SecondServlet

/servlet/secondservlet/







其中定了两个Servlet,名字分别为FirstServletSecondServlet对应别为org.javaresearch. redirecttest.ServletOneorg. javaresearch.redirecttest.ServletTwo。可以在浏览器中通过类似于下面的访问

http://localhost:8080/servlet/firstservlet/

使用1中方法,例如在firstservlet可以写入下面的代

RequestDispatcher rd = request.getRequestDispatcher("secondservlet");

rd.forward(request, response);

控制向到第二个Servlet了。

使用2中的方法,可以从Servlet Context中得到RequestDispatcher如下:

RequestDispatcher rd = getServletContext().getRequest

Dispatcher("/servlet/secondservlet");

rd.forward(request, response);


使用3中的方法,从上面的web. xml配置文件可以看到定了两个Servlet,名字分别为FirstServletSecondServlet,所以可以得到命名的Dispatcher





RequestDispatcher rd =  getServletContext().getNamedDispatcher("SecondServlet");

rd.forward(request, response);



这样也可以重定向到SecondServlet了。

JSP页面中的重定向



JSP
在解析后编译为一个Servlet运行,所以在JSP中也可以使用上面的重定向代,并且,JSP提供了更便利的操作,如下:

JSP行到儿,将止当前的理,将控制交由nextpage.jsp

 

如何选择

 

RequestDispatcher.forward()方法和HttpServletResponse.sendRedirect()方法的区别是:前者仅是容器中控制权的转向,在客户端浏览器地址栏中不会显示出转向后的地址;后者则是完全的跳转,浏览器将会得到跳转的地址,并重新发送请求链接。这样,从浏览器的地址栏中可以看到跳转后的链接地址。所以,前者更加高效,在前者可以满足需要时,尽量使用Request Dispatcher.forward()方法,并且,这样也有助于隐藏实际的链接。在有些情况下,比如,需要跳转到一个其它服务器上的资源,则必须使用HttpServletResponse.sendRequest()方法。

 

21  几个表单常用的验证脚本


1.
只允许输入数字
2.
禁止
3.
paste,但不破坏clipboard
4.
禁止drag
===================================================
 

禁止选择
===================================================

 

你可能感兴趣的:(jsp,jsp,javabeans,servlet,string,include,服务器)