真的,稳住,考上研,利用两年逆袭。一步一步来,实在不行,最后最差也不过就是就回家种地,想想也不错。

前期准备配置

建一个动态web项目

新建Dynamic Web Project
File->New->Other->Web->Dynamic Web Project

新建web.xml文件并新建几个包

开始写代码

在entity在新建两个类,User(用来登录)和Hero(用来增删改查)

user表和用户表,代建。

数据库连接放util中包中

package util;

import java.sql.Connection;
import java.sql.DriverManager; import javax.sound.midi.Soundbank; public class DbUtil { private String dbUrl="jdbc:mysql://localhost:3306/how2java";
private String dbUserName="root";
private String dbPassword="123456";
private String jdbcName="com.mysql.jdbc.Driver"; /**
* 获取数据库连接
* @return
* @throws Exception
*/
public Connection getCon() throws Exception{
Class.forName(jdbcName);
Connection con=DriverManager.getConnection(dbUrl,dbUserName,dbPassword);
System.out.println("数据库连接成功!");
return con;
} /**
* 关闭数据库连接
* @param con
* @throws Exception
*/
public void closeCon(Connection con) throws Exception{
if(con!=null){
con.close();
}
} }

hero的增删查改的方法实现放在dao包下

package dao;

import java.util.ArrayList;
import java.util.List; import com.mysql.jdbc.Connection;
import com.mysql.jdbc.PreparedStatement;
import com.mysql.jdbc.ResultSet;
import com.mysql.jdbc.Statement; import entity.Hero;
import util.DbUtil; public class HeroDAO {
DbUtil dbutil = new DbUtil();
//添加新英雄
public void add(Hero hero) {
String sql = "insert into hero values(null,?,?,?)";
try {
Connection c = (Connection) dbutil.getCon();
PreparedStatement ps = (PreparedStatement) c.prepareStatement(sql);
ps.setString(1, hero.name);
ps.setFloat(2, hero.hp);
ps.setInt(3, hero.damage); ps.execute(); ResultSet rs = (ResultSet) ps.getGeneratedKeys();
if (rs.next()) {
int id = rs.getInt(1);
hero.id = id;
}
} catch (Exception e) { e.printStackTrace();
}
}
//更新英雄
public void update(Hero hero) { String sql = "update hero set name= ?, hp = ? , damage = ? where id = ?";
try (Connection c = (Connection) dbutil.getCon();
PreparedStatement ps = (PreparedStatement) c.prepareStatement(sql);) { ps.setString(1, hero.name);
ps.setFloat(2, hero.hp);
ps.setInt(3, hero.damage);
ps.setInt(4, hero.id); ps.execute(); } catch (Exception e) { e.printStackTrace();
} }
//删除英雄
public void delete(int id) { try (Connection c = (Connection) dbutil.getCon(); Statement s = (Statement) c.createStatement();) { String sql = "delete from hero where id = " + id; s.execute(sql); } catch (Exception e) { e.printStackTrace();
}
}
//根据id号获得英雄
public Hero get(int id) {
Hero hero = null; try (Connection c = (Connection) dbutil.getCon(); Statement s = (Statement) c.createStatement();) { String sql = "select * from hero where id = " + id; ResultSet rs = (ResultSet) s.executeQuery(sql); if (rs.next()) {
hero = new Hero();
String name = rs.getString(2);
float hp = rs.getFloat("hp");
int damage = rs.getInt(4);
hero.name = name;
hero.hp = hp;
hero.damage = damage;
hero.id = id;
} } catch (Exception e) { e.printStackTrace();
}
return hero;
} public List<Hero> list() {
return list(0, Short.MAX_VALUE);
} public List<Hero> list(int start, int count) {
List<Hero> heros = new ArrayList<Hero>(); String sql = "select * from hero order by id asc limit ?,? "; try (Connection c = (Connection) dbutil.getCon();
PreparedStatement ps = (PreparedStatement) c.prepareStatement(sql);) { ps.setInt(1, start);
ps.setInt(2, count); ResultSet rs = (ResultSet) ps.executeQuery(); while (rs.next()) {
Hero hero = new Hero();
int id = rs.getInt(1);
String name = rs.getString(2);
float hp = rs.getFloat("hp");
int damage = rs.getInt(4);
hero.id = id;
hero.name = name;
hero.hp = hp;
hero.damage = damage;
heros.add(hero);
}
} catch (Exception e) { e.printStackTrace();
}
return heros;
}
}

登录模块

