• html文件form表单action调用servlet连接mysql数据库实例


     web.xml文件

    <?xml version="1.0" encoding="UTF-8"?>
    <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
        xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
        version="2.5">
        <servlet>
            <servlet-name>FootballTeam</servlet-name>
            <servlet-class>FindFootOrPk</servlet-class>
        </servlet>
        <servlet-mapping>
            <servlet-name>FootballTeam</servlet-name>
            <url-pattern>/foot</url-pattern>
        </servlet-mapping>
        
    </web-app>

    html文件

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <title>html调用servlet</title>
    </head>
    
    <body>
      
                 <h1 align="center">请点击提交按钮</h1>
              
            <div align="center" class="footgame">
      
                 <form  action="http://localhost:8080/ltb6w/foot" name="match" method="post">
              
                         <input type="submit" value="提交">
                  
                 </form>
                 
                 
                 
            
            </div>  
       
    </body>
    </html>

     html文件中 action="  " 双引号中调用文件的手段很多,方法很灵活.要特别注意.

    举几个栗子:


    1  <a href="userAction.do?flag=user_regist">注册</a>

    2  例:
    <form action="test.do?args=888"> 
    <input type="button" value="submit">
    </form>
    通过这个方法,test.do无法读取args,必须换成一下写法
    <form action="test.do"> 
    <input type="hidden" name="args" value="888">
    <input type="button" value="submit">
    </form>

    要在web.xml中配置servlet配置好了后 在form的action中直接写你在web.xml中配置的<url-pattern>的名字。。例如
    <servlet>
    <servlet-name>AdminLogin</servlet-name>
    <servlet-class>
    com.java.servlet.AdminLogin
    </servlet-class>
    <load-on-startup>22</load-on-startup>
    </servlet>
    <servlet-mapping>
    <servlet-name>AdminLogin</servlet-name>
    <url-pattern>/AdminLogin</url-pattern>
    </servlet-mapping>
    在form的action中就直接写AdminLogin就行了

     ① 完全匹配

      <url-pattern>/test/list.do</url-pattern>  

    ② 路径匹配
      <url-pattern>/*</url-pattern> struts2匹配根路径下的全部请求

    ③ 扩展名匹配
      <url-pattern>*.do</url-pattern> struts1
      <url-pattern>*.html</url-pattern> 匹配全部html结尾的请求
      <url-pattern>*</url-pattern> 不能用*,否则报错

    action写web.xml中对应的url值~~~比如说有一个LoginServlet,他在web.xml中显示的应该是这样:
      <servlet>
        <servlet-name>LoginServlet</servlet-name>
        <servlet-class>servlet.LoginServlet</servlet-class>
      </servlet>
    <servlet-mapping>
        <servlet-name>LoginServlet</servlet-name>
        <url-pattern>/loginServlet</url-pattern>
      </servlet-mapping>
    
    而要提交的,也就是action应该等于<url-pattern>中的内容:
    action="<%=request.getContextPath()%>/loginServlet"
    
    其中<%=request.getContextPath()%>为获得当前工程目录,jsp提交到servlet中必须加这个,否则会出现404找不到页的错误~~

     

     

     

    JSP页面提交表单给Servlet时,路径的写法要格外注意。

    例如在web.xml中注册如下的servlet:

    <servlet>
        <servlet-name>addStudent</servlet-name>
        <servlet-class>org.mytest.addStudent</servlet-class>
      </servlet>

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

    假如说,你工程名字为HibernateApp3,JSP页面提交表单给servlet时有两种写法:

    1. <form action=servlet/addStudent method=post>...</form>

    2. <form  action=/HibernateApp3/servlet/addStudentmethod=post>...</form>

    注意:/代表根目录,如果路径是使用/开头,Tomcat就是webApp那个目录,如果你不是/开头代表你从当前工程的目录开始,例如:webApp/HibernateApp3/

    这一点非常重要,很多提交表单时发生的错误都是因为提交路径出错造成的。 

     这些都是从网上收集到的各种回答,总而言之,action的提交路径,和<url-pattern></url-pattern>中的路径保持一致就不会有错,不过是有前提的,就是路径入口处要是指向这个工程的,例如下面这种就是错误:

    <form method="get" action="/yutao"> ,,而 <url-pattern>/yutao</url-pattern>,这样提交表单时,就会报404错误:The requested resource is not available。因为前面的“/”,指的是服务器的根目录,也就是Tomcat目录下的webapps。改为:<form method="get" action="/工程名/yutao",即可。

     url-parrern里面放的是servlet访问路径,我目前的结论是这路径随便写都写,当然,注意我上面说的。。。

    import java.sql.*;
    import java.io.*;
    import java.io.IOException;
    import javax.servlet.ServletException;
    import javax.servlet.annotation.WebServlet;
    import javax.servlet.http.HttpServlet;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    
    
    @WebServlet("/FindFootOrPk")
    public class FindFootOrPk extends HttpServlet {
        
        private static final long serialVersionUID = 1L;
        
        //JDBC驱动名和数据库URL
        static final String JDBC_DRIVER="com.mysql.jdbc.Driver";
        static final String DB_URL="jdbc:mysql://localhost:3306/dudu";//dudu数据库名称
        
        //数据库用户名和密码
        static final String USER="root";
        static final String PASS="123456";
        
        
        
        /**
         * @see HttpServlet#HttpServlet()
         */
        public FindFootOrPk() {
            super();
           
        }
    
        /**
         * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
         */
        protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
            
              Connection conn=null;
              Statement stmt=null;
              
              
            //设置响应内容类型
              response.setContentType("text/html;charset=UTF-8");
              PrintWriter out=response.getWriter();
              String title="前后端打通,连接数据库,我的世界来啦!";
             // String name=request.getParameter("pk");
            //  String link=request.getParameter("link");
              
              String docType = "<!DOCTYPE html>
    ";
                out.println(docType +
                "<html>
    " +
                "<head><title>" + title + "</title></head>
    " +
                "<body bgcolor="#f0f0f0">
    " +
                "<h1 align="center">" + title + "</h1>
    ");
                try{
                    // 注册 JDBC 驱动器
                    Class.forName("com.mysql.jdbc.Driver");
                    
                    // 打开一个连接
                    conn = DriverManager.getConnection(DB_URL,USER,PASS);
                    
                     out.println("数据库连接成功!");
                     
                    // 执行 SQL 查询
                    stmt = conn.createStatement();//
                    String sql;                     //foot_ball 数据库表名称
                    sql = "SELECT*FROM foot_ball"; //sql语句,一定要保证正确.最好测试一下,要不html不显示.
                    ResultSet rs = stmt.executeQuery(sql); //sql语句执行的结果
                     
                    // 展开结果集数据库
                    while(rs.next()){
                        // 通过字段检索
                        int id  = rs.getInt("id");
                        String tream = rs.getString("tream");
                        String url = rs.getString("url");
              
                        // 输出数据
                        out.println("ID: " + id);
                        out.println(", 球队: " + tream);
                        out.println(", 站点 URL: " + url);
                        out.println("<br />");
                    }
                    out.println("</body></html>");
    
                    // 完成后关闭
                    rs.close();
                    stmt.close();
                    conn.close();
                } catch(SQLException se) {
                    // 处理 JDBC 错误
                    se.printStackTrace();
                } catch(Exception e) {
                    // 处理 Class.forName 错误
                    e.printStackTrace();
                }finally{
                    // 最后是用于关闭资源的块
                    try{
                        if(stmt!=null)
                        stmt.close();
                    }catch(SQLException se2){
                    }
                    try{
                        if(conn!=null)
                        conn.close();
                    }catch(SQLException se){
                        se.printStackTrace();
                    }
                }
              
              
        }
    
        /**
         * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
         */
        protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
            
            doGet(request, response);
        }
    
    }



  • 相关阅读:
    二进制,八进制,十进制,十六进制之间的转换
    using关键字的使用
    简单工厂和单例设计模式
    面向对象的七种设计原则
    第六章 初始继承和多态
    第五章项目:体检套餐管理系统
    第二章《深入C#数据类型》项目经理评分
    <<MySchool数据库设计优化>> 内部测试
    Python 日志处理(一) 按Nginx log_format 分割日志记录
    Python 爬虫练习(一) 爬取国内代理ip
  • 原文地址:https://www.cnblogs.com/ltb6w/p/9906170.html
Copyright © 2020-2023  润新知