系列文章旨在記錄和總結自己在Java Web開發之路上的知識點、經驗、問題和思考,希望能幫助更多(Java)碼農和想成為(Java)碼農的人。
本篇文章給出截止到上篇文章之時,租房網應用的完整代碼。
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>house-renter</groupId> <artifactId>house-renter</artifactId> <version>0.0.1-SNAPSHOT</version> <packaging>war</packaging> <dependencies> <!-- https://mvnrepository.com/artifact/org.springframework/spring-context --> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-context</artifactId> <version>5.2.1.RELEASE</version> </dependency> <!-- https://mvnrepository.com/artifact/org.springframework/spring-webmvc --> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-webmvc</artifactId> <version>5.2.1.RELEASE</version> </dependency> <!-- https://mvnrepository.com/artifact/org.apache.taglibs/taglibs-standard-impl --> <dependency> <groupId>org.apache.taglibs</groupId> <artifactId>taglibs-standard-impl</artifactId> <version>1.2.5</version> </dependency> <!-- https://mvnrepository.com/artifact/org.apache.taglibs/taglibs-standard-spec --> <dependency> <groupId>org.apache.taglibs</groupId> <artifactId>taglibs-standard-spec</artifactId> <version>1.2.5</version> </dependency> <!-- https://mvnrepository.com/artifact/com.h2database/h2 --> <dependency> <groupId>com.h2database</groupId> <artifactId>h2</artifactId> <version>1.4.200</version> </dependency> <!-- https://mvnrepository.com/artifact/org.springframework/spring-jdbc --> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-jdbc</artifactId> <version>5.2.1.RELEASE</version> </dependency> <!-- https://mvnrepository.com/artifact/com.alibaba/druid --> <dependency> <groupId>com.alibaba</groupId> <artifactId>druid</artifactId> <version>1.1.21</version> </dependency> </dependencies> <build> <plugins> <plugin> <artifactId>maven-compiler-plugin</artifactId> <version>3.8.0</version> <configuration> <source>1.8</source> <target>1.8</target> </configuration> </plugin> <plugin> <artifactId>maven-war-plugin</artifactId> <version>3.2.1</version> <configuration> <warSourceDirectory>WebContent</warSourceDirectory> </configuration> </plugin> </plugins> </build> </project>
主要是用來配置 Spring MVC 的 DispatcherServlet 。
<?xml version="1.0" encoding="UTF-8"?> <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" id="WebApp_ID" version="3.0"> <display-name>house-renter</display-name> <welcome-file-list> <welcome-file>index.html</welcome-file> <welcome-file>index.htm</welcome-file> <welcome-file>index.jsp</welcome-file> <welcome-file>default.html</welcome-file> <welcome-file>default.htm</welcome-file> <welcome-file>default.jsp</welcome-file> </welcome-file-list> <filter> <filter-name>characterEncodingFilter</filter-name> <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class> <init-param> <param-name>encoding</param-name> <param-value>UTF-8</param-value> </init-param> <init-param> <param-name>forceEncoding</param-name> <param-value>true</param-value> </init-param> </filter> <filter-mapping> <filter-name>characterEncodingFilter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> <servlet> <servlet-name>dispatcher</servlet-name> <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> <init-param> <param-name>contextConfigLocation</param-name> <param-value>/WEB-INF/dispatcher.xml</param-value> </init-param> <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <servlet-name>dispatcher</servlet-name> <url-pattern>*.action</url-pattern> </servlet-mapping> </web-app>
主要用來開啟組件掃描、配置DataSource和JdbcTemplate這兩個Bean。
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:context="http://www.springframework.org/schema/context" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.springframework.org/schema/beans https://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context https://www.springframework.org/schema/context/spring-context.xsd"> <context:component-scan base-package="houserenter"/> <bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource" init-method="init" destroy-method="close"> <property name="url" value="jdbc:h2:~/h2db/houserenter" /> <property name="username" value="sa" /> <property name="password" value="" /> <property name="maxActive" value="20" /> <property name="initialSize" value="1" /> <property name="maxWait" value="60000" /> <property name="minIdle" value="1" /> </bean> <bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate"> <constructor-arg ref="dataSource" /> </bean> </beans>
package houserenter.controller; import java.io.UnsupportedEncodingException; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.ResponseBody; import org.springframework.web.servlet.ModelAndView; import houserenter.entity.House; import houserenter.service.HouseService; @Controller public class HouseRenterController { @Autowired private HouseService houseService; @GetMapping("/test.action") @ResponseBody public String test() { return "hello"; } @PostMapping("/login.action") public ModelAndView postLogin(String userName, String password) { //這里需要驗證用戶是否已經注冊,省略 System.out.println("userName: " + userName + ", password: " + password); ModelAndView mv=new ModelAndView(); //重定向到查找感興趣房源列表的動作 mv.setViewName("redirect:houses.action?userName=" + userName); return mv; } @GetMapping("/houses.action") public ModelAndView getHouses(String userName) { //這里需要驗證用戶是否登錄,省略 ModelAndView mv=new ModelAndView(); //查找感興趣房源并綁定到相應JSP頁面,然后將請求轉發到該頁面 mv.addObject("mockHouses", houseService.findHousesInterested(userName)); mv.setViewName("houses.jsp?userName=" + userName); return mv; } @GetMapping("/house-details.action") public ModelAndView getHouseDetails(String userName, String houseId) { // 這里需要驗證用戶是否登錄,省略 ModelAndView mv=new ModelAndView(); //查找房源詳情并綁定到相應JSP頁面,然后將請求轉發到該頁面 mv.addObject("target", houseService.findHouseById(houseId)); mv.setViewName("house-details.jsp?userName=" + userName); return mv; } @GetMapping("/house-form.action") public ModelAndView getHouseForm(String userName, String houseId) { // 這里需要驗證用戶是否登錄,省略 ModelAndView mv=new ModelAndView(); //查找房源詳情并綁定到相應JSP頁面,然后將請求轉發到該頁面 mv.addObject("target", houseService.findHouseById(houseId)); mv.setViewName("house-form.jsp?userName=" + userName); return mv; } @PostMapping("/house-form.action") public ModelAndView postHouseForm(String userName, House house) throws UnsupportedEncodingException { // 這里需要驗證用戶是否登錄,省略 //更新指定房源的詳情 houseService.updateHouseById(house); //將請求轉發到查找房源詳情的動作 ModelAndView mv=new ModelAndView(); mv.setViewName("redirect:house-details.action?userName=" + userName + "&houseId=" + house.getId()); return mv; } }
package houserenter.service; import java.sql.ResultSet; import java.sql.SQLException; import java.util.List; import javax.annotation.PostConstruct; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.jdbc.core.JdbcTemplate; import org.springframework.jdbc.core.RowMapper; import org.springframework.stereotype.Service; import houserenter.entity.House; @Service public class HouseService { @Autowired private JdbcTemplate jdbcTemplate; @PostConstruct public void generateMockHouses() { jdbcTemplate.execute("drop table if exists house"); jdbcTemplate.execute("create table house(id varchar(20) primary key, name varchar(100), detail varchar(500))"); jdbcTemplate.update("insert into house values(?, ?, ?)", "1", "金科嘉苑3-2-1201", "詳細信息"); jdbcTemplate.update("insert into house values(?, ?, ?)", "2", "萬科橙9-1-501", "詳細信息"); } public List<House> findHousesInterested(String userName) { // 這里查找該用戶感興趣的房源,省略,改為用模擬數據 return jdbcTemplate.query( "select id,name,detail from house", new HouseMapper()); } public House findHouseById(String houseId) { return jdbcTemplate.queryForObject( "select id,name,detail from house where id=?", new Object[]{houseId}, new HouseMapper()); } public void updateHouseById(House house) { jdbcTemplate.update( "update house set id=?, name=?, detail=? where id=?", house.getId(), house.getName(), house.getDetail(), house.getId()); } private static final class HouseMapper implements RowMapper<House> { @Override public House mapRow(ResultSet rs, int rowNum) throws SQLException { return new House(rs.getString("id"), rs.getString("name"), rs.getString("detail")); } } }
package houserenter.entity; public class House { private String id; private String name; private String detail; public House(String id, String name, String detail) { super(); this.id=id; this.name=name; this.detail=detail; } public String getId() { return id; } public void setId(String id) { this.id=id; } public String getName() { return name; } public void setName(String name) { this.name=name; } public String getDetail() { return detail; } public void setDetail(String detail) { this.detail=detail; } @Override public String toString() { return "House [id=" + id + ", name=" + name + ", detail=" + detail + "]"; } }
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>租房網 - 登錄?</title> </head> <body> <form action="login.action" method="post"> <label for="user_name">用戶名</label><input type="text" id="user_name" name="userName" /> <label for="password">密碼</label><input type="password" id="password" name="password" /> <input type="submit" value="登錄?" /> </form> </body> </html>
include.jsp:
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <%@ page import="java.util.List" %> <%@ page import="houserenter.entity.House" %> <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>租房網</title> </head> <body> <h1>你好,${param.userName}!歡迎來到租房網! <a href="login.html">退出</a></h1> <br><br>
houses.jsp:
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <%@ include file="include.jsp"%> <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %> <h6>共找到你感興趣的房源 ${mockHouses.size()} 條</h6> <ul> <c:forEach var="house" items="${mockHouses}"> <li><h2><a href="house-details.action?userName=${param.userName}&houseId=${house.id}">${house.name}</a></h2></li> </c:forEach> </ul> </body> </html>
house-details.jsp:
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <%@ include file="include.jsp"%> <h2>${target.name}<a href="house-form.action?userName=${param.userName}&houseId=${target.id}">編輯</a></h2> <h3>${target.detail}</h3> <h4><a href="houses.action?userName=${param.userName}">回到列表</a></h4> </body> </html>
house-form.jsp:
數據信息資料采集:網站租房信息數據資料爬取二手房網頁爬蟲
-------------
數據采集滿足多種業務場景:適合產品、運營、銷售、數據分析、政府機關、電商從業者、學術研究等多種身份職業。
輿情監控:全方位監測公開信息,搶先獲取輿論趨勢。
市場分析:獲取用戶真實行為數據,全面把握顧客真實需求。
產品研發:強力支撐用戶調研,準確獲取用戶反饋和偏好。
風險預測:高效信息采集和數據清洗,及時應對系統風險。
助您在數據中快速挖掘新客戶;透視競爭對手的業務數據,分析客戶行為拓展新業務,精準營銷降低風險和預算。
對大量消費者提供產品或服務的企業可以利用大數據進行精準營銷;
做小而美模式的中小微企業可以利用大數據做服務轉型;
面臨互聯網壓力之下必須轉型的傳統企業需要與時俱進充分利用大數據的價值。
------------
全網統一自媒體號:大數據信息資料采集
歡迎關注。
-----------------------------
以下文字可忽略
確定需求-尋找房源信息-聯系房東(或委托房屋中介)-看房-定房-簽合同
租房正規過程
1、雙方簽訂租賃合同.
2、房主查看房客身份證,(可向公安局確認身份證).并索取復印件做為合同附件.
3、房客查看房主產權證明(可向當地房地產交易所進行確認),房主身份證(可向公安局確認身份證.)及兩證的統一(即產權證的產權人與身份證相同).
4、合同簽字(房主方)與產權證的產權人相同.如不相同需有產權人的代理委托書.
5、辦理合租合同時,需有房主方的同意出租(或同意轉租)證明.
6、定房的時候如果房主要求支付定金,也需要請查看以上證件,一般定金不要超過租房合同總金額的20% .
發布版本:房軟企業版5.01.30版
▍系統版本:企業版
▍發布時間:2023年01月30日(周一)
▍更新時間:22:00開始維護
▍PC前臺網頁:
二手房
【優化】列表-界面美化
【新增】列表-降價房源最新10條
【優化】詳情-界面美化
【新增】詳情-顯示房源漲跌價格
【新增】詳情-預約帶看
成交房源
【新增】新增成交列表,詳細成交價格,需要登錄
【新增】新增成交詳情,詳細成交價格,需要登錄
新房
【優化】列表-界面美化
【新增】詳情-預約帶看
租房
【優化】列表-界面美化
【優化】詳情-界面美化
【新增】詳情-預約帶看
商業辦公
【優化】界面美化
【新增】新增廠房列表
小區
【優化】列表-界面美化
【優化】詳情-界面美化
經紀人
【優化】列表-界面美化
門店
【優化】列表-界面美化
百科
【優化】列表-界面美化
問答
【優化】列表-界面美化
?▍圖片參考:
*請認真填寫需求信息,我們會在24小時內與您取得聯系。