前面三篇文章讲述了如何配置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。项目结构如下图所示:

然后修改index.jsp代码如下:

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html><head><base href="<%=basePath%>"><title>My JSP 'index.jsp' starting page</title><style>body, div, td, input {font-size:18px; margin:0px; }.line {margin:2px; }</style></head><body><form action="/TestServlet01/servlet/PostServlet" method="POST"><div align="center"><br/><fieldset style='width:60%'><legend>填写用户信息</legend><br/><div class='line'><div align="left">出发地:<input type="text" id="start" name="start" style='font-size:18px' width=200/></div></div><div class='line'><div align="left">到达地:<input type="text" id="end" name="end" style='font-size:18px'/></div></div><div class='line'><br /><div align="left">请选择性别:<input type="radio" name="sex" value="男" id="sexMale"><label for="sexMale">男</label><input type="radio" name="sex" value="女" id="sexFemale"><label for="sexFemale">女</label></div></div><div class='line'><div align="left">请选择您的爱好:<input type="checkbox" name="interesting" value="音乐" id="i1"><label for="i1">音乐</label> <input type="checkbox" name="interesting" value="旅游" id="i2"><label for="i2">旅游</label> <input type="checkbox" name="interesting" value="运动" id="i3"><label for="i3">运动</label> </div></div><div class='line'><div align="left">请选择车票类型:<select name="seat"><option>---请选择乘坐类型---</option><optgroup label="卧铺"><option value="上铺">上铺</option><option value="中铺">中铺</option><option value="下铺">下铺</option></optgroup><optgroup label="其他"><option value="硬座">硬座</option><option value="软座">软座</option><option value="站票">站票</option></optgroup></select></div></div><div class='line'><br /><div align="left" class='leftDiv'>备注信息:</div><div align="left" class='rightDiv'><textarea name="description" rows="8" style="width:300px; ">请填写备注信息... </textarea></div></div><div class='line'><div align="left"><br/><input type="submit" name="Select" value="提交信息" style='font-size:18px'/><br/></div></div></fieldset>
</div>
</form>
</body>
</html>

运行效果如下图所示:

        核心代码:
        <form action="/TestServlet01/servlet/PostServlet" method="POST">
            出发地:<input type="text" id="start" name="start" style='font-size:18px'/>
            <input type="submit" name="Select" value="提交信息"/>
        </form>
        然后再src中右键添加Package,包名为servlet;再添加Servlet文件,文件名PostServlet.java。选择图标。前面文章讲述过Servlet的手动配置过程,包括servlet类、映射等,现在它自动生成的WebRoot/WEB-INF/web.xml文件如下:
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="3.0" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"><display-name></display-name><servlet><description>This is the description of my J2EE component</description><display-name>This is the display name of my J2EE component</display-name><servlet-name>PostServlet</servlet-name><servlet-class>servlet.PostServlet</servlet-class></servlet><servlet-mapping><servlet-name>PostServlet</servlet-name><url-pattern>/servlet/PostServlet</url-pattern></servlet-mapping> <welcome-file-list><welcome-file>index.jsp</welcome-file></welcome-file-list>
</web-app>

