晨跑调查程序学习笔记

程序开发思路导图:

1.网站开发思路,从jsp页面开始写起,然后写servlet,之后写类来保存获取的表单变量,最后将获取的变量写入到数据库。

2.开始写代码前先检查字符集,检查方法:

  选中所建立的工程——>Alt+Enter——>修改字符集要尽量和数据库默认字符集一致。

注意:我的MySQL安装时默认字符集不是utf-8,为了和老师讲的一致,我将其修改成了UTF-8.

MySQL修改默认字符集的方法见http://www.cnblogs.com/xingyunblog/p/3836299.html

加载MySQL驱动包



3.编写表单代码时表单Get和Post的选择,如果无汉字,则用get或者post都可以,默认get方式。但如有汉字则只能用post,否则可能会出现乱码问题。

4.table属性:border边框宽度,bgcolor背景颜色

5.input的type属性radio是单选按钮,type属性submit是提交。name属性必须一样,checked属性为默认选择项,value属性区分选项。

6.<td>属性colspan是跨列,有多少<td></td>就有多少列。

index.jsp页面代码如下:

<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<html>
  <head>
    <title>投票页面</title>
  </head>
  <body bgcolor="#6699FF">
  <form action="voteServlet" >
  <table bgcolor="#eeeeee" align="center">
     <caption><h2>晨跑情况调查表</h2></caption>
     <tr>
         <td>  <input type="radio" name="vote" value="A" checked="checked"/>坚持跑下去</td>
         <td>  <input type="radio" name="vote" value="B"/>跑一学期试试</td>
         <td>  <input type="radio" name="vote" value="C"/>不想跑了</td>
    </tr>
     <tr align="center">
         <td colspan="3"> <input type="submit"value="提交"/></td>
     </tr>
  </table>
  </form>
  </body>
</html>

7.写servlet时直接新建servlet就可以图形用户界面配置web.xml.


8.web.xml中的<url-pattern>/voteServlet</url-pattern>中的url地址一定要和<form action="voteServlet">保持一致。
voteServlet.java源码如下:

package servlets;

import java.io.IOException;
import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import service.IDBService;
import service.IDBServiceImpl;
import beans.User;

//表单提交servlet类
public class VoteServlet extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { //获取用户提交参数vote的值 response.setContentType("text/html;charset=utf-8"); String vote=request.getParameter("vote"); //获取客户端用户IP String ip=request.getRemoteAddr(); //创建对象user类,跳转到User类 User user=new User(); user.setIp(ip); user.setVote(vote); //创建IDBService服务类,创建IDBserviceImpl服务实现类 //IDBserviceImpl类实现IDBService类接口 IDBService service=new IDBServiceImpl(); //判断数据库中是否存在这个ip User findUser=service.selectUserByIP(ip); String message="对不起,您已经投过票了,谢谢您的支持!"; //如果findUser不为null,则说明该用户已经投过票了,不能再投了。 if(findUser==null){ service.insertUser(user); message="您的投票已完成,谢谢您的支持!"; } //session保存反馈结果字符串 HttpSession session=request.getSession(); session.setAttribute("message",message); //跳转页面 RequestDispatcher rd=request.getRequestDispatcher("message.jsp"); rd.forward(request, response); } //doPost调用doGet方法 public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doGet(request,response); } }

 9.servlet中通过request.getParameter(变量名name字符串) 获取提交的数据.


10.面向对象类中不要定义成int类型,因为定义成Interger在后面代码中才可以进行判空操作。

11.定义好变量后,就可以使用source——>Generate Getters and Setters...快速重写赋值和修改变量方法。

 

编写好User.java代码如下:

package beans;

import java.io.Serializable;

//此类对象user类,用来赋值保存获取的变量。
public class User implements Serializable {
    private Integer id;//这里不要定义成int类型,不然无法进行判空操作。
    private String ip;
    private String vote;
    public Integer getId() {
        return id;
    }
    public void setId(Integer id) {
        this.id = id;
    }
    public String getIp() {
        return ip;
    }
    public void setIp(String ip) {
        this.ip = ip;
    }
    public String getVote() {
        return vote;
    }
    public void setVote(String vote) {
        this.vote = vote;
    }
}

建立数据库如下:

12.图形用户界面建立数据库后,选中数据库——右键——转储Sql文件——>选择保存路径,

13.记事本方式打开sql文件,添加语句create datebase run_data;use run_data;将修改后的文件保存。

run_data.sql文件修改后如下:

/*
Navicat MySQL Data Transfer

Source Server         : localhost_3306
Source Server Version : 50130
Source Host           : localhost:3306
Source Database       : run_data

Target Server Type    : MYSQL
Target Server Version : 50130
File Encoding         : 65001

Date: 2014-10-03 10:12:09
*/

create datebase run_data;
use run_data;

SET FOREIGN_KEY_CHECKS=0;
-- ----------------------------
-- Table structure for `users`
-- ----------------------------
DROP TABLE IF EXISTS `users`;
CREATE TABLE `users` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `ip` varchar(255) DEFAULT NULL,
  `vote` varchar(255) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

-- ----------------------------
-- Records of users
-- ----------------------------

14.新建一个Folder,起一个名字,将刚才生成的sql文件复制到这个目录下。

 

15.在eclipse下,package, source folder, folder都是文件夹. 但它们有区别如下:



    1.sourceFolder靠"/"来进行上下级划分,package靠“.”来进行上下级划分。
 
    2.source folder下能建package,而package下不能建source folder.

    3.package:当你在建立一个package时,它自动建立到source folder下,也只能建立在这个目录之下.

    4.source folder:存放java源代码的文件夹,当然也包括一些package文件夹,还可以包含其他文件.

    5.项目构建后,source folder里面的java自动编译成class文件到相应的bin文件夹中,其他文件也会移到到相应的目录下.
 
    6.folder:里面可以放入任何文件.包括java源文件,jar文件,其他文件(例如,图片,声音等).

    7.folder:如果里面含有java源文件,不管程序是否正确,eclipse都不会报错,把它们当做普通文件处理.

      但是项目如果要使用这里面的文件,情况就不同了.
   
    8. package:ECLIPSE会自动编译此文件夹同里面所包含的代码跟package

    9.source folder:ECLIPSE会自动编译里面的类文件,但文件夹本身不会编译

    10.folder:下面的类,ECLIPSE不会编译到指定存放编译文件包里.


16.创建接口IDBService,选中IDBService service=new IDBServiceImpl();中的IDBService后右键——>Create Interface,包名service.


IDBService.java代码如下:

package service;

import java.util.List;

import beans.User;

//提供服务类
public interface IDBService {
    //插入数据
    void insertUser(User user);
    //查询所有用户
    List<User> selectAllUsers();
    //查询所有用户IP
    User selectUserByIP(String ip);
    
    List<User> selectUsersByVote(String vote);
}

17.选中IDBService service=new IDBServiceImpl();中的IDBServiceImpl按下Alt+1快速修复,新建class类。

 IDBServiceImpl.java代码编写完毕如下:

package service;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.List;

import utils.JdbcUtil;
import beans.User;

//具体实现服务类
public class IDBServiceImpl implements IDBService {
    private Connection con;
    private Statement stmt;
    private PreparedStatement ps;
    private ResultSet rs;

    public void insertUser(User user) {
        try {
            //获取数据库链接
            con=JdbcUtil.getConnection();
            
            //SQL语句
            String sql="insert into users(ip,vote)values(?,?)";
            
            //创建一个 PreparedStatement 对象来将参数化的 SQL 语句发送到数据库。
            ps=con.prepareStatement(sql);
            
            //将获取的变量赋值插入到数据库内
            ps.setString(1,user.getIp());
            ps.setString(2,user.getVote());
            
            //执行SQL更新语句
            ps.executeUpdate();
        } catch (SQLException e) {
            e.printStackTrace();
        }finally{
            JdbcUtil.close(rs,ps,con);
        }
    }

    public List<User> selectAllUsers() {
        List<User> allUsers=new ArrayList<User>();
        try {
            con=JdbcUtil.getConnection();
            String sql="select id,ip,vote from users";
            stmt=con.createStatement();
            rs=stmt.executeQuery(sql);
            while(rs.next()){
                User user=new User();
                user.setId(rs.getInt("id"));
                user.setIp(rs.getString("ip"));
                user.setVote(rs.getString("vote"));
                allUsers.add(user);
            }
        } catch (SQLException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }finally{
            JdbcUtil.close(rs,stmt,con);
        }
        return allUsers;
    }

    public User selectUserByIP(String ip) {
        User user=null;
        try {
            con=JdbcUtil.getConnection();
            String sql="select id from users where ip=?";
            ps=con.prepareStatement(sql);
            ps.setString(1,ip);
            rs=ps.executeQuery();
            if(rs.next()){
                user=new User();
                user.setId(rs.getInt("id"));
            }
        } catch (SQLException e) {
            e.printStackTrace();
        }finally{
            JdbcUtil.close(rs,ps,con);
        }
        return user;
    }

    public List<User> selectUsersByVote(String vote) {
        List<User> users=new ArrayList<User>();
        try {
            con=JdbcUtil.getConnection();
            String sql="select id from users where vote=?";
            ps=con.prepareStatement(sql);
            ps.setString(1,vote);
            rs=ps.executeQuery();
            while(rs.next()){
                User user=new User();
                user=new User();
                user.setId(rs.getInt("id"));
                users.add(user);
            }
        } catch (SQLException e) {
            e.printStackTrace();
        }finally{
            JdbcUtil.close(rs,ps,con);
        }
        return users;
    }

}

创建JdbcUtil.java工具类。

JdbcUtil.java编写完毕代码如下:

package utils;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;



public class JdbcUtil {
    