login.html
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>登录页面</title>
</head>
<body> <form action="login" method="POST">
账号: <input type="text" name="name"> <br>
密码: <input type="password" name="password"> <br>
<input type="submit" value="登录">
</form> </body>
</html>
从<form action="login" method="POST">可以看出,action为login,method为post
现在需要在web.xml中配置映射
<?xml version="1.0" encoding="UTF-8"?>
<web-app>
<servlet>
<servlet-name>LoginServlet</servlet-name>
<servlet-class>servlet.LoginServlet</servlet-class>
</servlet> <servlet-mapping>
<servlet-name>LoginServlet</servlet-name>
<url-pattern>/login</url-pattern>
</servlet-mapping>
</web-app>

现在编写LoginServlet类

package servlet;

import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse; import com.mysql.jdbc.Connection;
import com.mysql.jdbc.ResultSet;
import com.mysql.jdbc.Statement; import util.DbUtil; public class LoginServlet extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response) {
String name = request.getParameter("name");
String password = request.getParameter("password");
System.out.println(name + " " + password);
String sql = "select * from user where name = '" + name +"' and password = '" + password+"'";
DbUtil dbConnect = new DbUtil();
try {
Connection con = (Connection) dbConnect.getCon();
Statement s = (Statement) con.createStatement();
ResultSet set = (ResultSet) s.executeQuery(sql);
if (set.next()) {
System.out.println("账号密码正确");
request.getSession().setAttribute("userName", name);
request.getRequestDispatcher("/listHero").forward(request, response);//服务器跳转
} else {
response.sendRedirect("fail.html");// 客户端跳转
System.out.println("账号密码错误");
}
} catch (Exception e) {
e.printStackTrace();
}
}
}

客户端跳转我设置了登录信息错误跳转到的页面

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<h1>密码或账号错误</h1>
<a href="login.html">回到登陆界面重新登陆</a>
</body>
</html>

服务器跳转是在web.xml中映射一个路径,然后在相应的servlet中执行操作

 <servlet>
<servlet-name>HeroListServlet</servlet-name>
<servlet-class>servlet.HeroListServlet</servlet-class>
</servlet> <servlet-mapping>
<servlet-name>HeroListServlet</servlet-name>
<url-pattern>/listHero</url-pattern>
</servlet-mapping>

编写HeroListServlet,以html形式展示出英雄列表

package servlet;

import java.io.IOException;
import java.util.List; import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse; import dao.HeroDAO;
import entity.Hero; public class HeroListServlet extends HttpServlet{
protected void service(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
String userName = (String) request.getSession().getAttribute("userName");
System.out.println("欢迎"+userName);
if (null == userName) {
response.sendRedirect("login.html");
return;
}
response.setContentType("text/html; charset=UTF-8"); List<Hero> heros = new HeroDAO().list(); StringBuffer sb = new StringBuffer(); sb.append("<h1 align='center'>Welcome:</h1>");
String ps = ("<h2 align='center'>%s</h2>");
String ps1 = String.format(ps, userName);
sb.append(ps1); ps1 = ("<div align='center'><a href='addHero.html'>增加成员</a></div>");//增加添加新成员的连接
sb.append(ps1); sb.append("<table align='center' border='1' cellspacing='0'>\r\n");
sb.append("<tr><td>id</td><td>name</td><td>hp</td><td>damage</td><td>delete</td><td>edit</td></tr>\r\n"); String trFormat = "<tr><td>%d</td><td>%s</td><td>%f</td><td>%d</td>"
+ "<td><a href='deleteHero?id=%d'>delete</a></td>"//添加删除连接
+ "<td><a href='editHero?id=%d'>edit</a></td></tr>\r\n";//添加修改连接 for (Hero hero : heros) {
//System.out.println(hero);
String tr = String.format(trFormat, hero.getId(), hero.getName(), hero.getHp(),
hero.getDamage(),hero.getId(),hero.getId());//设置删除和修改连接下的id就是相对应英雄的id
sb.append(tr);
}
sb.append("</table>");
response.getWriter().write(sb.toString());
}
}

增加新成员链接下的操作

转到添加页面addHero.html

<!DOCTYPE html>

<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">

<form action="addHero" method="post">
名字 : <input type="text" name="name"> <br>
血量 : <input type="text" name="hp"> <br>
伤害: <input type="text" name="damage"> <br>
<input type="submit" value="增加 ">
</form>

添加英雄

package servlet;

