学习jsp第二天

今天的学习是漫长的,我试图在我昨天学到的知识上再添加一些新的知识,可这一步却走的非常辛苦。

今天,我跳出了面向过程式的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 用以访问刚刚我们所做的页面。

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

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值