http://blog.sina.com.cn/restartmydream[订阅]
字体大小: 正文
JSP快速入门教程---全十讲---转载(好文章啊)--后(2008-07-17 21:18:25)

第六讲(参考Java Web程序设计基础教程第6、9章)
1、分析登录功能

   界面:登录界面index1.jsp;登录成功的界面login_success.jsp。
   功能:UserBean的login方法完成登录的判断。
   Servlet:LoginServlet.java
      (1)接收用户输入的用户名和口令(2)调用UserBean的login方法进行判断(3)根据方法的返回值选择界面响应。

2、MVC模式

    M表示模型,主要表示系统中的功能处理部分。例如,上面的UserBean就是一个模型,描述用户信息以及相关功能。
    V表示视图,表示系统中与人进行交互的部分。例如,上面的index1.jsp和login_success.jsp。
    C表示控制器,建立模型与视图之间的关联关系。例如,上面的LoginServlet.java。
       输入界面直接调用控制器,控制器接收用户在输入界面上输入的信息,控制器把信息传递给模型,调用模型的方法,方法会给控制器返回一个值,控制器根据这个值选择输出界面对用户响应。
    MVC模式把系统的每一个功能都分解成这个3个部分。然后分别实现。

3、采用MVC模式实现注册功能

    一般先考虑V,包括输入界面和输出界面,对于注册功能来说,输入是注册界面,输出是注册成功或者失败的界面,通常使用JSP文件。
    接下来考虑M,功能如何实现,对于注册功能来说,需要把用户提交的信息写到数据库中。需要在UserBean中编写添加用户的方法。
    考虑C,如何协调M和V。需要编写Servlet,在doGet或者doPost方法中主要完成:接收输入;调用UserBean的方法;选择界面响应。

4、创建注册用的表

create table usertable2
(
   username varchar(10) primary key,
   userpass varchar(10),
   sex char(2),
   fav varchar(20),
   degree varchar(8),
   comment varchar(100),
   email varchar(30)
)

5、V部分

   采用原来的register.jsp和success.jsp。

6、M部分
  
   在UserBean中添加方法,add方法。方法代码如下:
   public boolean add(){
      // 定义变量
      Connection con = null;
      PreparedStatement stmt = null;
      String driverClass = "sun.jdbc.odbc.JdbcOdbcDriver";
      String url = "jdbc:odbc:bookstore";
      String sql = "insert into usertable2 values(?,?,?,?,?,?,?)";
      boolean success = true;

      try{
         // 第一步:加载驱动
         Class.forName(driverClass);
         // 第二步:建立连接
         con = DriverManager.getConnection(url,"","");
         // 第三步:创建语句对象
         stmt = con.prepareStatement(sql);
         // 第四步:对SQL语句中参数赋值
         stmt.setString(1,username);
         stmt.setString(2,userpass);
         stmt.setString(3,sex);
         stmt.setString(4,fav);
         stmt.setString(5,degree);
         stmt.setString(6,comment);
         stmt.setString(7,email);
         // 第五步:执行SQL语句
         int n = stmt.executeUpdate();
         // 执行没有结果集返回的SQL语句使用executeUpdate方法,方法的返回值是整数,表示操作成功的记录数
         if(n==0)
            success = false;
      }catch(Exception e){
         success = false;
         System.out.println(e.getMessage());
      }finally{
         try{ stmt.close(); }catch(Exception ee){}
         try{ con.close(); }catch(Exception ee){}
      }
      return success;
   }

7、C部分
    编写Servlet,完成添加的控制。控制器的代码如下:
package servlet;

import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;

import bean.*;

public class AddUserServlet extends HttpServlet
{
  public void doGet(HttpServletRequest request,HttpServletResponse response) throws IOException,ServletException
  {
        // 请求中采用的编码方式是8859_1,当前的编码是gb2312,需要转换
        request.setCharacterEncoding("gb2312");

        // 第一句话:获取用户输入的信息
        String username = request.getParameter("username");

        String userpass1 = request.getParameter("userpass1");

        String sex = request.getParameter("sex");

        // 因为允许多选,所以结果有可能是多个,应该使用数组接收。
        String fav[] = request.getParameterValues("fav");
        String favStr = "";
        for(int i=0;i<fav.length;i++)
        {
           favStr += fav[i]+";";
        }

        String degree = request.getParameter("degree");

        String comment = request.getParameter("content");

        String email = request.getParameter("email");

        // 第二句话:调用JavaBean,创建对象、初始化、然后调用方法
        UserBean user = new UserBean();
        user.setUsername(username);
        user.setUserpass(userpass1);
        user.setSex(sex);
        user.setFav(favStr);
        user.setDegree(degree);
        user.setEmail(email);
        user.setComment(comment);

        boolean b = user.add();

        // 第三句话:向页面传递信息
        if(b)
            request.setAttribute("info","注册成功!");
        else
            request.setAttribute("info","注册失败!");

        // 第四句话:转向响应界面
        RequestDispatcher rd = request.getRequestDispatcher("success.jsp");
        rd.forward(request,response); // 完成跳转


  }

