本项目实现功能:
1、租客登录或注册该房屋租赁系统
2、登陆后可以查询房源信息、发布房源信息、修改房源信息、删除房源信息。
项目源码地址:
项目用例图
一、eclipse中建立以下目录的web工程,配置tomcat。
二、建立数据库连接类,连接本地MySQL8.0.
数据库设计如下 :
数据库语句(在Mysql中复制粘贴即可导入项目数据) :
/*
Navicat MySQL Data TransferSource Server : local
Source Server Version : 50519
Source Host : localhost:3306
Source Database : houseTarget Server Type : MYSQL
Target Server Version : 50519
File Encoding : 65001Date: 2017-11-29 23:04:30
*/SET FOREIGN_KEY_CHECKS=0;
-- ----------------------------
-- Table structure for district
-- ----------------------------
DROP TABLE IF EXISTS `district`;
CREATE TABLE `district` (
`district_name` varchar(50) DEFAULT NULL,
`district_id` int(11) NOT NULL,
PRIMARY KEY (`district_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;-- ----------------------------
-- Records of district
-- ----------------------------
INSERT INTO `district` VALUES ('清河区', '1');
INSERT INTO `district` VALUES ('清浦区', '2');
INSERT INTO `district` VALUES ('开发区', '3');
INSERT INTO `district` VALUES ('淮阴区', '4');-- ----------------------------
-- Table structure for houseinfo
-- ----------------------------
DROP TABLE IF EXISTS `houseinfo`;
CREATE TABLE `houseinfo` (
`user_id` int(11) NOT NULL,
`district_id` int(11) DEFAULT NULL,
`street_id` int(11) DEFAULT NULL,
`room` int(11) DEFAULT NULL,
`hall` int(11) DEFAULT NULL,
`remark` varchar(1000) DEFAULT NULL,
`price` decimal(10,0) DEFAULT NULL,
`title` varchar(70) DEFAULT NULL,
`date` datetime DEFAULT NULL,
`telephone` varchar(50) DEFAULT NULL,
`contract_man` varchar(50) DEFAULT NULL,
`area` decimal(10,0) DEFAULT NULL,
`floor` int(11) DEFAULT NULL,
`owner_name` char(50) DEFAULT NULL,
`owner_type` char(50) DEFAULT NULL,
`house_type` varchar(50) DEFAULT NULL,
`house_age` int(11) DEFAULT NULL,
`house_id` int(11) NOT NULL,
PRIMARY KEY (`house_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;-- ----------------------------
-- Records of houseinfo
-- ----------------------------
INSERT INTO `houseinfo` VALUES ('2', '3', '1', '4', '4', null, '50', '月季花园2', '2010-01-09 00:00:00', '13851678899', 'wzbping', '300', '5', '老王', null, null, null, '10');
INSERT INTO `houseinfo` VALUES ('1', '2', '4', '6', '6', null, '60', '白鹭花园', '2017-10-10 17:55:01', '051788888888', 'zs', '100', '3', '老张', null, null, null, '13');
INSERT INTO `houseinfo` VALUES ('3', '3', '2', '3', '2', null, '70', '上海花园', '2017-11-29 22:08:48', '12344566666', 'lsklhjjb', '128', '7', 'jhhb', null, null, null, '15');
INSERT INTO `houseinfo` VALUES ('2', '3', '1', '4', '4', null, '50', '月季花园3', '2010-01-09 00:00:00', '13851678899', 'wzbping', '300', '5', '老王', null, null, null, '20');
INSERT INTO `houseinfo` VALUES ('2', '3', '1', '4', '4', null, '50', '月季花园5', '2010-01-09 00:00:00', '13851678899', 'wzbping', '300', '5', '老王', null, null, null, '21');
INSERT INTO `houseinfo` VALUES ('2', '3', '1', '4', '4', null, '50', '月季花园4', '2010-01-09 00:00:00', '13851678899', 'wzbping', '300', '5', '老王', null, null, null, '22');-- ----------------------------
-- Table structure for street
-- ----------------------------
DROP TABLE IF EXISTS `street`;
CREATE TABLE `street` (
`street_name` varchar(50) DEFAULT NULL,
`district_id` int(11) NOT NULL,
`street_id` int(11) unsigned NOT NULL,
PRIMARY KEY (`street_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;-- ----------------------------
-- Records of street
-- ----------------------------
INSERT INTO `street` VALUES ('延安路', '2', '7');
INSERT INTO `street` VALUES ('上海路', '1', '8');
INSERT INTO `street` VALUES ('1111', '4', '9');
INSERT INTO `street` VALUES ('222', '4', '10');
INSERT INTO `street` VALUES ('222', '4', '11');
INSERT INTO `street` VALUES ('222', '4', '12');
INSERT INTO `street` VALUES ('黄河路', '4', '14');
INSERT INTO `street` VALUES ('黄河路', '4', '15');
INSERT INTO `street` VALUES ('天津路', '4', '16');
INSERT INTO `street` VALUES ('天津路', '4', '17');-- ----------------------------
-- Table structure for userinfo
-- ----------------------------
DROP TABLE IF EXISTS `userinfo`;
CREATE TABLE `userinfo` (
`username` varchar(50) DEFAULT NULL,
`userpass` varchar(50) DEFAULT NULL,
`user_id` int(11) unsigned NOT NULL AUTO_INCREMENT,
PRIMARY KEY (`user_id`)
) ENGINE=InnoDB AUTO_INCREMENT=10 DEFAULT CHARSET=utf8;-- ----------------------------
-- Records of userinfo
-- ----------------------------
INSERT INTO `userinfo` VALUES ('2', '2', '2');
INSERT INTO `userinfo` VALUES ('3', '3', '3');
INSERT INTO `userinfo` VALUES ('5', '5', '4');
INSERT INTO `userinfo` VALUES ('4', '4', '5');
INSERT INTO `userinfo` VALUES ('1', '1', '6');
INSERT INTO `userinfo` VALUES ('w', 'w', '8');
INSERT INTO `userinfo` VALUES ('wy', 'wy', '9');
DBConnect.java
//package common;
import java.sql.*;
public class DBConnect {
private Connection conn = null;
private Statement stmt = null;
private ResultSet rs = null;
private PreparedStatement ps = null;
public DBConnect()
{
try
{
//Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
//conn = DriverManager.getConnection("jdbc:sqlserver://localhost:1433;databasename=zf", "root", "123456");
Class.forName("com.mysql.cj.jdbc.Driver");
conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/house?&useSSL=false&serverTimezone=GMT%2B8&characterEncoding=utf-8&autoReconnect=true", "root", "123456");
stmt = conn.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_READ_ONLY);
}
catch (SQLException ex)
{
System.out.println(ex.getMessage() + "路径错误");
}
catch (ClassNotFoundException ex)
{
System.out.println(ex.getMessage() + "驱动错误");
}
}
public PreparedStatement getPs(String sql) throws SQLException {
try {
ps = conn.prepareStatement(sql);
conn.commit();
return ps;
} catch (Exception e) {
//conn.rollback();
e.printStackTrace();
return ps;
}
}
public ResultSet executeQuery(String ssql) throws SQLException{
try{
rs = stmt.executeQuery(ssql);
return rs;
}
catch(SQLException se){
//conn.rollback();
System.out.println("DBBean.executeQuery() ERROR:"+se.getMessage());
}
return rs;
}
//------added by me
public void printResult(ResultSet rs) throws SQLException{
int col = rs.getMetaData().getColumnCount();
System.out.println("============================");
while (rs.next()) {
for (int i = 1; i <= col; i++) {
System.out.print(rs.getString(i) + "\t");
if ((i == 2) && (rs.getString(i).length() < 8)) {
System.out.print("\t");
}
}
System.out.println("");
}
System.out.println("============================");
}
//---
public int executeUpdate(String ssql) throws SQLException{
int iupdate = 0;
try{
iupdate = stmt.executeUpdate(ssql);
return iupdate;
}
catch(SQLException se){
//conn.rollback();
System.out.println("DBBean.executeUpdate() ERROR:"+se.getMessage());
}
return iupdate;
}
public void free() throws SQLException{
try{
if(rs != null) rs.close();
if(stmt != null) stmt.close();
if(conn != null) conn.close();
}
catch(SQLException se){
System.out.println("DBBean.free() ERROR:"+se.getMessage());
}
}
public Connection getConnection() {
return conn;
}
public static void main(String[] args) throws SQLException {
DBConnect db=new DBConnect();
String sql="insert into house(id,room,address) values(9,'213','深圳路')";
//System.out.println(sql);
int i=db.executeUpdate(sql);
if(i==1)
{System.out.println("测试成功!\n");
db.printResult(db.executeQuery("select * from house"));//added by me
}
else
{System.out.println("测试失败!");}
}
}
三、SpringMVC其实就一种基于Servlet的MVC模型:
1、模型:一个或多个javabean对象,用于存储数据和业务逻辑。
checkInfo.java
package beans;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
import common.DBConnect;
public class checkInfo {
DBConnect db = new DBConnect();
ResultSet rs;
ArrayList result = new ArrayList();
String qxid;
String jdid;
String low;
String high;
String housetype;
String room;
String hall;
public List getInfo(CheckInfoBean info){
DBConnect db = new DBConnect();
qxid = info.getQxid();
jdid=info.getJdid();
low = info.getLow();
high = info.getHigh();
housetype = info.getHousetype();
room = info.getRoom();
hall = info.getHall();
//查询条件组合
String sql = "select * from houseinfo where 1=1";
if(qxid!=null&&!qxid.equals("0")){
sql = sql + " and district_id =" + qxid;
}
if(jdid!=null&&!jdid.equals("0")){
sql = sql + " and street_id =" + jdid;
}
if(low!=null&&!low.equals("0")){
sql = sql + " and price >" + low;
}
if(high!=null&&!high.equals("0")){
sql = sql + " and price <=" + high;
}
if(housetype!=null&&!housetype.equals("0")){
sql = sql + " and house_type ='" + housetype+"'";
}
if(room!=null&&!room.equals("0")){
sql = sql + " and room =" + room;
}
if(hall!=null&&!hall.equals("0")){
sql = sql + " and hall =" + hall;
}
System.out.println(sql);
//查询数据
try {
rs = db.executeQuery(sql);
while(rs.next()){
CheckInfoBean cb = new CheckInfoBean();
cb.setTitle(rs.getString("title"));
cb.setOwnername(rs.getString("owner_name"));
cb.setHouseid(rs.getString("house_id"));
cb.setRoom(rs.getString("room"));
cb.setHall(rs.getString("hall"));
cb.setDate(rs.getString("date"));
cb.setPrice(rs.getString("price"));
cb.setArea(rs.getString("area"));
//将Javabean数据对象存入到result对象中
result.add(cb);
}
} catch (SQLException e) {
System.out.println("CheckInfo.java"+e);
}
return result;
}
}
CheckInfoBean.java
package beans;
public class CheckInfoBean {
//鏀堕泦鏌ヨ鏉′欢
private String qxid;
private String jdid;
private String low;
private String high;
private String housetype;
private String room;
private String hall;
//鏄剧ず鏌ヨ缁撴灉娑夊強鐨勫睘鎬�
private String title;
private String ownername;
private String houseid;
private String date;
private String price;
private String area;
public String getQxid() {
return qxid;
}
public void setQxid(String qxid) {
this.qxid = qxid;
}
public String getJdid() {
return jdid;
}
public void setJdid(String jdid) {
this.jdid = jdid;
}
public String getLow() {
return low;
}
public void setLow(String low) {
this.low = low;
}
public String getHigh() {
return high;
}
public void setHigh(String high) {
this.high = high;
}
public String getHousetype() {
return housetype;
}
public void setHousetype(String housetype) {
this.housetype = housetype;
}
public String getRoom() {
return room;
}
public void setRoom(String room) {
this.room = room;
}
public String getHall() {
return hall;
}
public void setHall(String hall) {
this.hall = hall;
}
public String getTitle() {
return title;
}
public void setTitle(String title) {
this.title = title;
}
public String getOwnername() {
return ownername;
}
public void setOwnername(String ownername) {
this.ownername = ownername;
}
public String getHouseid() {
return houseid;
}
public void setHouseid(String houseid) {
this.houseid = houseid;
}
public String getDate() {
return date;
}
public void setDate(String date) {
this.date = date;
}
public String getPrice() {
return price;
}
public void setPrice(String price) {
this.price = price;
}
public String getArea() {
return area;
}
public void setArea(String area) {
this.area = area;
}
public CheckInfoBean() {
// TODO Auto-generated constructor stub
}
}
2、控制器:一个或多个Servlet对象,根据视图提交的请求进行控制,即将请求转发给业务逻辑的javabean,并将处理记过存放到实体模型javabean中,输出给视图显示。
houseInfo.java
package beans;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
import common.DBConnect;
public class houseInfo {
DBConnect db = new DBConnect();
ResultSet rs;
ArrayList result = new ArrayList();
//根据userid查询数据显示在列表中
public List getInfo(String sql){
DBConnect db = new DBConnect();
System.out.println(sql);
//查询数据
try {
rs = db.executeQuery(sql);
while(rs.next()){
HouseInfoBean cb = new HouseInfoBean();
cb.setHouse_id(rs.getString("house_id"));
cb.setTitle(rs.getString("title"));
cb.setPrice(rs.getString("price"));
cb.setDate(rs.getString("date"));
//将Javabean数据对象存入到result对象中
result.add(cb);
}
} catch (SQLException e) {
System.out.println("houseInfo.java"+e);
}
return result;
}
//根据houseid查询某一条记录
public List getAllInfo(String sql){
DBConnect db = new DBConnect();
System.out.println(sql);
//查询数据
try {
rs = db.executeQuery(sql);
while(rs.next()){
HouseInfoBean cb = new HouseInfoBean();
cb.setTitle(rs.getString("title"));
cb.setDistrict_id(rs.getString("district_id"));
cb.setStreet_id(rs.getString("street_id"));
cb.setHall(rs.getString("hall"));
cb.setRoom(rs.getString("room"));
cb.setFloor(rs.getString("floor"));
cb.setArea(rs.getString("area"));
cb.setHouse_age(rs.getString("house_age"));
cb.setOwner_name(rs.getString("owner_name"));
cb.setOwner_type(rs.getString("owner_type"));
cb.setPrice(rs.getString("price"));
cb.setHouse_type(rs.getString("house_type"));
cb.setTelephone(rs.getString("telephone"));
cb.setContract_man(rs.getString("contract_man"));
cb.setRemark(rs.getString("remark"));
//将Javabean数据对象存入到result对象中
result.add(cb);
}
} catch (SQLException e) {
System.out.println("houseInfo.java"+e);
}
return result;
}
//修改信息
public int modInfo(String sql){
DBConnect db = new DBConnect();
System.out.println(sql);
int i = db.executeUpdate(sql);
return i;
}
//增加信息
public int insertInfo(String sql){
DBConnect db = new DBConnect();
System.out.println(sql);
int i = db.executeUpdate(sql);
return i;
}
//删除信息
public int delInfo(String houseid){
DBConnect db = new DBConnect();
String sql="delete from houseinfo where house_id = "+houseid;
int i = db.executeUpdate(sql);
return i;
}
}
HouseInfoBean.java
package beans;
public class HouseInfoBean {
//根据houseinfo表的属性列确定成员变量
private String house_id;
private String user_id;
private String district_id;
private String street_id;
private String hall;
private String room;
private String date;
private String title;
private String price;
private String telephone;
private String area;
private String floor;
private String owner_name;
private String owner_type;
private String house_age;
private String house_type;
private String contract_man;
private String remark;
public String getHouse_type() {
return house_type;
}
public void setHouse_type(String house_type) {
this.house_type = house_type;
}
public String getHouse_id() {
return house_id;
}
public void setHouse_id(String house_id) {
this.house_id = house_id;
}
public String getUser_id() {
return user_id;
}
public void setUser_id(String user_id) {
this.user_id = user_id;
}
public String getDistrict_id() {
return district_id;
}
public void setDistrict_id(String district_id) {
this.district_id = district_id;
}
public String getStreet_id() {
return street_id;
}
public void setStreet_id(String street_id) {
this.street_id = street_id;
}
public String getHall() {
return hall;
}
public void setHall(String hall) {
this.hall = hall;
}
public String getRoom() {
return room;
}
public void setRoom(String room) {
this.room = room;
}
public String getDate() {
return date;
}
public void setDate(String date) {
this.date = date;
}
public String getTitle() {
return title;
}
public void setTitle(String title) {
this.title = title;
}
public String getPrice() {
return price;
}
public void setPrice(String price) {
this.price = price;
}
public String getTelephone() {
return telephone;
}
public void setTelephone(String telephone) {
this.telephone = telephone;
}
public String getArea() {
return area;
}
public void setArea(String area) {
this.area = area;
}
public String getFloor() {
return floor;
}
public void setFloor(String floor) {
this.floor = floor;
}
public String getOwner_name() {
return owner_name;
}
public void setOwner_name(String owner_name) {
this.owner_name = owner_name;
}
public String getOwner_type() {
return owner_type;
}
public void setOwner_type(String owner_type) {
this.owner_type = owner_type;
}
public String getHouse_age() {
return house_age;
}
public void setHouse_age(String house_age) {
this.house_age = house_age;
}
public String getContract_man() {
return contract_man;
}
public void setContract_man(String contract_man) {
this.contract_man = contract_man;
}
public String getRemark() {
return remark;
}
public void setRemark(String remark) {
this.remark = remark;
}
}
视图:一个和多个JSP页面,想控制器提交数据和为模型提供数据显示,JSP页面主要使用HTML标记和JavaBean标记来显示数据。
sendinfo.html
<%@ page language="java" import="java.util.*" pageEncoding="gbk"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>sendinfo.html</title>
<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
<meta http-equiv="description" content="this is my page">
<meta http-equiv="content-type" content="text/html; charset=UTF-8">
<link rel="stylesheet" type="text/css" href="css/style.css">
<script type="text/javascript">
function pass(){
var pass=false;
if(document.form1.title.value==""){
alert("标题不能为空!");
pass=false;
}else if(document.form1.district_id.value=="0"){
alert("区县不能为空!");
pass=false;
}else if(document.form1.street_id.value=="0"){
alert("街道不能为空!");
pass=false;
}else
pass=true;
return pass;
}
</script>
</head>
<body>
<br>
<form name="form1" method="post" action="myinfosave.jsp" onsubmit="return pass()">
<table border="0" width="95%">
<tr>
<td colspan="4">发布售房信息:</td>
</tr>
<tr>
<td width="15%" class="td_align">标题:</td>
<td colspan="3"><input type="text" name="title" style="width:300px"></td>
</tr>
<tr>
<td class="td_align">区县: </td>
<td width="35%"><select name="district_id">
<option value="0">不限--</option>
<option value="1">清河区</option>
<option value="2">清浦区</option>
<option value="3">开发区</option>
<option value="4">淮阴区</option>
</select></td>
<td width="15%" class="td_align">街道:</td>
<td width="35%"><select name="street_id">
<option value="0">不限--</option>
<option value="7">延安路</option>
<option value="8">上海路</option>
<option value="14">黄河路</option>
<option value="17">天津路</option>
</select>
</td>
</tr>
<tr>
<td class="td_align">户型:</td>
<td><select name="room" style="width:50px" >
<option value="0">不限--</option>
<option value="1">1</option>
<option value="2">2</option>
<option value="3">3</option>
<option value="4">4</option>
</select>
室 <select name="hall" style="width:50px">
<option value="0">不限--</option>
<option value="1">1</option>
<option value="2">2</option>
<option value="3">3</option>
<option value="4">4</option>
</select>
厅</td>
<td class="td_align">楼层: </td>
<td><input type="text" name="floor" style="width:80px"></td>
</tr>
<tr>
<td class="td_align">面积:</td>
<td><input type="text" name="area" style="width:80px">
平方米</td>
<td class="td_align">楼龄:</td>
<td><input type="text" name="house_age" style="width:80px">
年</td>
</tr>
<tr>
<td class="td_align">物业名称: </td>
<td><input type="text" name="owner_name" style="width:110px"></td>
<td class="td_align">物业类型:</td>
<td><select name="owner_type">
<option value="0">不限--</option>
<option value="国有">国有</option>
<option value="民营">民营</option>
<option value="私有">私有</option>
</select>
</td>
</tr>
<tr>
<td class="td_align">售价:</td>
<td><input type="text" name="price" style="width:70px">
万元</td>
<td class="td_align">房屋类型:</td>
<td><select name="house_type" style="width:80px">
<option value="0">不限--</option>
<option value="普通住宅">普通住宅</option>
<option value="高层">高层</option>
<option value="别墅">别墅</option>
</select></td>
</tr>
<tr>
<td class="td_align">联系电话:</td>
<td><input type="text" name="telephone" style="width:100px"></td>
<td class="td_align">联系人:</td>
<td><input type="text" name="contract_man" style="width:100px"></td>
</tr>
<tr>
<td class="td_align">房屋介绍:</td>
<td colspan="3"><textarea name="remark" style="width:300px"></textarea>
<input type="submit" name="Submit" value="提交"></td>
</tr>
</table>
</form>
</body>
</html>
<%@ page language="java" import="java.util.*,beans.*" pageEncoding="gbk"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>sendinfo.html</title>
<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
<meta http-equiv="description" content="this is my page">
<meta http-equiv="content-type" content="text/html; charset=UTF-8">
<link rel="stylesheet" type="text/css" href="css/style.css">
<script type="text/javascript">
function pass(){
var pass=false;
if(document.form1.title.value==""){
alert("标题不能为空!");
pass=false;
}else if(document.form1.district_id.value=="0"){
alert("区县不能为空!");
pass=false;
}else if(document.form1.street_id.value=="0"){
alert("街道不能为空!");
pass=false;
}else
pass=true;
return pass;
}
</script>
</head>
<body>
<br>
<%
String houseid=request.getParameter("houseid");
String sql="select * from houseinfo where house_id='"+houseid+"'";
houseInfo h=new houseInfo();
List r= h.getAllInfo(sql);
HouseInfoBean info=(HouseInfoBean)r.get(0);
String qxid=info.getDistrict_id();
String jdid=info.getStreet_id();
%>
<form name="form1" method="post" action="myinfoupdate.jsp?houseid=<%=houseid%>" onsubmit="return pass()">
<table border="0" width="95%">
<tr>
<td colspan="4">修改售房信息:</td>
</tr>
<tr>
<td width="15%" class="td_align">标题:</td>
<td colspan="3"><input type="text" name="title" style="width:300px" value=<%=info.getTitle() %>></td>
</tr>
<tr>
<td class="td_align">区县: </td>
<td width="35%"><select name="district_id">
<option value="0">不限--</option>
<option value="1" <%if(qxid.equals("1")){%>selected<%} %>>清河区</option>
<option value="2" <%if(qxid.equals("2")){%>selected<%} %>>清浦区</option>
<option value="3" <%if(qxid.equals("3")){%>selected<%} %>>开发区</option>
<option value="4" <%if(qxid.equals("4")){%>selected<%} %>>淮阴区</option>
</select></td>
<td width="15%" class="td_align">街道:</td>
<td width="35%"><select name="street_id">
<option value="0">不限--</option>
<option value="7" <%if(jdid.equals("7")){%>selected<%} %>>延安路</option>
<option value="8" <%if(jdid.equals("8")){%>selected<%} %>>上海路</option>
<option value="14" <%if(jdid.equals("14")){%>selected<%} %>>黄河路</option>
<option value="17" <%if(jdid.equals("17")){%>selected<%} %>>天津路</option>
</select>
</td>
</tr>
<tr>
<td class="td_align">户型:</td>
<td><select name="room" style="width:50px" >
<option selected><%=info.getRoom() %></option>
<option value="0">不限--</option>
<option value="1">1</option>
<option value="2">2</option>
<option value="3">3</option>
<option value="4">4</option>
</select>
室 <select name="hall" style="width:50px">
<option selected><%=info.getHall() %></option>
<option value="0">不限--</option>
<option value="1">1</option>
<option value="2">2</option>
<option value="3">3</option>
<option value="4">4</option>
</select>
厅</td>
<td class="td_align">楼层: </td>
<td><input type="text" name="floor" style="width:80px" value=<%=info.getFloor() %>></td>
</tr>
<tr>
<td class="td_align">面积:</td>
<td><input type="text" name="area" style="width:80px" value=<%=info.getArea() %>>
平方米</td>
<td class="td_align">楼龄:</td>
<td><input type="text" name="house_age" style="width:80px" value=<%=info.getHouse_age() %>>
年</td>
</tr>
<tr>
<td class="td_align">物业名称: </td>
<td><input type="text" name="owner_name" style="width:110px" value=<%=info.getOwner_name() %>></td>
<td class="td_align">物业类型:</td>
<td><select name="owner_type">
<option selected><%=info.getOwner_type() %></option>
<option value="0">不限--</option>
<option value="国有">国有</option>
<option value="民营">民营</option>
<option value="私有">私有</option>
</select>
</td>
</tr>
<tr>
<td class="td_align">售价:</td>
<td><input type="text" name="price" style="width:70px" value=<%=info.getPrice() %>>
万元</td>
<td class="td_align">房屋类型:</td>
<td><select name="house_type" style="width:80px">
<option selected><%=info.getHouse_type() %></option>
<option value="0">不限--</option>
<option value="普通住宅">普通住宅</option>
<option value="高层">高层</option>
<option value="别墅">别墅</option>
</select></td>
</tr>
<tr>
<td class="td_align">联系电话:</td>
<td><input type="text" name="telephone" style="width:100px" value=<%=info.getTelephone() %>></td>
<td class="td_align">联系人:</td>
<td><input type="text" name="contract_man" style="width:100px" value=<%=info.getContract_man() %>></td>
</tr>
<tr>
<td class="td_align">房屋介绍:</td>
<td colspan="3"><textarea name="remark" style="width:300px" ><%=info.getRemark() %></textarea>
<input type="submit" name="Submit" value="提交"></td>
</tr>
</table>
</form>
</body>
</html>
四、用户注册功能的实现
第一步:在register.html静态页面的基础上创建register.jsp动态页面。
注:
在page指令中的pageEncoding属性设置为UTF-8。确保页面中汉字的保存与正常显示。
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
页面中的form表单中的action属性值设为接收处理页面地址“rec_register.jsp”
在left.html页面中的注册用户链接的地址改为"register.jsp"
<td align="center"> <a href="register.html"
target="main">注册用户</a></td>
第二步,创建用于接收用户注册数据的介绍页面rec_register.jsp。
1.接收注册页面register.jsp页面的提交数据
//接收用户输入的数据
request.setCharacterEncoding("gbk");
String name=request.getParameter("uname");
String psw=request.getParameter("upass1");
//输出数据
System.out.println("注册用户名:"+name+";密码:"+psw);
2.连接数据库,判断用户名是否已经存在
//连接数据库,判断用户名是否已存在
String sql="select count(*) from userinfo where username=? and userpass=?";
DBConnect db=new DBConnect();
PreparedStatement ps=db.getPS(sql);
ps.setString(1,name);
ps.setString(2,psw);
ResultSet rs=ps.executeQuery();
int count=0;
while(rs.next()){
count=rs.getInt(1);
}
3.根据数据操作结果,如果用户名已经存在,给出提示信息,如果用户名不存在,将数据插入数据库。
if(count==1){
//存在,提示信息
out.println("<script lang='javascript'>");
out.println("alert('用户名已存在!');");
out.println("location='register.jsp'");
out.println("</script>");
}
else{
//不存在,将数据插入数据库userinfo表中
String sql1 = "insert into userinfo(username,userpass)values(?,?)";
ps = db.getPS(sql1);
ps.setString(1, name);
ps.setString(2, psw);
int i=0;
i=ps.executeUpdate();
if (i == 1) {
//注册成功
out.println("<script lang='javascript'>");
out.println("alert('注册成功!');");
out.println("location='register.jsp'");
out.println("</script>");
} else {
//注册失败
out.println("<script lang='javascript'>");
out.println("alert('注册失败!');");
out.println("location='register.jsp'");
out.println("</script>");
}
}
五、分页功能的实现
复杂查询:
select *
from
(select *,@curRow := @curRow + 1 as row
from
( select *
from topic
where boardid=00000000001
) as b join (select @currow:=0) r) as a
where row between 6 and 10
六、springmvc项目总结
- 客户端发起请求(http)通过web.xml找到 DispatchServlet(前端控制器);
- 由DispatchServlet控制器通过配置文件(servletName-servlet.xml)寻找到一个或多个HandlerMapping(映射处理器),找到用于处理请求的controller(后端控制器);
- DispatchServlet将请求提交到controller;
- Controller处理业务逻辑后,
- controller返回数据 ModelAndVIew给DispatchServlet;
- DispatchServlet寻找到一个或多个ViewResolver(视图解析器),找到ModelAndVIew指定的视图;
- DispatchServle负责将结果返给View(客户端JSP页面),封装Http;
- view响应页面的HTTP请求,返回响应数据,浏览器绘制页面。
- 第2~3步,里面隐藏了步骤:
DispatchServlet 根据 HandlerMapping(专门映射处理器的一个映射器)的配置(用户自己配置的配置文件)找到Handler(处理器),然后由具体的HandlerAdapter处理器对Handler进行处理。
- handler跟controller有啥区别?
controller 是 handler,但是handler不是controller。
handler接管所有的DispatchServlet给与的处理信息,包括静态请求(http://……/style.css),并且可以改变请求所指向的资源参数如 String target参数。
controller只做三件事接收参数、调用业务、使用业务结果渲染页面。
七、运行截图。
需要项目工程的小伙伴私聊哈~~~
瑞斯拜~~~