JDBC-Servlet-JSP入门

原创 2005年04月28日 08:22:00
第一部分
介绍及配置
    J2EE说白了其实就是一些规范的集合,其中包括JDBC、Servlet、JSP、EJBs、JavaMail、XML等。这里主要介绍一下JDBC-Servlet-JSP这三项技术,它们主要用于开发一些WEB应用。
    1.JDBC是一组Java连接数据库的标准API,使用它们能够简单方便地实现纯Java的数据库访问操作。
一个普通数据库的连接过程为:
          1.加载驱动程序
          2.通过DriverManager到得一个与数据库连接的句柄
          3.通过连接句柄绑定要执行的语句
          4.接收执行结果
          5.对结果进行必要的处理以提取自己想要的数据
          6.关闭数据库的连接
       无论实现本地数据库开发或者Web数据库开发,JDBC连接数据库的基本步骤都和上面的过程类似。
    2.Servlet是一个专门用于编写网络服务器应用程序的Java组件。所有基于Java服务器编程都是基于Servlet的。如后面要介绍的JSP最后是也要通过JSP引擎转换为Servlet的。Servlet适用于多种网络协议,如Http、Ftp、Smtp等等。目前只有Http服务形成了标准组件,也就是我们要用到的javax.servlet.http这个包。作为一种服务器端的应用,当被请求时开始执行,这和CGI Perl脚本很相似。Servlets和CGI脚本的一个很大的区别是:每一个CGI在开始的时候都要求开始一个新的进程,而servlets是在servlet引擎中以分离的线程来运行的。
    3.JSP则相对于ASP是用来开发动态网页的,JSP页面由HTML代码和嵌入其中的Java代码所组成。服务器在页面被客户端所请求以后对这些Java代码进行处理,然后将生成的HTML页面返回给客户端的浏览器。一般为了使网站更易于开发和维护,都采用简单的JSP页面+JavaBean。
    JSP一般的运行方式为:当服务器启动后,当Web浏览器端发送过来一个页面请求时,Web服务器先判断是否是JSP页面请求。如果该页面只是一般的HTML/XML页面请求,则直接将HTML/XML页面代码传给Web浏览器端。如果请求的页面是JSP页面,则由JSP引擎检查该JSP页面,如果该页面是第一次被请求、或不是第一次被请求但已被修改,则JSP引擎将此JSP页面代码转换成Servlet代码,然后JSP引擎调用服务器端的Java编译器javac.exe对Servlet代码进行编译,把它变成字节码(.class)文件,然后再调用JAVA虚拟机执行该字节码文件,然后将执行结果传给Web浏览器端。如果该JSP页面不是第一次被请求,且没有被修改过,则直接由JSP引擎调用JAVA虚拟机执行已编译过的字节码.class文件,然后将结果传送Web浏览器端。
    一般JSP开发Web应用的主要框架如下:
             Web应用(如网站等)
             JSP引擎
             Web服务器
             操作系统
   由于JSP是基于Java的一个J2EE协议,所以也能够write one,run everywhere。所以底层的操作系统既可以使用Windows,也可以使用Unix、Solaris。Web服务器目前比较流行的有WebLogic、WebSphere、JBoss等,还有一些是免费的如Tomcat、Resin等。至于JSP引擎,一般的Web服务器都自带,如Tomcat,引擎主要是将JSP的代码转换位Servlet代码的。
    一般学习使用这三项技术实现Web应用可以先采用较为简单易用的服务器,如Tomcat,然后再逐步深入使用其它一些复杂的商业性服务器。本篇主要使用Tomcat来展开学习。至于数据库则采用Mysql,原因主要是它开源免费而且好用,Yahoo的数据库用的好像也是它。
     开发Web应用的第一步就是进行开发环境的搭建,对于入门来说这真的是一件让人很头疼的事,不知以后会不会出现那种自动帮助我们配置的工具。