  public void doPost(HttpServletRequest request,HttpServletResponse response) throws IOException,ServletException
  {
     doGet(request,response);
  }

}
    之后对Servlet进行配置,在web.xml中添加如下代码:
   <servlet>
      <servlet-name>addUser</servlet-name>
      <servlet-class>servlet.AddUserServlet</servlet-class>
   </servlet>

   <servlet-mapping>
      <servlet-name>addUser</servlet-name>
      <url-pattern>/addUser</url-pattern>
   </servlet-mapping>

   需要修改register.jsp中的form的属性action:
           <form action="addUser" method="post" name="form1">
8、测试
    编译、启动服务器,然后运行。

 

 


第七讲(参考Java Web程序设计基础教程第7章)
1、共享连接数据库的代码

 

    连接数据库的基本过程:
    1)加载驱动程序;
    2)创建连接;
    3)编写SQL语句;
    4)创建语句对象;
    5)对参数赋值;
    6)执行SQL 语句;
    7)对结果进行处理;
    8)关闭对象。

    对于不同的SQL的执行,不同的地方:
    SQL语句;
    参数;
    结果的处理方式;

    提取相同部分分别编写成方法:

   Connection con = null;
   PreparedStatement stmt = null;
   ResultSet rs = null;
   String driverClass = "sun.jdbc.odbc.JdbcOdbcDriver";
   String url = "jdbc:odbc:bookstore";

   // 完成连接的创建,相当于第1.2步
   public Connection getConnection() throws Exception{
      Class.forName(driverClass); // 加载驱动程序
      if(con == null)
         con = DriverManager.getConnection(url,"","");
      return con;
   }

   // 创建语句对象
   public PreparedStatement createStatement(String sql) throws Exception{
      stmt = getConnection().prepareStatement(sql);
      return stmt;
   

   // 执行有结果集返回的方法
   public ResultSet executeQuery() throws Exception{
      rs = stmt.executeQuery();
      return rs;
   }

   // 执行没有结果集返回的方法
   public int executeUpdate() throws Exception{
      return stmt.executeUpdate();
   }

   // 关闭对象
   public void close(){
      if(rs != null)
         try{ rs.close();  }catch(Exception e){}
      if(stmt != null)
         try{ stmt.close();  }catch(Exception e){}
      if(con != null)
         try{ con.close();  }catch(Exception e){}
   }

2、修改上一次课的添加功能,使用这些共享方法

      String sql = "insert into usertable2 values(?,?,?,?,?,?,?)";
      boolean success = true;   
      try{
         // 创建语句对象
         createStatement(sql);
        
         // 对SQL语句中参数赋值
         stmt.setString(1,username);
         stmt.setString(2,userpass);
         stmt.setString(3,sex);
         stmt.setString(4,fav);
         stmt.setString(5,degree);
         stmt.setString(6,comment);
         stmt.setString(7,email);

         // 执行SQL语句
         int n = executeUpdate();
         // 执行没有结果集返回的SQL语句使用executeUpdate方法,方法的返回值是整数,表示操作成功的记录数
         if(n==0)
            success = false;
      }catch(Exception e){
         success = false;
         System.out.println(e.getMessage());
      }finally{
         close();
     
      return success;
3、查询所有图书

   1)创建图书表
   create table books(
      bookid varchar(10) primary key,
      bookname varchar(30),
      author varchar(20),
      price float,
      publisher varchar(20)
   )
   插入一些模拟数据

insert into books values('00001','Java','zhangsan',20,'电子工业')
insert into books values('00002','JSP','lisi',22,'人民邮电')
insert into books values('00003','Java EE','wang',30,'人民邮电')

   2)V部分
   V主要与人进行交互,要考虑输入和输出
   输入:在导航条中添加“查看所有图书”的超链。

<a href="findAllBooks">显示所有图书</a>

   输出:显示所有图书信息的JSP文件。