import java.io.IOException;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse; import dao.HeroDAO;
import entity.Hero;
import net.sf.json.JSONObject; public class HeroAddServlet extends HttpServlet{
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException{ request.setCharacterEncoding("UTF-8"); String name = request.getParameter("name");
String hp = request.getParameter("hp");
String damage = request.getParameter("damage"); Hero hero = new Hero();
hero.setName(name);
hero.setHp(Float.parseFloat(hp));
hero.setDamage(Integer.parseInt(damage)); new HeroDAO().add(hero);
System.out.println("添加成功"+hero.toString()); request.getRequestDispatcher("/listHero").forward(request, response);
}
}

配置web.xml(添加编辑删除的)

<servlet-mapping>
<servlet-name>HeroAddServlet</servlet-name>
<url-pattern>/addHero</url-pattern>
</servlet-mapping> <servlet>
<servlet-name>HeroDeleteServlet</servlet-name>
<servlet-class>servlet.HeroDeleteServlet</servlet-class>
</servlet> <servlet-mapping>
<servlet-name>HeroDeleteServlet</servlet-name>
<url-pattern>/deleteHero</url-pattern>
</servlet-mapping> <servlet>
<servlet-name>HeroEditServlet</servlet-name>
<servlet-class>servlet.HeroEditServlet</servlet-class>
</servlet> <servlet-mapping>
<servlet-name>HeroEditServlet</servlet-name>
<url-pattern>/editHero</url-pattern>
</servlet-mapping>

删除操作

package servlet;

