新手详解JAVA+数据库+JSP完成简单页面

本篇以数据库添加为例(本例中数据库名为“xinxi”表单名字为“stud”)

准备---实体层:

package entity;

public class Student {
    private String name;
    private String adress;
    private String qq;
    public void setName(String name) {
        this.name=name;
    }
    public String getName() {
        return name;
    }
    public void setAdress(String adress) {
        this.adress=adress;
    }
    public String getAdress() {
        return adress;
    }
    public void setQq(String qq) {
        this.qq=qq;
    }
    public String getQq() {
        return qq;
    }
    public Student() {
    }
    public Student(String n,String a,String q) {
        name=n;
        adress=a;
        qq=q;
    }
}

准备---连接数据库:

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

public class Shujuku {
     public static Connection conn(){
         String url="jdbc:sqlserver://localhost:1433;DatabaseName=xinxi";//填写你的数据库名
         String userName="sa";//填写你的用户名,我的是sa
         String userPwd="********";//填写你的密码
         Connection connection=null;

  try{
      Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
      System.out.println("加载驱动成功!");

  }catch(Exception e){

           e.printStackTrace();

           System.out.println("加载驱动失败!");
   }
 try{
    connection=DriverManager.getConnection(url,userName,userPwd);
 System.out.println("连接数据库成功!");
 }catch(Exception e){
        e.printStackTrace();
        System.out.print("SQL Server连接失败!");
  }
 return connection;
}
public static void close (Statement state, Connection conn) {//关闭
    if (state != null) {
        try {
            state.close();
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }

    if (conn != null) {
        try {
            conn.close();
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }
}

public static void close (ResultSet rs, Statement state, Connection conn) {//关闭
    if (rs != null) {
        try {
            rs.close();
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }

    if (state != null) {
        try {
            state.close();
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }

    if (conn != null) {
        try {
            conn.close();
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }
}
}

1.servlet(首先StuService ts=new StuService();//新建service实体对象,以便后来调用service中add()方法

package servlet;
import service.*;
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;
import entity.*;
@WebServlet("/StuServlet")
public class StuServlet extends HttpServlet {
    private static final long serialVersionUID = 1L;

    protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        // TODO Auto-generated method stub
        request.setCharacterEncoding("utf-8");
        String method = request.getParameter("method");
        if(method.equals("add"))
        {
            add(request,response);
        }
    }
    StuService ts=new StuService();
    private void add(HttpServletRequest req, HttpServletResponse resp)throws ServletException, IOException {
        req.setCharacterEncoding("utf-8");
        String name = req.getParameter("name");//从jsp中获取参数name
        String adress=req.getParameter("adress");
        String qq=req.getParameter("qq");
        Student stu=new Student(name,adress,qq);//新建
        int k=ts.add(stu);
        if(k==2) {
            req.setAttribute("message", "添加成功");//setAttribute方法用于将内容保存在对象中,传到add.jsp中
            req.getRequestDispatcher("add.jsp").forward(req,resp);//getRequestDispatcher方法用于进入下一个页面
        }
        if(k==0)
        {
            req.setAttribute("message", "重复,请重新录入");
            req.getRequestDispatcher("add.jsp").forward(req,resp);
        }
        if(k==1)
        {
            req.setAttribute("message", "数据库添加失败");
            req.getRequestDispatcher("add.jsp").forward(req,resp);
        }
    }
}

①创建方法add(),Servlet从jsp中获取参数,新建实体对象Student stu=new Student(name,adress,qq);

②调用service层,检验添加的准确性

StuService ts=new StuService();//新建service对象

if(ts.add(stu)){

//如果service对象ts的Boolean add(stu)方法返回真值true,页面要显示添加成功

//req.setAttribute("message", "添加成功");将"添加成功"内容保存在req对象参数message中,传递给add.jsp

//req.getRequestDispatcher("add.jsp").forward(req,resp);进入下一个界面(这里是add.jsp)

}

else{

//收到返回值为false,添加失败

//将 "重复,请重新录入"内容保存在req对象参数message中,传递给add.jsp

//进入下一个界面(这里是add.jsp)

}

2. Service(新建dao实体对象,后面要调用dao层方法

package service;

import dao.StuDao;
import entity.Student;

public class StuService {
    StuDao sdao=new StuDao();
    public int add(Student stu) {
        int f=0;
        if(!sdao.rename(stu.getName())) {
            f=1;
            if(sdao.add(stu))
            f=2;
        }
        return f;
    }
}

①创建 add(Student stu){}方法,检验添加的准确性

②调用dao层后台程序方法rename()检验是否重名

if(!sdao.rename(stu.getName())) {//如果没有重复

sdao.add(stu);//添加

f=true;//返回真值

}

如图,直接在提示错误中点击创建方法即可

3. Dao(后台程序)

在这里编写所需的底层程序:

rename()//验证名字是否唯一

Add()//添加

public class StuDao {

    public boolean rename(String name) {
        // 检验名字是否重复
        boolean f=false;
        String sql="select name from stud where name=‘"+name+"‘";//数据库语句,查询界面输入和表stud中name是否重复
        Connection conn = Shujuku.conn();//创建连接
        Statement state = null;//建立Statement对象,执行静态SQL语句
        ResultSet rs = null;//ResultSet对象 是查询数据库时的返回对象,读取返回结果集

        try {
            state = conn.createStatement();
            rs = state.executeQuery(sql);
            while (rs.next()) {//不重复,返回true
                f = true;
            }
        } catch (SQLException e) {
            e.printStackTrace();
        } finally {
            Shujuku.close(rs, state, conn);
        }
        return f;
    }

    public boolean add(Student stu) {
        //添加
        String sql = "insert into stud(name,adress,qq) values(‘" +stu.getName() + "‘,‘" + stu.getAdress() + "‘,‘" + stu.getQq() + "‘)";
        Connection conn = Shujuku.conn();
        Statement state = null;
        boolean f = false;
        int a=0;
        try {
            state = conn.createStatement();
            a=state.executeUpdate(sql);//添加
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            Shujuku.close(state, conn);
        }
        if (a > 0) {
            f = true;
        }
        return f;
    }
}

4. Add.jsp

编写前端页面;

应用javascript验证客户端表单合法性。

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
<%
         Object message = request.getAttribute("message");
         if(message!=null && !"".equals(message)){

%>
     <script type="text/javascript">
              alert("<%=request.getAttribute("message")%>");
         </script>
<%} %>
    <div align="center">
        <h1 style="color: red;">信息录入</h1>
        <a href="index.jsp">返回主页</a>
        <form action="StuServlet?method=add" method="post" onsubmit="return check()">
            <div >
                姓名<input type="text" id="name" name="name"/>
            </div>
            <div >
                联系方式<input type="text" id="qq" name="qq" />
            </div>
            <div >
                地址<input type="text" id="adress" name="adress" />
            </div>
            <div >
                <button type="submit" >保&nbsp;&nbsp;&nbsp;存</button>
            </div>
        </form>
    </div>
    <script type="text/javascript">
        function check() {
            var name = document.getElementById("name");;
            var qq = document.getElementById("qq");
            var adress = document.getElementById("adress");

            //非空
            if(name.value == ‘‘) {
                alert(‘名字为空‘);
                name.focus();
                return false;
            }
            if(qq.value == ‘‘) {
                alert(‘联系方式为空‘);
                qq.focus();
                return false;
            }
            if(adress.value == ‘‘) {
                alert(‘地址为空‘);
                adress.focus();
                return false;
            }
        }
    </script>
</body>
</html>

 

原文地址:https://www.cnblogs.com/sengzhao666/p/10181806.html

时间: 2024-07-30 06:27:21

新手详解JAVA+数据库+JSP完成简单页面的相关文章

Protocol Buffer技术详解(Java实例)

Protocol Buffer技术详解(Java实例) 该篇Blog和上一篇(C++实例)基本相同,只是面向于我们团队中的Java工程师,毕竟我们项目的前端部分是基于Android开发的,而且我们研发团队中目前主要使用的开发语言就是C++.Java和Python,其中Python主要用于编写各种工具程序.然而为了保证该篇Blog的完整性和独立性,我仍然会将上一篇Blog中已经出现的内容再一次赘述,同时对于Java中特有的部分也会着重介绍.          一.生成目标语言代码.      下面

详解Java解析XML的四种方法

(1)DOM解析 DOM是html和xml的应用程序接口(API),以层次结构(类似于树型)来组织节点和信息片段,映射XML文档的结构,允许获取 和操作文档的任意部分,是W3C的官方标准 [优点] ①允许应用程序对数据和结构做出更改. ②访问是双向的,可以在任何时候在树中上下导航,获取和操作任意部分的数据. [缺点] ①通常需要加载整个XML文档来构造层次结构,消耗资源大. [解析详解] ①构建Document对象: DocumentBuilderFactory dbf = DocumentBu

详解java垃圾回收机制(转)及finalize方法(转)

详细介绍Java垃圾回收机制 垃圾收集GC(Garbage Collection)是Java语言的核心技术之一,之前我们曾专门探讨过Java 7新增的垃圾回收器G1的新特性,但在JVM的内部运行机制上看,Java的垃圾回收原理与机制并未改变.垃圾收集的目的在于清除不再使用的对象.GC通过确定对象是否被活动对象引用来确定是否收集该对象.GC首先要判断该对象是否是时候可以收集.两种常用的方法是引用计数和对象引用遍历. 引用计数收集器 引用计数是垃圾收集器中的早期策略.在这种方法中,堆中每个对象(不是

Java学习之道:详解Java解析XML的四种方法

XML现在已经成为一种通用的数据交换格式,它的平台无关性,语言无关性,系统无关性,给数据集成与交互带来了极大的方便.对于XML本身的语法知识与技术细节,需要阅读相关的技术文献,这里面包括的内容有DOM(Document Object Model),DTD(Document Type Definition),SAX(Simple API for XML),XSD(Xml Schema Definition),XSLT(Extensible Stylesheet Language Transform

【Java】详解Java解析XML的四种方法

XML现在已经成为一种通用的数据交换格式,平台的无关性使得很多场合都需要用到XML.本文将详细介绍用Java解析XML的四种方法. AD: XML现在已经成为一种通用的数据交换格式,它的平台无关性,语言无关性,系统无关性,给数据集成与交互带来了极大的方便.对于XML本身的语法知识与技术细节,需要阅读相关的技术文献,这里面包括的内容有DOM(Document Object Model),DTD(Document Type Definition),SAX(Simple API for XML),XS

【转帖】windows命令行中java和javac、javap使用详解(java编译命令)

windows命令行中java和javac.javap使用详解(java编译命令) 更新时间:2014年03月23日 11:53:15   作者:    我要评论 http://www.jb51.net/article/48380.htm 学习一下java 最近重新复习了一下java基础,这里便讲讲对于一个类文件如何编译.运行.反编译的.也让自己加深一下印象 如题,首先我们在桌面,开始->运行->键入cmd 回车,进入windows命令行.进入如图所示的画面: 可知,当前默认目录为C盘User

详解java动态代理

生活中的代理: 比如一个明星成名了以后,是需要有一个代理的,因为太多人想找他签名,应付不来,那么这个时候代理的作用是拦截你对真正明星的访问,他可以拦截下来收点费用,再叫真正的明星过来为你签名. 程序中的代理: 1,要为已存在的多个具有相同接口的目标类的各个方法增加一些系统功能,例如,异常处理.日志.计算方法的运行时间.事务管理.等等,你准备如何做? 2,编写一个与目标类具有相同接口的代理类,代理类的每个方法调用目标类的相同方法,并在调用方法时加上系统功能的代码 下图显示了在程序中代理的调用原理(

详解Java中代码块和继承

本文发表于个人GitHub主页,原文请移步详解Java中代码块和继承 阅读. 概念 1.代码块 局部代码块 用于限定变量生命周期,及早释放,提高内存利用率 静态代码块 对类的数据进行初始化,仅仅只执行一次. 构造代码块 把多个构造方法中相同的代码可以放到这里,每个构造方法执行前,首先执行构造代码块. 2.继承 继承是已有的类中派生出新的类,新的类能够吸收已有类的数据属性和行为,并能扩展新的功能. 代码块的执行顺序 public class Test {    public String name

mongo 3.4分片集群系列之六:详解配置数据库

这个系列大致想跟大家分享以下篇章(我会持续更新的(^ω^)): 1.mongo 3.4分片集群系列之一:浅谈分片集群 2.mongo 3.4分片集群系列之二:搭建分片集群--哈希分片 3.mongo 3.4分片集群系列之三:搭建分片集群--哈希分片 + 安全 4.mongo 3.4分片集群系列之四:搭建分片集群--哈希分片 + 安全 + 区域 5.mongo 3.4分片集群系列之五:详解平衡器 6.mongo 3.4分片集群系列之六:详解配置数据库 7.mongo 3.4分片集群系列之七:配置数