java命名规范
- 项目名:没有要求,不起中文
- 包:公司域名倒写
- 数据访问层:dao,persist,mapper
- 实体:entity,model,bean,javabean,pojo
- 业务逻辑:service,biz
- 控制器:controller,servlet,action,web
- 过滤器:filter
- 异常:exception
- 监听器:listener
10 .注释:
1 类上和方法上使用文档注释 /** */
2 在方法里面使用/ */ 或 // - 类: 大驼峰
- 方法,属性:小驼峰
MVC 开发模式
- M:Model 模型,实体类和业务和 dao(持久)
- V:view 视图.JSP
- C:Controller 控制器,servlet(作用:视图和逻辑分离)
注:MVC——又称JSP model 2 - MVC 适用场景——大型项目开发
- 图示例(由下到上)
DB(数据库)
DAO:数据库访问对象
Service:业务逻辑
控制器
视图
实体类在整个过程中,负责封装数据
规整如下:
5.1 先设计数据库(项目最底层)
5.2 先写实体类
5.3 持久层
5.4 业务逻辑
5.5 控制器
5.6 视图
具体操作如下:
- 设计数据库
create database sum DEFAULT CHARACTER set utf8;
use sum;
create table flower(
id int(10) PRIMARY key auto_increment comment '编号',
name varchar(30) not null comment '花名',
price float not null comment '价格',
production VARCHAR(30) not null comment '原产地'
);
- 写实体类
package com.youdian.pojo;
public class Flower {
private int id;
private String name;
private double price;
private String production;
public Flower(int id, String name, double price, String production) {
super();
this.id = id;
this.name = name;
this.price = price;
this.production = production;
}
public Flower() {
super();
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public double getPrice() {
return price;
}
public void setPrice(double price) {
this.price = price;
}
public String getProduction() {
return production;
}
public void setProduction(String production) {
this.production = production;
}
}
- 数据访问层(持久层)
package com.youdian.dao;
import java.util.List;
import com.youdian.pojo.Flower;
public interface FlowerDao {
/**
* 查询全部
*/
List<Flower> selAll();
/**
*新增
*/
int insFlower(Flower flower);
}
实现类(需要加载数据库驱动)
package com.youdian.dao.impl;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
import com.mysql.jdbc.Connection;
import com.mysql.jdbc.PreparedStatement;
import com.youdian.dao.FlowerDao;
import com.youdian.pojo.Flower;
public class FlowerDaoImpl implements FlowerDao {
public List<Flower> selAll() {
List<Flower> list=new ArrayList<>();//JDK1.7开始,泛型可以省略
java.sql.Connection conn=null;
java.sql.PreparedStatement ps=null;
ResultSet rs=null;
try {
//数据库加载驱动
Class.forName("com.mysql.jdbc.Driver");
conn = DriverManager.getConnection("jdbc:mysql://localhost:33006/sum","root","root");
//自己的数据库名和账户密码
ps = conn.prepareStatement("select * from flower");
rs = ps.executeQuery();//创建了一个游标,指向一行数据
//目前处于长连接
while(rs.next()){
list.add(new Flower(rs.getInt(1), rs.getString(2), rs.getDouble(3), rs.getString(4)));
}
}
catch (ClassNotFoundException e1) {
e1.printStackTrace();
}
catch (SQLException e) {
e.printStackTrace();
}finally{
try {
rs.close();
ps.close();
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
return list;
}
public int insFlower(Flower flower) {
return 0;
}
}
- 业务逻辑(servers)
package com.youdian.service;
import java.util.List;
import com.youdian.pojo.Flower;
public interface FlowerService {
//显示所有花卉信息
List<Flower> show();
}
实现类
package com.youdian.service;
import java.util.List;
import com.youdian.dao.FlowerDao;
import com.youdian.dao.impl.FlowerDaoImpl;
import com.youdian.pojo.Flower;
import com.youdian.service.FlowerService;
public class FlowerServiceImpl implements FlowerService {
private FlowerDao flowerDao = new FlowerDaoImpl();
public List<Flower> show() {
return flowerDao.selAll();
}
public int add(Flower flower) {
return flowerDao.insFlower(flower);
}
}
- 配置web.xml
把Servers中的web.xml拷贝到WEB-INF下,并进行修改
(可以忽略这部分,因为使用标签等效)
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="3.0" xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd">
<!-- 这个一个schema,一个xml文档编译器 -->
<servlet>
<servlet-name>ShowServlet</servlet-name>
<servlet-class>com.youdian.servlet.ShowServlet</servlet-class>
</servlet>
<!-- 每个servlet可以映射多个 -->
<servlet-mapping>
<servlet-name>ShowServlet</servlet-name>
<url-pattern>/show</url-pattern>
</servlet-mapping>
</web-app>
Servlet
package com.youdian.servlet;
import java.io.IOException;
import java.util.List;
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 com.youdian.pojo.Flower;
import com.youdian.service.FlowerService;
import com.youdian.service.impl.FlowerServiceImpl;
@WebServlet("/show")
//从web3.0后用标签等效配置web.xml文件
public class ShowServlet extends HttpServlet {
private FlowerService flowerService =new FlowerServiceImpl();
@Override
protected void service(HttpServletRequest req,
HttpServletResponse res)
throws ServletException, IOException {
List<Flower> list = flowerService.show();
req.setAttribute("list", list);
req.getRequestDispatcher("index.jsp").forward(req, res);
}
}
- 视图
eclipse中没有JSTL的包,而MyEclipse中自带
index.jsp如下:
<%@ page language="java" contentType="text/html; charset=utf-8"
pageEncoding="utf-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<!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>
<style type="text/css">
a{
color:black;
text-decoration:none;
}
a:hover{
color:red;
}
</style>
</head>
<body>
<table border='1'>
<tr>
<th>花卉编号</th>
<th>花卉名称</th>
<th>价格(元)</th>
<th>原产地</th>
</tr>
<c:forEach items="${list }" var="flower">
<tr>
<!-- 从数据库中读取内容 -->
<td>${flower.id }</td>
<td>${flower.name }</td>
<td>${flower.price }</td>
<td>${flower.production }</td>
</tr>
</c:forEach>
</table>
<a href="add.jsp">添加花卉信息</a>
</body>
</html>
对于增加数据库内容,还需写一个add.jsp:
其中,三个信息必须全填,不填会给出提示并且此次不提交
<%@ 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>
<script type="text/javascript" src="js/jquery-1.7.2.js"></script>
<script type="text/javascript">
//页面加载完成后执行
//相当于: window.οnlοad=function(){} $(document).ready(function(){});
//监听表单——提交,监听提交按钮——点击
$(function(){
$("form").submit(function(){
//表单选择器 :input标签type属性值
if($(":text:eq(0)").val()==""||$(":text:eq(1)").val()==""||$(":text:eq(2)").val()==""){
alert("请填写完整信息");
//阻止默认行为
return false;
}
});
});
</script>
</head>
<body>
<!-- post:
字节流
2GB
更安全
相对效率低
get:
字符流
2KB
-->
<form action="insert" method="post">
<table border="1" align="center">
<tr>
<td colspan="2" style="text-align:center;font-size:30px;font-weight:bold;">
花卉信息
</td>
</tr>
<tr>
<td><b>花卉名称:</b></td>
<td><input type="text" name="name"/></td>
</tr>
<tr>
<td><b>花卉价格:</b></td>
<td><input type="text" name="price"/></td>
</tr>
<tr>
<td><b>原产地:</b></td>
<td><input type="text" name="production"/></td>
</tr>
<tr>
<td colspan="2" align="center">
<input type="submit" value="提交"/><input type="reset" value="重置"/>
</td>
</tr>
</table>
</form>
</body>
</html>