我们选择的开发环境是Eclipse+Tomcat+Mysql,下面介绍配置步骤:
   1.下载Eclipse(绿色软件免安装,Java的开发环境)
   2.下载jdk1.5.0_01并安装,启动Eclipse,选择 Window > Preferences > Java,选择或者新添jre地址,ok,现在试着建一个project,写写HelloWorld看是否配置成功。
   3.下载Tomcat安装、下载Eclipse的Tomcat插件tomcatPluginV3.zip将其解压到Eclipse的plugins目录下,启动Eclipse,选择 Window > Preferences > Tomcat,选择对应的Tomcat,并填入Tomcat的安装路径。
   4.下载Lomboz和EMF runtime并将它们解压放到plugins目录下,启动Eclipse,选择Window > Preferences >Lomboz,对Lomboz进行配置包括jre和Tomcat,注意须在Library中加入Tomcat的common的lib目录下的一些jar文件,ok,现在来试试看Tomcat是否配置成功,
     41.建一个Lomboz J2EE project,填入name为TestJsp;
     42.下一步,再下一步;
     43.添加WebModules的name为test,Targeted Servers选择Tomcat,注意选择已安装的Tomcat版本,ok完成;
     44.找到Lomboz J2EE View,这里头有刚才建的test的WebModules,单击右键对这个Modules进行deploy(这一步粉重要)后再Start Tomcat;
     45.在左边的workspace里找到刚建的test目录,单击右键选择Lomboz J2EE>Show in Browser,如果出现Welcome的网页就表示配置ok了。
    5.下载Mysql安装、下载Java-Mysql的connector并取其中的xxxbin.jar将其复制到Tomcat的common的lib目录下。
建一个本地数据库访问程序:
     51.在Mysql中建一个数据库,添加表,插入数据。
     52.建一个Java project,在Library中添加Add Extended Library中添入Mysql的Connector。
     53.根据数据库的编写步骤,写一个访问数据库的程序。先写一个访问本地数据库的程序调试一下是否配置成功,再写Web的,Web数据库的操作与本地数据库类似,只不过是在JSP页面或JavaBean中实现的。
 
第二部分
深入协议
1.JDBC
简要介绍
1)Class.forName
Class.forName("xxxxxxxxxxxxxxxxxxxxxxx"); 用于加载驱动程序
2)DriverManager
DriverManager类是 JDBC 的管理层,作用于用户和驱动程序之间。通常通过DriverManager.getConnection建立与数据库的连接。
3)statement(Statement、PreparedStatement、CallableStatement)
Statement 对象用于将 SQL 语句发送到数据库中。实际上有三种 Statement 对象,它们都作为在给定连接上执行 SQL 语句的包容器:Statement、PreparedStatement(它从 Statement 继承而来)和 CallableStatement(它从 PreparedStatement 继承而来)。它们都专用于发送特定类型的 SQL 语句: Statement 对象用于执行不带参数的简单 SQL 语句;PreparedStatement 对象用于执行带或不带 IN 参数的预编译 SQL 语句;CallableStatement 对象用于执行对数据库已存储过程的调用。
Statement 接口提供了执行语句和获取结果的基本方法。PreparedStatement 接口添加了处理 IN 参数的方法;而 CallableStatement 添加了处理 OUT 参数的方法。
Statement 接口提供了三种执行 SQL 语句的方法:executeQuery、executeUpdate 和 execute。使用哪一个方法由 SQL 语句所产生的内容决定。
方法 executeQuery 用于产生单个结果集的语句,例如 SELECT 语句。
方法 executeUpdate 用于执行 INSERT、UPDATE 或 DELETE 语句以及 SQL DDL(数据定义语言)语句,例如 CREATE TABLE 和 DROP TABLE。INSERT、UPDATE 或 DELETE 语句的效果是修改表中零行或多行中的一列或多列。executeUpdate 的返回值是一个整数,指示受影响的行数(即更新计数)。对于 CREATE TABLE 或 DROP TABLE 等不操作行的语句,executeUpdate 的返回值总为零。
方法 execute 用于执行返回多个结果集、多个更新计数或二者组合的语句。
4)ResultSet
结果集一般是一个表,其中有查询所返回的列标题及相应的值。它包含符合 SQL 语句中条件的所有行。
ResultSet.next 方法用于移动到 ResultSet 中的下一行,使下一行成为当前行。
方法 getXXX 提供了获取当前行中某列值的途径。
要确定给定结果值是否是 JDBC NULL,必须先读取该列,然后使用 ResultSet.wasNull 方法检查该次读取是否返回 JDBC NULL。
 
实现及示例
再简述一遍连接数据库过程 :
         1.加载驱动程序
         2.通过DriverManager到得一个与数据库连接的句柄
         3.通过连接句柄绑定要执行的语句
         4.接收执行结果
         5.对结果进行必要的处理以提取自己想要的数据
         6.关闭数据库的连接