import java.io.IOException;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse; import dao.HeroDAO; public class HeroDeleteServlet extends HttpServlet {
public void service(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException { int id = Integer.parseInt(request.getParameter("id"));//获得要删除的id new HeroDAO().delete(id);//调用删除英雄方法 request.getRequestDispatcher("/listHero").forward(request, response);//跳转到展示hero页面
}
}

编辑操作

package servlet;

import java.io.IOException;

import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse; import dao.HeroDAO;
import entity.Hero; public class HeroEditServlet extends HttpServlet {
public void service(HttpServletRequest request, HttpServletResponse response) throws IOException { int id = Integer.parseInt(request.getParameter("id"));
Hero hero = new HeroDAO().get(id);
StringBuffer format = new StringBuffer();
response.setContentType("text/html; charset=UTF-8"); format.append("<!DOCTYPE html>"); format.append("<form action='updateHero' method='post'>");
format.append("名字 : <input type='text' name='name' value='%s' > <br>");
format.append("血量 : <input type='text' name='hp' value='%f' > <br>");
format.append("伤害: <input type='text' name='damage' value='%d' > <br>");
format.append("<input type='hidden' name='id' value='%d'>");
format.append("<input type='submit' value='更新'>");
format.append("</form>"); String html = String.format(format.toString(), hero.getName(), hero.getHp(), hero.getDamage(), hero.getId()); response.getWriter().write(html);
}
}
<form action='updateHero' method='post'>添加更新
更新操作
package servlet;

import java.io.IOException;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse; import dao.HeroDAO;
import entity.Hero; public class HeroUpdateServlet extends HttpServlet { protected void service(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException { request.setCharacterEncoding("UTF-8"); Hero hero = new Hero();
hero.setId(Integer.parseInt(request.getParameter("id")));
hero.setName(request.getParameter("name"));
hero.setHp(Float.parseFloat(request.getParameter("hp")));
hero.setDamage(Integer.parseInt(request.getParameter("damage"))); new HeroDAO().update(hero); request.getRequestDispatcher("/listHero").forward(request, response); }
}

小结:

  • 前端的数据可以在服务端通过其name属性,利用request.getParameter("xxx");来获取
  • 设置session,request.getSession().setAttribute("userName", name);这样在服务端就可以通过 request.getSession().getAttribute("userName");获取存入session的username
  • 服务端跳转 request.getRequestDispatcher("success.html").forward(request, response);服务端跳转可以看到浏览器的地址依然是之前的路径路径,并不会变成success.html
  • 客户端跳转 response.sendRedirect("fail.html");

利用Servlet做一套增删改查的更多相关文章

  1. JavaWeb程序利用Servlet的对SQLserver增删改查操作

    声明:学了几天终于将增删改查的操作掌握了,也发现了一些问题,所以总结一下. 重点:操作数据库主要用的是SQL语句跟其他无关. 一:前提知识:PreparedStatement PreperedStat ...

  2. C#利用WinForm调用WebServices实现增删改查

    实习导师要求做一个项目,用Winform调用WebServices实现增删改查的功能.写下这篇博客,当做是这个项目的总结.如果您有什么建议,可以给我留言.欢迎指正. 1.首先,我接到这个项目的时候,根 ...

  3. Android(java)学习笔记193:利用谷歌API对数据库增删改查(推荐使用)

    接下来我们通过项目案例来介绍:这个利用谷歌API对数据库增删改查 1.首先项目图: 2.这里的布局文件activity_main.xml: <LinearLayout xmlns:android ...

  4. vue实战(一):利用vue与ajax实现增删改查

    vue实战(一):利用vue与ajax实现增删改查: <%@ page pageEncoding="UTF-8" language="java" %> ...

  5. Android(java)学习笔记136:利用谷歌API对数据库增删改查(推荐使用)

    接下来我们通过项目案例来介绍:这个利用谷歌API对数据库增删改查 1. 首先项目图: 2. 这里的布局文件activity_main.xml: <LinearLayout xmlns:andro ...

  6. 一个在ASP.NET中利用服务器控件GridView实现数据增删改查的例子

    备注:这是我辅导的一个项目开发组的一个例子,用文章的方式分享出来,给更多的朋友参考.其实我们这几年的项目中,都不怎么使用服务器控件的形式了,而是更多的采用MVC这种开发模式.但是,如果项目的历史背景是 ...

  7. jsp-2 简单的servlet连接mysql数据库 增删改查

    连接mysql数据库的操作 有增删改查 用的包有 commons-lang3-3.5 mysql-connector-java-5.1.40-bin 但是实际上也就是 数据查询和数据处理两种 所以对数 ...

  8. Servlet练习:实现增删改查的综合练习

    ---恢复内容开始--- 本文为原创,转载请注明出处:https://www.cnblogs.com/Tom-shushu/p/9383066.html 本篇内容主要介绍:通过Servlet,JSP, ...

  9. JDBC 1 利用Statement对数据库进行增删改查

    准备工作 1新建po类:User private int id; private String name; private String pwd; set,get方法省略 2  新建UserDao类, ...

随机推荐

  1. spring框架bean注入

    今天学习了spring框架,刚刚入门简单的了解了spring并学习了bean的注入IOC:IOC(Inversion of Control,控制反转)不是什么技术,而是一种设计思想.它的目的是指导我们 ...

  2. Linux操作系统(第二版)(RHEL 8/CentOS 8)——勘误表

    Linux操作系统(第二版)(RHEL 8/CentOS 8)--勘误表 http://www.tup.tsinghua.edu.cn/booksCenter/book_08172501.html 本 ...

  3. 虚拟主机和ECS的选择——有的坑你可以不躺,有的钱你可以不花(一)

    一直想做网站,由于最开始虚拟主机有优惠,所以三年前买了虚拟主机,后来一直续费,间歇性使用过,发现很多功能都不行​. 昨天准备买新的,然后想起学生购买有优惠,于是开始了学生认证之旅​. 首先,看一下之前 ...

  4. ubuntu下vi不能正常使用的解决方法

    现象 ubuntu中vi在编辑状态下方向键不能用,还有回格键不能删除等我们平时习惯的一些键都不能使用. 原因 ubuntu预装的是vim tiny版本,需要的是vim full版本. 方案 $sudo ...

  5. selenium等待机制学习笔记

    转载至: https://blog.csdn.net/huilan_same/article/details/52544521 1. 强制等待 第一种也是最简单粗暴的一种办法就是强制等待sleep(x ...

  6. Mysql数据库分布式事务XA详解

    XA事务简介 XA 事务的基础是两阶段提交协议.需要有一个事务协调者来保证所有的事务参与者都完成了准备工作(第一阶段).如果协调者收到所有参与者都准备好的消息,就会通知所有的事务都可以提交了(第二阶段 ...

  7. css和js实现硬件加速渲染自定义滚动条

    听别人说用CSS的变换来实现渲染有硬件加速的效果,看到很多大网站都开始陆续使用上了,我也来说说怎么做,我这边实现的滚动条有自然滚动效果,看起来比较自然,说的再多不如直接写,让我们开始吧! 我们需要自己 ...

  8. new 正则

    在做项目的过程中,使用正则表达式来匹配一段文本中的特定种类字符,是比较常用的一种方式,下面是对常用的正则匹配做了一个归纳整理. 匹配中文:[\u4e00-\u9fa5] 英文字母:[a-zA-Z]数字 ...

  9. E. Tree Reconstruction 解析(思維)

    Codeforce 1041 E. Tree Reconstruction 解析(思維) 今天我們來看看CF1041E 題目連結 題目 略,請直接看原題 前言 一開始完全搞錯題目意思,還以為每次會刪除 ...

  10. B. Petya and Divisors 解析(思維)

    Codeforce 111 B. Petya and Divisors 解析(思維) 今天我們來看看CF111B 題目連結 題目 略,請看原題 前言 看了別人的解答就豁然開朗 @copyright p ...