    //加载数据库驱动方法
    private static Connection con;
    static {
        try {
            Class.forName("com.mysql.jdbc.Driver");
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        }
    }
    
    //数据库链接方法
    public static Connection getConnection(){
        try {
            if(con==null||con.isClosed())
            {
                String url="jdbc:mysql://127.0.0.1:3306/run_data";
                String user="root";
                String password="toor";
                con=DriverManager.getConnection(url, user, password);
            }
        } catch (SQLException e) {
            e.printStackTrace();
        }
        return con;
        
    }
    //数据库关闭方法
    public static void close(ResultSet rs,Statement stmt,Connection con){
        try {
            if(rs!=null)rs.close();
            if(stmt!=null)stmt.close();
            if(con!=null)con.close();
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }
    //可选择关闭方法
    public static void close(Object obj){
        try {
            if(obj!=null&&obj instanceof ResultSet) ((ResultSet)obj).close();
            if(obj!=null&&obj instanceof Statement) ((Statement)obj).close();
            if(obj!=null&&obj instanceof Connection)((Connection)obj).close();
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }

} 

创建servlet.java类,统计投票结果。

编写完毕ResultServlet.java代码如下:

package servlets;

import java.io.IOException;
import java.util.List;


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

import service.IDBService;
import service.IDBServiceImpl;
import beans.User;

//查询结果SERVELTE类
//查看结果请输入URL地址/resultServlet
public class ResultServlet extends HttpServlet {

    public void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        
        IDBService service=new IDBServiceImpl();
        
        List<User> allUsers=service.selectAllUsers();
        
        List<User> usersVoteA=service.selectUsersByVote("A");
        List<User> usersVoteB=service.selectUsersByVote("B");
        List<User> usersVoteC=service.selectUsersByVote("C");

        HttpSession session=request.getSession();
        
        session.setAttribute("allUsers",allUsers);
        session.setAttribute("usersVoteA",usersVoteA);
        session.setAttribute("usersVoteB",usersVoteB);
        session.setAttribute("usersVoteC",usersVoteC);
        RequestDispatcher rd=request.getRequestDispatcher("/showResults.jsp");
        rd.forward(request, response);
        
    }

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

}

 

新建showResults.jsp页面

 

showResults.jsp代码如下:

<%@ page import="java.util.*,beans.*" pageEncoding="utf-8"%>


<html>
  <head> 
    <title>投票结果</title>
  </head>
  <body bgcolor="#6699FF">

    <%
        List<User> allUsers =(List<User>)session.getAttribute("allUsers"); 
        List<User> usersVoteA =(List<User>)session.getAttribute("usersVoteA"); 
        List<User> usersVoteB =(List<User>)session.getAttribute("usersVoteB"); 
        List<User> usersVoteC =(List<User>)session.getAttribute("usersVoteC"); 
     %> 
     <center> <h2>晨跑情况调查结果</h2></center>
          <center> 票数统计:共计<%=allUsers.size() %>票.</center> 
          <br>
         
     <table border="1" bgclore="#eeeeee"align="center">
             
        
              <tr>
                  <td>坚持跑下去</td>
                  <td><%=usersVoteA.size() %></td>
              </tr>
              <tr>
                  <td>跑一学期试试</td>
                  <td><%=usersVoteB.size() %></td>
              </tr>
              <tr>
                  <td>不想跑了</td>
                  <td><%=usersVoteC.size() %></td>
              </tr>
    </table>
  </body>
</html>

 同上建立message.jsp,代码如下:

<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<%
    String message=(String)session.getAttribute("message");

 %>
 <%=message%>

web.xm最终代码如下:

<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5" 
    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_2_5.xsd">
  <display-name></display-name>
  <servlet>
    <servlet-name>VoteServlet</servlet-name>
    <servlet-class>servlets.VoteServlet</servlet-class>
  </servlet>
  <servlet>
    <servlet-name>ResultServlet</servlet-name>
    <servlet-class>servlets.ResultServlet</servlet-class>
  </servlet>


  <servlet-mapping>
    <servlet-name>VoteServlet</servlet-name>
    <url-pattern>/voteServlet</url-pattern>
  </servlet-mapping>
  <servlet-mapping>
    <servlet-name>ResultServlet</servlet-name>
    <url-pattern>/resultServlet</url-pattern>
  </servlet-mapping>    
  <welcome-file-list>
    <welcome-file>index.jsp</welcome-file>
  </welcome-file-list>
</web-app>

代码目录如图所示:

进行发布配置。

启动tomcat:

 


 项目源码下载地址:http://pan.baidu.com/s/1c03ZjFE

投票:

打开浏览器输入http://127.0.0.1:8080/RunProgram/

 

查看结果:

打开浏览器输入:http://127.0.0.1:8080/RunProgram/resultServlet

 


 

程序截图:




 


posted @ 2014-10-03 19:41  技术宅星云  阅读(584)  评论(0编辑  收藏  举报