项目目录简介

创建数据库连接工具

db.properties

将数据库连接配置写在本文件中,当配置发生变化时,仅需修改本文件内容即可

ConnectionUtil

这个类中总共写了三个方法

静态方法 读取properties文件中的配置,此处仅是读取,并不创建数据库连接

static {

//类加载器读取文件

try {

InputStream in = ConnectionUtil.class.getClassLoader().getResourceAsStream("db.properties");

props.load(in);

driver = props.getProperty("jdbc.driver");

url = props.getProperty("jdbc.url");

username = props.getProperty("jdbc.username");

password = props.getProperty("jdbc.password");

Class.forName(driver);

} catch (Exception e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

}

静态方法 返回数据库连接 外部方法可以调用这个方法获取数据库连接

/**

* 获取连接的方法

*/

public static Connection getConn() throws Exception{

Connection conn = DriverManager.getConnection(url, username, password);

return conn;

}

静态方法 关闭数据库连接

/**

* 关闭连接的方法

*/

public static void closeConn(Connection conn) {

if (conn != null) {

try {

conn.close();

} catch (SQLException e) {

e.printStackTrace();

}

}

}

实体类的创建

实体是与数据库对应的实体,变量命名与数据类型与数据库尽量保持一致

package com.sx.beans;

public class User {

private String loginName;

private String password;

private String sex;

private String address;

public String getLoginName() {

return loginName;

}

public void setLoginName(String loginName) {

this.loginName = loginName;

}

public String getPassword() {

return password;

}

public void setPassword(String password) {

this.password = password;

}

public String getSex() {

return sex;

}

public void setSex(String sex) {

this.sex = sex;

}

public String getAddress() {

return address;

}

public void setAddress(String address) {

this.address = address;

}

public User() {

}

public User(String loginName, String password, String sex, String address) {

this.loginName = loginName;

this.password = password;

this.sex = sex;

this.address = address;

}

@Override

public String toString() {

return "User [loginName=" + loginName + ", password=" + password + ", sex=" + sex + ", address=" + address

+ "]";

}

}

eclipse和idea中都由对实体类创建的快捷方式

在User.java中单击右键 找到Source ,单击这两处可以快速生成get set方法和构造方法

Dao创建

Dao层又为Data access object,将与数据库的交互分别写在对应的接口与实现类中

User与数据库的交互操作 本文仅以checkPassword :检验用户登录密码是否正确为例。

userDao接口

在这个接口中定义与数据库交互完成的功能,这里检查用户登录,传入参数密码和账号,通过数据库查询返回User。这里采用先创建接口再创建实现类的方式,为什么要多此一举呢?这种设计模式满足低耦合,高内聚的设计理念,功能之间互不干扰,而且在团队开发中,一个人完成了某个功能的开发,其他人只需要关心功能的实现即可,直接传参调用,而不需要关心内部的实现。

package com.sx.dao;

import java.util.List;

import com.sx.beans.User;

public interface UserDao {

public User checkPassword(String username,String password);

public List findAll();

public int modUser(User user);

public int addUser(User user);

}

userDaoImpl

实现checkPassword方法,获取数据库链接,通过sql语句查询结果,将查到的信息赋值给创建的User对象,User对象初始为空,如果查询到结果,则User就不为空,我们可以通过判断User 是否为null判断账号和密码是否正确。

@Override

public User checkPassword(String username, String password) {

User u = null;

Connection conn = null;

try {

conn = ConnectionUtil.getConn();

String sql = "select loginname,sex,address from t_staff t " + "where t.loginname = ? and password = ?";

PreparedStatement pre = conn.prepareStatement(sql);

pre.setString(1, username);

pre.setString(2, password);

ResultSet res = pre.executeQuery();

if (res.next()) {

u = new User();

u.setLoginName(res.getString("loginName"));

u.setAddress(res.getString("address"));

}

return u;

} catch (Exception e) {

e.printStackTrace();

} finally {

try {

ConnectionUtil.closeConn(conn);

} catch (Exception e) {

e.printStackTrace();

}

}

return null;

}

Service

为controller提供服务 也是采用写接口,在写实现类的方式

Service 接口

public interface UserService {

User loginCheck(String username,String password);

}

ServiceImpl 实现类

在service层调用dao,以完成对应的功能

注意这里书写的方式,UserDao userDao = new UserDaoImpl();

new 后后面跟的是实现类类名,必须通过实现类才能调用对应的方法,变量名一般命名为xxxDao,而实际上它是一个实现类,这种命名方式可读性非常好,单从字面就能知道功能与对应所属的层。

@Override

public User loginCheck(String username, String password) {

UserDao userDao = new UserDaoImpl();

User user = userDao.checkPassword(username, password);

return user;

}

servlet

servlet 控制着前段访问的路径 前段的请求会转发到这里,servlet根据前端不同的请求,调用不同的service 返回 数据给前端

每一个servlet对应一个action,这个配置在web.xml中完成,后续会说到。

servlet 创建

创建出servlet的时候,会默认为我们创建doget与dopost方法,这两种方法对应着前端不同的请求方式。以登录为例,前端如果采用get方法,在登录时输入了密码,get方法会在地址栏中显示出所传的参数。post方法则只显示请求资源路径,具有较高的安全性,所以采用了doPost方法处理请求。

首先是获取前端所传过来的参数,然后创建service,调用service获取user对象,通过判断对象是否为空来判断用户名账号和密码是否正确。如果账号存在且密码正确,跳转到listuser界面,如果错误则跳转到error界面

protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

String username = request.getParameter("username");

String password = request.getParameter("password");

UserService service = new UserServiceImpl();

User user = service.loginCheck(username, password);

response.setContentType("text/html;charset=utf-8");

if(user != null) {

List users = service.findAll();

HttpSession session = request.getSession();

session.setAttribute("users", users);

response.sendRedirect("listuser.jsp");

}else {

response.sendRedirect("error.jsp");

}

}