下面是连接mysql的实例,可以对照看一下
import java.sql.*;
 
public class ConMySQL {
       public static void main(String arg[]) {
              String dbName = "test";
              String Login = "root";
              String Password = "pluto";
              String ConnStr = "jdbc:MySQL://localhost/" + dbName + "?user=" + Login
                            + "&password=" + Password;
              try {
                     Class.forName("com.mysql.jdbc.Driver");
                     Connection conn = DriverManager.getConnection(ConnStr);
                     Statement stmt = conn.createStatement();
                     ResultSet results = stmt.executeQuery("select * from stuinfo");
                     while (results.next()) {
                            String name = results.getString("name");
                            String sex = results.getString("sex");
                            System.out.println(name + "  " + sex);
                     }
                     conn.close();
              } catch (Exception exc) {
                     exc.printStackTrace();
              }
       }
}
对于插入的操作,一般使用PreparedStatement,请看下面实例
PreparedStatement stm;
stm=con.prepareStatement("insert into Indent(IndentID,UserName,TPrice)values(?,?,?);");
stm.setInt(1, id);
String user = (String)session.getAttribute("username");
stm.setString(2, user);
stm.setInt(3, 100);
stm.executeUpdate();
 
2.Servlet
要理解Servlet可以先将Servlet和Applet、CGI、JSP等进行比较。
Servlet主要包括两个包:
1)javax.servlet
        interface RequestDispatcher
  //定义一种对象,用于从客户接受请求,并将请求发送到服务器上任何指定的资源,如一个Servlet 、JSP 或 HTML 文件。
  interface Servlet
  //定义了所有 Servlet 必须实现的方法。
  interface ServletConfig
  //定义Servlet config 对象,由Servlet 引擎用在 Servlet 初始化时,向 Servlet 传递信息。
  interface ServletContext
  //定义了一系列方法,以便Servlet与其运行的环境通信。
  interface ServletRequest
  //定义了用于向Servlet传递客户请求信息的对象。
  interface ServletResponse
  //定义了一个对象,由Servlet用于向客户发送响应。
  interface SingleThreadModel
  //用于保证Servlet在任一时刻,只处理一个请求。
  class GenericServlet
  //继承Servlet接口,定义了一个通用的,与协议无关的Servlet。
  class ServletInputStream
  //定义了一个输入流,用于由Servlet从中读取客户请求的二进制数据。
  class ServletOutputStream
  //定义了一个输出流,用于由Servlet向客户发送二进制数据。
  class ServletException
  //定义了一个当Servlet遇到问题时可以抛出的异常。
  class UnavailableException
  //定义了一种异常,用于由Servlet指明它永远或暂时不可用。
 
    其中一个最重要的类是GenericServlet,它继承Servlet接口,定义了一个通用的,与协议无关的Servlet,通过它继承它,可以进行一些处理客户请求的操作。
一个Servlet的工作过程包括(与Applet类似):
       1.创建并初始化(init())
       2.处理客户端的请求(service(ServletRequest req,ServletResponse res))
       3.删除Servlet,回收资源,终止Servlet运行(destroy())
示例:
import java.io.*;
import java.util.*;
import javax.servlet.*;
public class TestGenericServlet extends GenericServlet {
       public void init(ServletConfig config)throws ServletException {
              super.init(config);
              //调用父类的初始化方法;也可以加入自己需要的初始化代码。
       }
       public void destroy() {
              //destroy方法中加入一些做最后清理工作的代码;
       }
       public String getServletInfo() {
              return "This servlet is a simple Servlet's example.";
              //返回此servlet的信息       ;
       }
       public void service(ServletRequest req,ServletResponse res)
                     throws ServletException,IOException {          
              //service是最主要的方法,提供服务
              //获得服务器当前时间。
              Date today=new Date();
              ServletOutputStream out=res.getOutputStream();
 
              //通过输出流向客户端写回了一个HTML文件;
              out.println("<html><head><title>HelloServlet.java</title></head><body>");
              out.println("Hello,this is my first test.+<BR>");
              out.println("Today is "+today.toString()+"<BR>");
              out.println(getServletInfo()+"<BR>");
       }
}     
 
