Java+MyEclipse+Tomcat (四)Servlet提交表单和数据库操作

        前面三篇文章讲述了如何配置MyEclipse和Tomcat开发JSP网站、如何配置Servlet简单实现表单提交、如何配置MySQL实现JSP数据库查询。
        这篇文章主要讲述Servlet表单的提交、Java中实现数据库的查询操作和自己遇到的瓶颈及理解。Java Web基础性文章,希望对大家有所帮助~
        Java+MyEclipse+Tomcat (一)配置过程及jsp网站开发入门
        Java+MyEclipse+Tomcat (二)配置Servlet及简单实现表单提交
        Java+MyEclipse+Tomcat (三)配置MySQL及查询数据显示在JSP网页中
        两个项目的免费下载地址(希望对你有所帮助):
        http://download.csdn.net/detail/eastmount/8701707

一. Servlet表单提交

        新建Web Project,项目名称为TestServlet01。项目结构如下图所示:

Java+MyEclipse+Tomcat (四)Servlet提交表单和数据库操作_第1张图片
        然后修改index.jsp代码如下:
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>



  
    
    
    My JSP 'index.jsp' starting page
	
  
  
  
  

填写用户信息
出发地:
到达地:

请选择性别:
请选择您的爱好:
请选择车票类型:

备注信息:


        运行效果如下图所示:
Java+MyEclipse+Tomcat (四)Servlet提交表单和数据库操作_第2张图片
        核心代码:
        

            出发地:
            
       

        然后再src中右键添加Package,包名为servlet;再添加Servlet文件,文件名PostServlet.java。选择图标。前面文章讲述过Servlet的手动配置过程,包括servlet类、映射等,现在它自动生成的WebRoot/WEB-INF/web.xml文件如下:


  
  
  
  
    This is the description of my J2EE component
    This is the display name of my J2EE component
    PostServlet
    servlet.PostServlet
  

  
    PostServlet
    /servlet/PostServlet
  	
  
    index.jsp
  
        同时修改src/servlet/PostServlet.java文件,采用POST方法显示表单数据:
package servlet;

import java.io.IOException;
import java.io.PrintWriter;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class PostServlet extends HttpServlet {

	public PostServlet() {
		super();
	}

	public void destroy() {
		super.destroy(); // Just puts "destroy" string in log
		// Put your code here
	}

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

		response.setContentType("text/html");
		PrintWriter out = response.getWriter();
		out.println("");
		out.println("");
		out.println("  A Servlet");
		out.println("  ");
		out.print("    This is ");
		out.print(this.getClass());
		out.println(", using the GET method");
		out.println("  ");
		out.println("");
		out.flush();
		out.close();
	}

	/**
	 * The doPost method of the servlet. 
* * This method is called when a form has its tag value method equals to post. * * @param request the request send by the client to the server * @param response the response send by the server to the client * @throws ServletException if an error occurred * @throws IOException if an error occurred */ public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.setCharacterEncoding("UTF-8"); //设置输出编码 request.setCharacterEncoding("UTF-8"); String startName = request.getParameter("start"); //获取出发地 String endName = request.getParameter("end"); //获取到达地 String sex = request.getParameter("sex"); //获取性别 String [] interest = request.getParameterValues("interesting"); //获取兴趣 String seat = request.getParameter("seat"); //获取座位 String info = request.getParameter("description"); //获取备注信息 response.setContentType("text/html"); //设置输出类型 PrintWriter out = response.getWriter(); //获取out对象 out.println(""); out.println(""); out.println(" A Servlet"); out.println(" "); out.println("

出发地:"+ startName +"

"); out.println("

到达地:"+ endName +"

"); out.println("

性别:"+ sex +"

"); out.println("

兴趣"); for(String str:interest) { out.println(str+" "); } out.println("

座位类型:"+ seat +"

"); out.println("

备注信息:"+ info +"

