系列文章旨在记录和总结自己在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小时内与您取得联系。