2)javax.servlet.http
        interface HttpServletRequest
  //继承了ServletRequest 接口,为HTTPServlet 提供请求信息。
  interface HttpServletResponse
  //继承了ServletResponse 接口,为HTTPServlet 输出响应信息提供支持。
  interface HttpSession
  //为维护 HTTP 用户的会话状态提供支持。
  interface HttpSessionBindingListener
  //使得某对象在加入一个会话或从会话中删除时能够得到通知。
  interface HttpSessionContext
  //由Servlet 2.1 定义,该对象在新版本已不被支持。
  class Cookie
        //用在Servlet 中使用Cookie 技术
  class HttpServlet
        //定义了一个抽象类,继承 GenericServlet 抽象类,应被 HTTPServlet 继承。
  class HttpSessionBindingEvent
  //定义了一种对象,当某一个实现了HttpSessionBindingListener接口的对象被加入会话或从会//话中删除时,会收到该类对象的一个句柄
  class HttpUtils
  //提供了一系列便于编写HTTPServlet 的方法。
 
        其中一个最重要的类是HttpServlet,它从GenericServlet 继承而来,因此它具有GenericServlet 类似的方法和对象,一般的Servlet编程都用这个类,而少用GenericServlet类。
HttpServlet类中包括几个常用的方法(几乎对应于Http1.1)
如:doGet();doPost();doDelete();doPut();doOptions();doTrace()等。
        虽然HttpServlet在响应客户请求时没有显示的调用service而只是调用doGet等方法,但是Servlet内部还是会进行转化的,service与doGet等方法是一致的。Service是处理客户请求的核心。
示例:
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
public class TestHttpServlet extends HttpServlet {
       public void doGet(HttpServletRequest req,HttpServletResponse res)
                     throws ServletException,IOException {
              res.setContentType("text/html");
              ServletOutputStream out=res.getOutputStream();
              out.println("<html>");
              out.println("<head><title>testHttpServlet.java</title></head>");
              out.println("<body>");
              out.println("<h3>Hello,this is a HttpServlet's test!</h3>");
              out.println("</body></html>");
       }
      
}
 
3.JSP
JSP的语法
1)HTML注释
语法:<!-- comment [ <%= expression %> ] -->
2)隐藏注释
语法:<%-- comment --%>
3)声明
语法:<%! declaration; [ declaration; ]+ ... %>
4)表达式
语法:<%= expression %>
5)程序段
语法:<% code fragment %>
6)Include 指令
语法:<%@ include file="relativeURL" %>
7)Page 指令
语法:
<%@ page
[ language="java" ]
声明脚本语言的种类,暂时只能用"java"
[ extends="package.class" ]
标明JSP编译时需要加入的Java Class的全名,但是得慎重的使用它,它会限制JSP的编译能力.
[ import="{package.class | package.*}, ..." ]
需要导入的Java包的列表,这些包就作用于程序段,表达式,以及声明。
[ session="true | false" ]
设定客户是否需要HTTP Session.(学过ASP的人,应该对它不陌生)如果它为true,那么Session是有用的。
[ buffer="none | 8kb | sizekb" ]
buffer的大小被out对象用于处理执行后的JSP对客户浏览器的输出。缺省值是8kb
[ autoFlush="true | false" ]
设置如果buffer溢出,是否需要强制输出,如果其值被定义为true(缺省值),输出正常,如果它被设置为false,如果这个buffer溢出,就会导致一个意外错误的发生.如果你把buffer设置为none,那么你就不能把autoFlush设置为false.
[ isThreadSafe="true | false" ]
设置Jsp文件是否能多线程使用。缺省值是true,也就是说,JSP能够同时处理多个用户的请求,如果设置为false,一个jsp只能一次处理一个请求
[ info="text" ]
一个文本在执行JSP将会被逐字加入JSP中,你能够使用Servlet.getServletInfo方法取回。
[ errorPage="relativeURL" ]
设置处理异常事件的JSP文件。
[contentType="mimeType[;charset=characterSet ]" | "text/html ; charset=ISO-8859-1" ]
设置MIME类型 。缺省MIME 类型是: text/html, 缺省字符集为 ISO-8859-1.
[ isErrorPage="true | false" ]
设置此页是否为出错页,如果被设置为true,你就能使用exception对象.
%>
8)<jsp:forward>
语法:
用法⒈<jsp:forward page={"relativeURL" | "<%= expression %>"} />
用法⒉<jsp:forward page={"relativeURL" | "<%= expression %>"} >
      <jsp:param name="parameterName"