"); out.println(" "); out.println(""); out.flush(); out.close(); } /** * Initialization of the servlet.
* * @throws ServletException if an error occurs */ public void init() throws ServletException { // Put your code here } }
        运行效果如下图所示:
        

二. Servlet数据库查询

        还是使用上面的项目进行修改,实现Servlet数据库查询操作。数据库配置可以参照上一篇博客配置MySQL的过程,我新建数据库test01,插入表Train,表中数据如下图:

Java+MyEclipse+Tomcat (四)Servlet提交表单和数据库操作_第3张图片
        然后修改index.jsp,代码如下:
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>



  
    
    
    My JSP 'index.jsp' starting page
	
  
  
  
  

填写用户信息
出发地:


        修改的PostServlet.java代码如下:
package servlet;

import java.io.IOException;
import java.io.PrintWriter;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;

import javax.servlet.ServletConfig;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class PostServlet extends HttpServlet {

	//自定义变量
	private Connection connection = null; //定义数据库连接对象
	private String driverName = "com.mysql.jdbc.Driver"; //数据库驱动器
	private String userName = "root"; //数据库用户名
	private String userPasswd = "123456"; //密码
	private String dbName = "test01"; //数据库名称
	private String tableName = "Train"; //表明
	//连接字符串 数据库地址URL MySQL数据库端口3306
	private String url = "jdbc:mysql://localhost:3306/" + dbName + "?user="    
            + userName + "&password=" + userPasswd;
		
	//初始化方法
	public void init(ServletConfig config) throws ServletException
	{
		super.init(config);
	}
	
	public PostServlet() {
		super();
	}

	//处理GET请求方法
	public void doGet(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException
	{
		response.setCharacterEncoding("UTF-8"); //设置输出编码
		request.setCharacterEncoding("UTF-8");
		response.setContentType("text/html");  //设置输出类型
		PrintWriter out = response.getWriter(); //获取out对象
		
		try {
			//数据库操作
			Class.forName(driverName).newInstance();
			connection = DriverManager.getConnection(url);
			Statement statement = connection.createStatement();
			String startName = request.getParameter("start"); //获取出发地
			//注意:startName需要加单引号 否则报错 ——错误:Unknown column 'BeiJing' in 'where clause'
			String sql = "SELECT * FROM " + tableName +" WHERE startname='" + startName+"';";
			if(startName=="") {
				sql = "SELECT * FROM " + tableName;
			}
			ResultSet rs = statement.executeQuery(sql); 
			
			out.println("");
			out.println("");
			out.println("  A Servlet");
			out.println("  ");
			out.println("  
搜索结果
"); out.println(" "); out.println(" "); //循环输出查询结果 while(rs.next()) { out.println(" "); out.println(" "); out.println(" "); } out.println("
车号出发地到达地
" + rs.getString(1) + "" + rs.getString(2) + "" + rs.getString(3) + "
"); out.println("
"); out.println(" "); out.println(""); out.flush(); out.close(); rs.close(); // 关闭记录集 statement.close(); // 关闭声明 } catch(Exception e) { System.out.println("错误:"+e.getMessage()); response.sendRedirect("index.jsp"); } } //处理POST请求方法 public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doGet(request,response); } //销毁方法 public void destroy() { super.destroy(); // Just puts "destroy" string in log try { connection.close(); // 关闭连接对象 }catch(Exception e) { System.out.println("关闭数据库错误:"+e.getMessage()); } } }
        同时WebRoot/WEB-INF/web.xml文件Servlet映射都没有变化,需要在WebRoot/WEB-INF/lib中添加mysql-connector-java-5.1.15-bin.jar,否则会报错“com.mysql.jdbc.Driver错误”。
        运行效果如下图所示:
Java+MyEclipse+Tomcat (四)Servlet提交表单和数据库操作_第4张图片

Java+MyEclipse+Tomcat (四)Servlet提交表单和数据库操作_第5张图片

        写到此处我产生了一个疑问,当表单提交信息时,获取数据库的结果有两种方法:
        1.第一种是上一篇博客中写到的,在JSP中通过<% ....%>调用Java代码实现连接数据库,获取MySQL表中数据并显示;
        2.第二种就是这篇博客中写到的,在JSP中通过Post方法提交表单Form,在Java中通过Servlet获取请求/响应,再通过Java中out.println("...")输出数据库中值。

        就这两种方法而言,我想实现的功能是:JSP就赋值布局,显示界面;Java就负责连接数据库、数据库增删改查,处理结果再返回给JSP中显示,而不是相互嵌套的。换句话说:JSP中点击“提交”按钮,TextBox中传递出发地,Java中介绍请求,数据库查询,得到的结果再返回给JSP中显示。
        那怎么实现呢?后面的文章可能会讲到。
        DAO和Java Bean是对JDBC进行分层、模块化的最有效两个方法。DAO(数据库操作对象,Database Access Object)是JDBC下常用模式,DAO出现之前,操作数据库的代码与业务代码都出现在Servlet或者JSP中,不利用业务代码的分离。DAO出现后,所有与数据库相关的操作全被拿到了DAO层实现,Servlet或JSP只操作Java Bean或者DAP层,而DAO层值操作数据库。

        PS:非常高兴我自己通过实际项目找到了这个难点,然后又找到了解决方法。虽然才学习Java Web一周时间,还是学到很多东西的。个人感觉DAO类似于中间件的东西吧!最后希望文章对你有所帮助,这篇文章是讲述Servlet连接MySQL数据库及表单交互之间的知识。如果文章有不足或错误的地方,还请海涵!下一篇文章讲讲Session和一个典型简单的界面布局等相关知识吧!
        (By:Eastmount 2015-5-15 半夜1点   http://blog.csdn.net/eastmount/



你可能感兴趣的:(Java网站开发,JAVA网站开发及实战,数据库,Java,MyEclipse,JSP网站,表单提交,数据库操作)