文件名:books.jsp
文件内容:
<%@ page contentType="text/html;charset=gb2312"%>
<%@ taglib prefix="c" uri="
http://java.sun.com/jsp/jstl/core"%>

<%@ include file="header.jsp"%>

   <tr>
      <td>
          <table align="center" border="1">
             <tr>
                <td>图书编号</td><td>图书名称</td><td>作者</td><td>价格</td><td>出版社</td>
             </tr>
             <!--  c:forEach用于循环控制,items属性指出要循环遍历的集合,var定义一个循环变量,表示集合中的一个元素 -->
             <c:forEach var="book" items="${books}">
                <tr>
                    <td>${book.bookid}</td>
                    <td>${book.bookname}</td>
                    <td>${book.author}</td>
                    <td>${book.price}</td>
                    <td>${book.publisher}</td>
                </tr>
             </c:forEach>
          </table>
      </td>
   </tr>
</table>

   3)M部分
   完成功能:从数据库中查询所有的图书。
文件名:BookBean.java
文件内容:
package bean;

import java.sql.*;
import java.util.ArrayList;

public class BookBean extends Base{

   // 描述图书的属性
   private String bookid;
   private String bookname;
   private String author;
   private float price;
   private String publisher;

   // 编写对乘员进行操作的方法
   public void setBookid(String bookid){
      this.bookid = bookid;
   }

   public String getBookid(){
      return bookid;
   }

   public void setBookname(String bookname){
      this.bookname = bookname;
   }

   public String getBookname(){
      return bookname;
   }

   public void setAuthor(String author){
      this.author = author;
   }

   public String getAuthor(){
      return author;
   }

   public void setPrice(float price){
      this.price = price;
   }
  
   public float getPrice(){
      return price;
   }

   public void setPublisher(String publisher){
      this.publisher = publisher;
   }

   public String getPublisher(){
      return publisher;
   

   public ArrayList findAllBooks(){
      ArrayList books = new ArrayList();
      String sql = "select * from books";
      try{
         createStatement(sql);
         rs = executeQuery();
         // 使用while循环遍历结果集
         while(rs.next())
         {
            // 使用rs的getString方法,以字符串的形式获取第一列,参数也可以是列的名字
            // 可以得到当前记录的每一列
            String tempBookid = rs.getString(1);
            String tempBookname = rs.getString(2);
            String tempAuthor = rs.getString(3);
            float tempPrice = rs.getFloat(4);
            String tempPublisher = rs.getString(5);

            // 创建图书对象
            BookBean book = new BookBean();
            book.setBookid(tempBookid);
            book.setBookname(tempBookname);
            book.setAuthor(tempAuthor);
            book.setPrice(tempPrice);
            book.setPublisher(tempPublisher);

            // 把书添加到链表中
            books.add(book);
         }
      }catch(Exception e){
         System.out.println(e.toString());
      }finally{
         close();
      }
      return books;
   }
}
   4)C部分
   控制器:4句话。本功能只用到3句。
文件名:FindAllBooks。
文件内容:
package servlet;

import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;

import bean.*;
import java.util.ArrayList;

public class FindAllBooks extends HttpServlet
{
  public void doGet(HttpServletRequest request,HttpServletResponse response) throws IOException,ServletException
  {

        // 第二句话:调用JavaBean,创建对象、初始化、然后调用方法
        BookBean book = new BookBean();
        ArrayList books = book.findAllBooks();

        // 第三句话:向页面传递信息,第一个参数是使用的名字,应该和显示时候使用的名字一致,第二个参数传递的值本身
        request.setAttribute("books",books);

        // 第四句话:转向响应界面
        RequestDispatcher rd = request.getRequestDispatcher("books.jsp");
        rd.forward(request,response); // 完成跳转

  }

  public void doPost(HttpServletRequest request,HttpServletResponse response) throws IOException,ServletException
  {
     doGet(request,response);
  }

}
在web.xml中进行配置
   <servlet>
      <servlet-name>findAllBooks</servlet-name>
      <servlet-class>servlet.FindAllBooks</servlet-class>
   </servlet>

   <servlet-mapping>
      <servlet-name>findAllBooks</servlet-name>
      <url-pattern>/findAllBooks</url-pattern>
   </servlet-mapping>

  • 评论加载中,请稍候...
发评论    明星私家相册

验证码:看不清楚数字吗?点击这里再试试。收听验证码

发评论

以上网友发言只代表其个人观点,不代表新浪网的观点或立场。

相关博文
读取中...
推荐博文
读取中...