value="{parameterValue | <%= expression %>}" />+
</jsp:forward>
       <jsp:forward>常用页面跳转,并可在页面之间传递参数。
9)<jsp:include>
       语法:
       1.jsp:include page="{relativeURL | <%= expression%>}" flush="true" />
       2. <jsp:include page="{relativeURL | <%= expression %>}" flush="true" >
<jsp:param name="parameterName" value="{parameterValue|<%=expression%>}"/>
</jsp:include>
<jsp:include>元素允许你包含动态文件和静态,这两种包含文件的结果是不同的。如果文件仅是静态文件,那么这种包含仅仅是把包含文件的内容加到jsp文件中去,而如果这个文件动态的,那么这个被包含文件也会被Jsp编译器执行。如果这个包含文件是动态的,那么你还可以用<jsp:param>还传递参数名和参数值。
10)<jsp:plugin>
<jsp:plugin>元素用于在浏览器中播放或显示一个对象(典型的就是applet和Bean),而这种显示需要在浏览器的java插件。
11)<jsp:useBean>
       语法:
<jsp:useBean
id="beanInstanceName"
scope="page | request | session | application"
{
class="package.class" |
type="package.class" |
class="package.class" type="package.class" |
beanName="{package.class | <%= expression %>}" type="package.class"
}
{
/> |
> other elements </jsp:useBean>
<jsp:useBean>用于定位或示例一个JavaBeans组件。<jsp:useBean>首先会试图定位一个Bean实例,如果这个Bean不存在,那么<jsp:useBean>就会从一个class或模版中进行示例。
12)<jsp:setProperty>
       与<jsp:useBean>元素连用,用于设置Bean的属性值。
13)<jsp:getProperty>
语法:
<jsp:getProperty name="beanInstanceName" property="propertyName" />
这个<jsp:getProperty>元素将获得Bean的属性值,并可以将其使用或显示在JSP页面中.在你使用<jsp:getProperty>之前,必须用<jsp:useBean>创建它。name="beanInstanceName" ,bean的名字,由<jsp:useBean>指定;property="propertyName" ,所指定的Bean的属性名。
14)在设计JSP网页时还有几点是常用的:
   (1)连接数据库
       连接数据库可以直接嵌入JSP页面中,也可以做成Bean方式,再通过useBean在页面中使用,个人感觉后者结构比较清晰,推荐后者。
   (2)登陆验证
       主要是先获得用户填入的username和password,再将它们和数据库中的信息表相比较如果符合,则通过session来设置用户的访问权限,否则转至error页面。在用户访问其它页面时也都要先判断用户的session来验证用户是否有权访问该页面。
   (3)页面跳转
       主要是通过forword来实现页面之间的跳转并通过param传递参数值。也可通过网页中的herf来实现跳转。
 

jsp+servlet+jdbc注册登录入门项目

  • 2017年11月11日 14:49
  • 945KB
  • 下载

Web入门JDBC+Servlet+JSP增加(三)

创建EmployeeAddServlet public class EmployeeAddServlet extends HttpServlet{ private static final long...

目前入门水平servlet+jsp+js+jquery+jdbc+mysql写的超市管理系统(小白要成长啦♪(^∇^*))

学了java web后自己用servlet+jsp+js+jquery+jdbc+mysql写了一个超市管理系统。 主要是登录权限,然后就是增删改查四个功能模块。刚学,也没学框架,反正就是纯代码自己敲...

Jdbc入门介绍第二章——Jdbc结合JSP和Servlet的简单综合应用

接下来我们来做结合Servlet和JSP技术的简单的综合应用。 首先新建一个web项目,将之前的工具类和oracle驱动贴在相应的位置,如图Web项目添加驱动Jar有个方便的方法,直接将jar文件复...

Servlet+JDBC+JSP项目实战源代码

  • 2017年06月22日 17:03
  • 51KB
  • 下载

4 JSP+Servlet + JDBC 实现简单的登录验证模块

数据库设计+编码+运行调试   数据库准备 : 二话不说,上图 + JDBC 实现简单的登录验证模块" title="JSP+Servlet + JDBC 实现简单的登录验证模块" style...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:JDBC-Servlet-JSP入门
举报原因:
原因补充:

(最多只允许输入30个字)