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

前期准备配置

建一个动态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. MYSQL 50 基础题 (转载)

    MYSQL 50 基础题 (转载) 前言:最近在强化MYSQL 能力 答案在(也是转载处) https://www.cnblogs.com/kangxinxin/p/11585935.html 下面是 ...

  2. sqlserver 分列

    sql server 数据库中某张表(Person)的数据信息是: ID Address 1 平山花园-4单元-12幢-203 2 香山花园-3单元-22幢-304 现在有需求是,将地址信息显示形式改 ...

  3. 使用MVC 5、Web API 2、KnockoutJS、Ninject和NUnit开发、架构和测试Web应用程序

    做一名微软软件开发人员就像在国际煎饼屋订早餐一样.每道菜都有一堆煎饼,你必须从各种各样的煎饼和糖浆口味中选择.对于web应用程序,解决方案堆栈是一组软件子系统或组件,用于交付功能完整的解决方案(无论是 ...

  4. Java安全之Commons Collections1分析(三)

    Java安全之Commons Collections1分析(三) 0x00 前言 继续来分析cc链,用了前面几篇文章来铺垫了一些知识.在上篇文章里,其实是硬看代码,并没有去调试.因为一直找不到JDK的 ...

  5. 用 Java 实现的八种常用排序算法

    八种排序算法可以按照如图分类 交换排序 所谓交换,就是序列中任意两个元素进行比较,根据比较结果来交换各自在序列中的位置,以此达到排序的目的. 1. 冒泡排序 冒泡排序是一种简单的交换排序算法,以升序排 ...

  6. python之线程了解部分

    一.死锁(了解) 死锁产生的4个必要条件: 互斥:一个资源同一时刻只允许一个线程进行访问 占有未释放:一个线程占有资源,且没有释放资源 不可抢占:一个已经占有资源的线程无法抢占到其他线程拥有的资源 循 ...

  7. GIT 保存日志并建立自己的分支

    以下是我个人在工作中对git的愚见全是大白话说明.也是我踩坑记录吧,防止下次再次踩坑. 再已有的dev(开发分支)新建自己的分支 (featuer)在更新到gitlab 仓库中的过程. 首先要有大致的 ...

  8. 多测师讲解自动化测试_rf测试报告_高级讲肖sir

    (一)运行失败 1.1 1.2 用例失败log 2.3Repor 1.4Output (二)运行成功 (三)分析报告 3.1  log: 3.2Report (测试报告) 3.3 Output

  9. Jmeter请求元件之参数化CSV

    1.设置CSV:线程组->配置元件->CSV 数据文件设置 2.在本地创建txt文件,一个测试用例参数是一行,参数之间用逗号分隔: 或者创建一个excel文档,保存格式为csv: 这里有个 ...

  10. C 语言因为疫情重登最流行编程语言榜第一名!其实它一直都在~

      C 语言时隔五年后再次荣登最流行编程语言榜单第一名. 通过调查得出结论, C 语言再次受欢迎的原因竟然是因为病毒,这听起来愚蠢但确实是事实,嵌入式语言 C 和 C++ 被用于医疗设备中的幅度因为疫 ...