同时修改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("<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\">");out.println("<HTML>");out.println("  <HEAD><TITLE>A Servlet</TITLE></HEAD>");out.println("  <BODY>");out.print("    This is ");out.print(this.getClass());out.println(", using the GET method");out.println("  </BODY>");out.println("</HTML>");out.flush();out.close();}/*** The doPost method of the servlet. <br>** 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("<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\">");out.println("<HTML>");out.println("  <HEAD><TITLE>A Servlet</TITLE></HEAD>");out.println("  <BODY>");out.println("<H2>出发地:"+ startName +"</H2>");out.println("<H2>到达地:"+ endName +"</H2>");out.println("<H2>性别:"+ sex +"</H2>");out.println("<H2>兴趣");for(String str:interest) {out.println(str+" ");}out.println("</H2><H2>座位类型:"+ seat +"</H2>");out.println("<H2>备注信息:"+ info +"</H2>");out.println("  </BODY>");out.println("</HTML>");out.flush();out.close();}/*** Initialization of the servlet. <br>** @throws ServletException if an error occurs*/public void init() throws ServletException {// Put your code here}}

运行效果如下图所示:

二. Servlet数据库查询

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

        然后修改index.jsp,代码如下:

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html><head><base href="<%=basePath%>"><title>My JSP 'index.jsp' starting page</title><style>body, div, td, input {font-size:18px; margin:0px; }.line {margin:2px; }</style></head><body><form action="/TestServlet01/servlet/PostServlet" method="POST"><div align="center"><br/><fieldset style='width:60%'><legend>填写用户信息</legend><br/><div class='line'><div align="left">出发地:<input type="text" id="start" name="start" style='font-size:18px' width=200/></div></div><div class='line'><div align="left"><br/><input type="submit" name="Select" value="提交信息" style='font-size:18px'/><br/></div></div></fieldset>
</div>
</form>
</body>
</html>

修改的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数据库端口3306private 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("<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\">");out.println("<HTML>");out.println("  <HEAD><TITLE>A Servlet</TITLE></HEAD>");out.println("  <BODY>");out.println("  <fieldset style='width:60%' ><legend>搜索结果</legend><br />");out.println(" <TABLE align='center'border='1' cellspacing='1' cellpadding='1'>");out.println("        <TR><TH>车号</TH><TH>出发地</TH><TH>到达地</TH></TR>");//循环输出查询结果while(rs.next()) {out.println("      <TR><TD>" + rs.getString(1) + "</TD>");out.println("        <TD>" + rs.getString(2) + "</TD>");out.println("      <TD>" + rs.getString(3) + "</TD></TR>");}out.println("  </TABLE>");out.println("  </fieldset>");out.println("  </BODY>");out.println("</HTML>");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 logtry {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错误”。
        运行效果如下图所示:


        写到此处我产生了一个疑问,当表单提交信息时,获取数据库的结果有两种方法:
        1.第一种是上一篇博客中写到的,在JSP中通过<% ....%>调用Java代码实现连接数据库,获取MySQL表中数据并显示;
        2.第二种就是这篇博客中写到的,在JSP中通过Post方法提交表单Form,在Java中通过Servlet获取请求/响应,再通过Java中out.println("<HTML>...")输出数据库中值。
        就这两种方法而言,我想实现的功能是: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+MyEclipse+Tomcat (四)Servlet提交表单和数据库操作相关推荐

  1. java jquery提交表单数据_[Java教程]jquery实现ajax提交表单信息

    [Java教程]jquery实现ajax提交表单信息 0 2016-08-23 15:00:08 最近在思考优化项目,想自己扩展一个jquery自动获取表单中的数据进行ajax提交.本人没有完整性学习 ...

  2. 用ajax提交表单给数据库,如何利用ajax提交form表单到数据库

    如何利用ajax提交form表单到数据库 发布时间:2021-06-17 14:52:49 来源:亿速云 阅读:75 作者:小新 这篇文章主要介绍如何利用ajax提交form表单到数据库,文中介绍的非 ...

  3. nodejs接收表单写入mysql_NodeJS提交表单存数据库(转)

    姓名: 性别: 年龄: 手机: $('#ok_btn').on('click',function(){ var name = $.trim($('#name').val()), sex = $.tri ...

  4. servlet提交表单(思考了好多天)

    这几天一直在学习servlet,当我正要调试一个表单提交的程序,发生了HTTP404错误,即找不到相应的类.于是我检查了自己的环境配置,完美无缺. 把servlet应用程序放在/web-inf/cla ...

  5. IDEA中Tomcat启动后提交表单,请求的资源[/servlet_demo2/book-add.html]不可用

    这个问题非常得刁钻啊,解决办法我很不理解,不知道IDEA为什么这么捉弄人. 首先这里出现问题有两个方面: 1.Tomcat问题: 配置Tomcat得时候非常不容易发现:这里得名字不一样,一个横杠,一个 ...

  6. Servlet与表单、数据库综合项目实战【学生信息管理】

    ✅作者简介:热爱国学的Java后端开发者,修心和技术同步精进.

  7. Java+MyEclipse+Tomcat (六)详解Servlet和DAO数据库增删改查操作

    此篇文章主要讲述DAO.Java Bean和Servlet实现操作数据库,把链接数据库.数据库操作.前端界面显示分模块化实现.其中包括数据的CRUD增删改查操作,并通过一个常用的JSP网站前端模板界面 ...

  8. Java+MyEclipse+Tomcat (五)DAO和Java Bean实现数据库和界面分开操作

    正如前面一篇文章的介绍,当使用Servlet提交表单和JSP数据库查询时,总是相互交叉着的处理,要么在JSP中通过<%...%>内嵌Java代码操作数据库,要么 JSP中通过Post方法提 ...

  9. tp5 ajax 路由,tp5中ajax方式提交表单

    用ajax提交表单,迅速,快捷,实现页面无刷新提交表单. ajax批删 姓名 年龄 地址 添加 $("#sub").click(function(){ var name = $(& ...

最新文章

  1. python 安装库 requirements.txt
  2. mssql sqlserver 模拟for循环的写法
  3. python def是什么意思-python中def是什么
  4. 计算机考研:计算机操作系统知识点复习
  5. win7计算机中丢失mfc120,mfc120.dll 64位
  6. 深入分析glibc内存释放时的死锁bug
  7. yii2.0下,JqPaginator与load实现无刷新翻页
  8. js 把字符串格式化成时间
  9. 输入学号查询课程c语言,广工c语言课程设计
  10. 005-OpenStack-网络服务
  11. Django:(02)项目配置
  12. Ubuntu安装mysql-8.0.20-linux-glibc2.12-i686.tar.xz 步骤
  13. 「网络流 24 题」餐巾计划 【网络流】
  14. Add Binary 二进制求和
  15. 印度正试图建立世界上最大的面部识别系统
  16. leetcode_91.解码方法
  17. Xshell配色方案(舒服)
  18. CANoe/CANalyzer诊断功能的深入理解以及CAPL诊断编程实现
  19. 业务逻辑写在存储过程好还是后端好_用存储过程和 JAVA 写报表数据源有什么差异...
  20. oracle24801错误,Access数据库通过ODBC导出到Oracle的两个小问题ora-24801\Ora-01401

热门文章

  1. 手动安装em(redhat 5/oracle 11g)
  2. 工作三年左右的Java程序员跟大家谈谈从业心得
  3. selenium自动化测试、Python单元测试unittest框架以及测试报告和日志输出
  4. js判断中文字符长度
  5. ubuntu服务器启动过程中重启卡死的问题解决办法
  6. Xshell的一些实用技巧
  7. POJ 3084 Panic Room
  8. cxgrid按条件计算合计值
  9. c语言不安全库_为什么和其他语言相比C语言是快速的语言?
  10. python开发windows界面_python适合windows的桌面应用程序开发吗?