晨跑调查程序学习笔记

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

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

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

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

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

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类。



程序截图:



时间: 2024-08-24 11:07:45

晨跑调查程序学习笔记的相关文章

微信小程序学习笔记--20170425--登录验证实现

初探微信小程序已经有几天的时间,跟随极客学院某某老师(只关注技术未关注老师,还请谅解).从微信小程序的框架结构及相关内容.下面以登录验证功能模块,展示近期学习的内容. 需求描述: 对于部分页面添加登录验证,用户未登录的情况下,进入页面,页面自动转向登录页面.登录验证成功后,回调到登录发起页面. 实现思路: 创建全局变量用于存储当前登录用户对象(userInfo).全局方法用于验证登录有效性(checkLoginInfo()).全局方法用于获取当前页面的全路径(getCurrentUrl()).

微信小程序学习笔记(阶段一)

一阶段学习过程: (一)看官方文档的简易教程:https://mp.weixin.qq.com/debug/wxadoc/dev/ (二)看小码哥视频:https://chuanke.baidu.com/v2040981-197486-1133724.html (三)模仿并写出一个计算器小程序demo 项目结构: pages:存储这各个页面的文件夹 pages内的文件夹(初始有index.logs):分别存储这每个页面,其中一般包含三种文件,*.js.*wxml.*wxss utils:里面装有

扩展GenericServlet实现Servlet程序 学习笔记

import java.io.IOException; import javax.servlet.GenericServlet; import javax.servlet.ServletException; import javax.servlet.ServletRequest; import javax.servlet.ServletResponse; //扩展GenericServlet实现Servlet程序 public class Demo12 extends GenericServle

微信小程序学习笔记

1.在app.json中输入如下代码就会自动在pages下创建welcome文件夹及相应的wxss, wxml, js, json文件 "pages":[ "pages/welcome/welcome" ] 2.在进行wx.for的数据绑定时可以不需要使用{{item.***}}的方式来获取数据,只需要引入数据时在前面加三个小点将对象展开即可 <template is="templateName" data="{{...item}

微信小程序学习笔记-2-常用组件介绍

微信小程序常用组件 组件的定义: 开发者可以利用微信团队提供的框架中的一系列基础组件进行快速的开发,什么是组件? 组件是视图层的基本组成单元. 组件自带一些功能与微信风格的样式. 一个组件通常包括开始标签和结束标签,属性用来修饰这个组件,内容在两个标签之间. 形式: <tagname property="value"> Content goes here </tagname> 例如: <view class="container">

Python编程入门-第三章 编写程序 -学习笔记

第三章 编写程序 1.编辑源程序.运行程序 可通过IDLE中File>New File新建一个文本以编辑源程序,编辑完成可通过Run>Run Module(或者F5快捷键)来运行程序.Python源文件都以.py格式存储. 2.从命令行运行程序 除了上述利用IDLE的集成功能运行程序的方式外,当然也可以通过命令行运行程序,命令格式为:python ‘源文件名称.py’. 3.编译源代码 当运行py格式文件时,Python会自动创建相应的.pyc文件,该文件包含编译后的代码即目标代码,目标代码基

微信小程序学习笔记-3-问题

一些在开发微信小程序中常见的问题 页面渲染 微信小程序中规定所有页面上渲染出来的数据,包括文字和图片皆包含在在每个页面文件夹中的js文件中的page这个内置函数的参数data中,page({data:{,}}),其实这个page的data感觉就是一个前端可以指定后台对象的一个快捷的方式,在wxml文件中可以用{{}}直接在页面展示page中的对象或数据,这就是说这个page是前端和你的代码唯一的渲染方式,官方文档中有明确的说明,如果想要更改page中的任何一个变量或者json对象,必须要用,th

微信小程序学习笔记1

初步接触微信小程序开发 微信小程序的开发环境 微信小程序是运行在微信环境中的应用,它只能在微信中运行,不能运行在浏览器等其他环境中,微信团队提供了专门开发工具用于小程序的开发,还提供了API,让小程序具备与手机设备和微信交互的能力,例如获取摄像头拍照,访问文件系统等,主要提现在以下三个方面: 获取当前登录微信用户的用户信息 微信支付 使用模版消息向微信发送通知消息 开发微信需要具备一定的前端基础知识,但不是全部,wxml代替html ,wxss代替css,然后就是一些javascript的核心.

微信小程序学习笔记(阶段二)

二阶段学习过程: (一)看官方文档的框架.组件.API:https://mp.weixin.qq.com/debug/wxadoc/dev/ (二)看极客学院第3.4章视频:http://www.php.cn/course/297.html (三)模仿并写出各个demo(模板应用demo.快递查询demo.登陆界面demo) 获取app.js的变量/方法: 前提:在app.js中定义了变量或所需方法 ①在当前页面的*.js最上面定义var app=getApp() ②在需要调用app中变量的方法