web.xml 配置

Exercise

login.jsp

Login

com.sx.controller.LoginCheck

Login

/login

对于创建的servlet,我们要配置servlet与servlet-mapping。

servlet节点中,有servlet名字与对应的class,可以理解为:为servlet起个名字。servlet-class注意路径书写是否正确,可以通过 按住Ctrl键同时鼠标左键放到路径上,单击可以访问到你的LoginCheck类,说明配置成功。

servlet-mapping:配置前端请求路径与servlet匹配,注意要加/

Login

com.sx.controller.LoginCheck

Login

/login

以上我们已经实现了后端的全部功能。

jsp简单说明

用户名:

密码:

form method中指定请求方式为post 对应servlet中使用dopost方法响应请求

input name属性 username 与password 对应servlet获取参数时的变量名字

String username = request.getParameter("username");

String password = request.getParameter("password");

web java工程的创建_简单JavaWeb工程创建相关推荐

  1. java自定义jsp标签_深入浅出javaWeb实战第17讲自定义JSP标签(上)

    <JavaWeb开发>课程计划表 Web的概念及其演变 课程内容: ? Web的概念.特点 ? HTTP协议简介 ? Web技术的发展:静态文档,Web应用,Web服务 JavaWeb应用 ...

  2. wordpress创建_您可以使用WordPress创建的19种网站类型

    wordpress创建 When people are deciding why they should use WordPress, we often get asked about "c ...

  3. 公路水运工程安全电子光盘_公路水运工程施工安全标准化.pdf

    上海市公路工程安全质量监督站上海市公路工程安全质量监督站 上海市公路工程安全质量监督站上海市公路工程安全质量监督站 第一部分第一部分 :<: <安全标准化指南安全标准化指南>编制背景 ...

  4. java 邮箱找回密码_【JavaWeb】通过邮件找回密码

    前言 本文将介绍忘记密码时通过发送重置密码邮件找回密码的实现思路.整个实现过程中最重要的就是以下三点: 如何发送邮件到用户指定邮箱 邮件中的重置密码链接构成是怎么样的 验证重置密码链接的合法性(是否过 ...

  5. java GUI怎么输入_在Swing中创建Java GUI以进行表单输入

    好吧,我已经浏览了整个互联网,但却未能找到这个问题的答案,所以也许有人可以提供一些见解. 我正在开发一个相对简单的Java应用程序,它将取代目前用于系统访问请求的Word文档.它旨在允许表单输入新的员 ...

  6. java项目配置过滤器_在JavaWeb项目中如何正确的使用Filter过滤器

    在JavaWeb项目中如何正确的使用Filter过滤器 发布时间:2020-11-11 17:12:00 来源:亿速云 阅读:79 作者:Leah 这期内容当中小编将会给大家带来有关在JavaWeb项 ...

  7. java 工厂模式 计算器_简单工厂模式实现简易计算器

    packageFactoryMethodPattern;/*创建人:czc 创建时间:2019/12/16 创建用途:简单工厂模式实现计算器--主界面*/ import javax.swing.*;i ...

  8. cgi web 调用多次启动_简单说明CGI和动态请求是什么

    1. CGI是什么 CGI是common gateway interface的缩写,大家都译作通用网关接口,但很不幸,我们无法见名知意. 我们知道,web服务器所处理的内容都是静态的,要想处理动态内容 ...

  9. java爬虫自动识别验证码_简单Java爬虫(一)爬取手机号码

    原创 野狗菌 希望你能喜欢 今天 关于本文: 本文介绍一个简单Java爬虫,获取网页源码,爬取电话号码. 本篇教程用我的博客一个测试网页演示. --野狗菌[希望你能喜欢] 测试页面: https:// ...

最新文章

  1. 原生JavaScript实战之搜索框筛选功能
  2. C++设计模式实例图解
  3. lower_case_table_names=1 启动报错 mysql8.0
  4. 信息学奥赛一本通 1173:阶乘和 | OpenJudge NOI 1.6 15 | 洛谷 P1009 [NOIP1998 普及组] 阶乘之和
  5. mysql+imx6+移植_imx6ulevk---MfgTool的使用心得
  6. MEME将于4月12日推出V2版本
  7. 当自监督遇上语言-图像预训练,UC伯克利提出多任务框架SLIP
  8. 学习Java,真的可以月薪过万嘛?真实个人经历告诉你,记录了平时学习的内容以及学习过程中最真实的感受(三)
  9. 零拷贝原理详解(很多大厂面试题哦)
  10. 华为认证人工智能工程师 HCIA-AI V3.5(中文版) 发布通知
  11. gmoj 5405.Permutation(线段树+拓扑排序)
  12. 推荐 :如何通过数据分析选品(以新零售为例)
  13. fabric搭建及环境配置
  14. 365天挑战LeetCode1000题——Day 117 矩形区域不超过 K 的最大数值和
  15. Excel中的数据有效性
  16. beckhoff词汇,百晓生知识处理库抽取
  17. flex 换行每行子元素对齐
  18. cmd打开html文件,网页运行exe,exe软件打开弹出cmd
  19. 《算法笔记》3.5小节——入门模拟->进制转换 问题 D: 八进制
  20. 联发科MT6732芯片处理器介绍,MT6732平台资料下载

热门文章

  1. linux红帽子怎么配置dhcp,LinuxDHCP的高级配置如何应用呢?
  2. 幅度和幅值有区别吗_克拉克 (Clark) 变换中等幅值 (2/3) 和等功率 (sqrt(2/3)) 变换的公式推导...
  3. OPenGL实例化绘制、普通绘制说明
  4. Visual Studio 竖向选择功能
  5. iOS 推送通知 客户端实现
  6. TFBOYS饭票上线引热议,骗局之外,区块链技术能重构娱乐产业吗?
  7. 企业“数据压力锅”即将爆炸,CIO该如何防止爆锅?
  8. iframe标签 父子页面传值
  9. [C语言]一个很实用的服务端和客户端进行UDP通信的实例
  10. java 获取mp3 id3v2_MP3文件的ID3V1信息与ID3V2信息结构的分析