您的位置:首页 > Web前端 > JavaScript

学习jsp第二天

2012-02-03 14:09 393 查看
今天的学习是漫长的,我试图在我昨天学到的知识上再添加一些新的知识,可这一步却走的非常辛苦。

今天,我跳出了面向过程式的jsp页面书写格式,尝试使用servlet来进行一个简单的网页内容显示部分。假设你的服务器支持servlet,那么你可以跟随我继续走下去,否则,你需要事先配置好你的环境,以支持servlet。环境配置方面的知识我将不再敖述,毕竟在网络中,这方面的知识并不匮乏。

首先,我在网上搜索了一下servlet的一些资料,也试图从中学到一些知识,可是很多教材繁琐的表达形式让我更是一头雾水。我也试图寻找一些基础教材,或是简单的例子。但可悲的是,我并没有从中获得益处,我只好下载一个简单的servlet源码,阅读其内容,并从中寻找一些蛛丝马迹,最后得出一个简单的内容发布页面。

这次的内容发布页面,一共涉及2个页面,一个是AntTest.java文件,还有一个是AntTest.jsp页面。

我会把涉及逻辑的部分卸载java为后缀的文件里,而jsp文件,则只使用循环将内容显示在页面供访客查阅。

事先,我们需要在根目录下查找一个叫WEB_INFO的文件夹,在那里我们可以找到一个web.xml的文件,并且在那里增加内容如下:

<servlet>

        <servlet-name>antTest</servlet-name>

        <servlet-class>class2.java.antTest</servlet-class>

</servlet>

<servlet-mapping>

        <servlet-name>antTest</servlet-name>

        <url-pattern>/servlet/antTest</url-pattern>

</servlet-mapping>

这里需要说明的是,两个servlet-name中的名字需要一致,并且,我把我的.java文件放在了java文件夹下,把jsp文件放在了jsp文件夹下

然后,我们打开.java文件,把一下的内容输入到里面

package class2.java;

//导入各种需要用到的库

import java.io.*;

import java.sql.*;

import java.util.ArrayList;

import java.util.HashMap;

import java.util.List;

import javax.servlet.*;

import javax.servlet.http.*;

import class2.java.dbaccess.*;

public class jietTest extends HttpServlet{

 private final String sendPath        = "/class2/jsp/jietTest.jsp";//即将跳转的页面

 private static final String CONTENT_TYPE      = "text/html;charset=utf-8";//java语言的编码格式

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

  doPost(request,response);

 }

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

  HttpSession session = request.getSession(true);//使用session,用来储存下面从数据库读取的内容

  dbaccess dbAccess = new dbaccess();//定义数据库对象

  ResultSet rsetSel = null;

  StringBuffer searchErrMsg = new StringBuffer();//错误捕捉对象

  List<HashMap<String,String>> AntTestList = new ArrayList<HashMap<String, String>>();//定义一个二维数组,用来承装数据库内容

  HashMap<String,String> AntTestHm;

  try {

   response.setContentType(CONTENT_TYPE);

   ServletContext context = getServletContext();

   String strRetnResult=dbAccess.ConnectDB();

   rsetSel = dbAccess.SelectSql("select * from AntTestDataBase order by AntKey", searchErrMsg);

   if (searchErrMsg.toString().length() == 0) {

    while (rsetSel.next()) {

     String AntKey = (rsetSel.getString("AntKey") != null) ? (rsetSel.getString("AntKey").trim()) : "";

     String AntName = (rsetSel.getString("AntName") != null) ? (rsetSel.getString("AntName").trim()) : "";

     String AntYmd = (rsetSel.getString("AntDate") != null) ? (rsetSel.getString("AntDate").trim()) : "";

     AntTestHm = new HashMap<String, String>();

     AntTestHm.put("AntKey", AntKey);

     AntTestHm.put("AntName", AntName);

     AntTestHm.put("AntYmd", AntYmd);

     AntTestList.add(AntTestHm);

    }

   }

   session.removeAttribute("AntTestList");//清空session中原来储存的二维数组内容

   session.setAttribute("AntTestList", AntTestList);//将提取出来的内容储存在session中,以方便在其他页面调用

   RequestDispatcher dispatcher = context.getRequestDispatcher(sendPath);//重定向到指定的页面 sendPath 指定的页面

   dispatcher.forward(request,response);//返回服务器响应

  } catch (Exception e) {

   e.printStackTrace();

  }

 }

}

jsp页面由于只是显示内容,所以逻辑部分相对来说少了很多,内容只有:

<%@ page import="java.io.*,java.util.*,java.lang.Character.UnicodeBlock" contentType="text/html; charset=utf-8" %>

<html>

<head>

<meta http-equiv="Content-Type" content="text/html; charset=utf-8">

<title>Ant JAVA练习页面</title>

</head>

<body>

<%

List<HashMap<String,String>> AntTestList = (ArrayList<HashMap<String, String>>) session.getAttribute("AntTestList");//从session中得到AntTestList中的内容

%>

<table>

<%

for (int loopCnt = 0; loopCnt < AntTestList.size();loopCnt++) {//循环读取刚刚从session中得到的内容,并显示在页面中

 HashMap<String, String> hm = AntTestList.get(loopCnt);

 String AntKey = hm.get("AntKey");

 String AntName = hm.get("AntName");

 String AntYmd = hm.get("AntYmd");

%>

<tr><td width="200"><%=AntKey %></td><td width="200"><%=AntName %></td><td width="200"><%=AntYmd %></td></tr>

<%

}

%>

</table>

</body>

</html>

数据库的类并非我自己所写,dbaccess.java内容如下:

package class2.java;

import java.sql.*;

public class dbaccess {

 private String DRIVER;

 private String HOST;

 private String USR;

 private String PWD;

 private Connection Condb;

 private Statement stmt;

 public dbaccess(String DRIVER, String HOST, String USR, String PWD){

  this.DRIVER = DRIVER;

  this.HOST = HOST;

  this.USR = USR;

  this.PWD = PWD;

 }

 public dbaccess(){

  DRIVER = "org.postgresql.Driver";

  HOST = "jdbc:postgresql://localhost:5432/dbAntTest?charSet=UTF-8";

  USR = "root";

  PWD = "123";

 }

 public String ConnectDB() throws Exception{

  String strtmp ="";

  try{

   Class.forName(DRIVER);

   Condb = DriverManager.getConnection(HOST, USR, PWD);

   Condb.setAutoCommit(false);

   stmt = Condb.createStatement();

   stmt.executeUpdate("set client_encoding to 'UTF-8'");

  }catch(Exception serrmsg){

   strtmp = serrmsg.toString();

  }

  return strtmp;

 }

 public String disconnect(ResultSet Rset) throws Exception{

  String strtmp = "";

  try{

   if ( Rset != null) Rset.close();

   if ( stmt != null ) stmt.close();

  if ( Condb != null ) Condb.close();

  }catch(Exception e){

   strtmp = e.toString();

  }

  return strtmp;

 }

 public ResultSet SelectSql(String sql,StringBuffer sErr) throws Exception {

  int inttmp = 0;

  ResultSet Rset = null;

  inttmp = sErr.length();

  if (inttmp > 0){sErr.delete(0,inttmp);}

  try {

   Rset = stmt.executeQuery(sql);

  }catch(Exception e) {

   sErr.append(e.toString());

  }

  return Rset;

 }

}

打开IE在地址栏输入http://localhost/class2/servlet/antTest 用以访问刚刚我们所做的页面。

仿佛如我所愿,但这一天的盲目却让我前途迷茫。

 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息