您的位置 首页 java

Java Web轻松学54 – 租房网应用完整代码

本系列文章旨在记录和总结自己在Java Web开发之路上的知识点、经验、问题和思考,希望能帮助更多(Java)码农和想成为(Java)码农的人。 

目录

  1. 介绍
  2. 工程结构
  3. POM文件
  4. Web部署描述符 – web.xml
  5. Spring IoC配置元数据 – dispatcher.xml
  6. Java代码 – 控制器层
  7. Java代码 – 服务层
  8. Java代码 – 实体类
  9. 静态页面 – login.html
  10. JSP 页面

介绍

本篇文章给出截止到 之时,租房网应用的完整代码。

工程结构

POM文件

<project xmlns="#34; xmlns:xsi="#34; xsi:schemaLocation=" #34;>
 <modelVersion>4.0.0</modelVersion>
 <groupId>house-renter</groupId>
 <artifactId>house-renter</artifactId>
 <version>0.0.1-SNAPSHOT</version>
 <packaging>war</packaging>
 <dependencies>
 <!--  -->
<dependency>
 <groupId>org.springframework</groupId>
 <artifactId>spring-context</artifactId>
 <version>5.2.1.RELEASE</version>
</dependency>
<!--  -->
<dependency>
 <groupId>org.springframework</groupId>
 <artifactId>spring-webmvc</artifactId>
 <version>5.2.1.RELEASE</version>
</dependency>
<!--  -->
<dependency>
 <groupId>org.apache.taglibs</groupId>
 <artifactId>taglibs-standard-impl</artifactId>
 <version>1.2.5</version>
</dependency>
<!--  -->
<dependency>
 <groupId>org.apache.taglibs</groupId>
 <artifactId>taglibs-standard-spec</artifactId>
 <version>1.2.5</version>
</dependency>
<!--  -->
<dependency>
 <groupId>com.h2database</groupId>
 <artifactId>h2</artifactId>
 <version>1.4.200</version>
</dependency>
<!--  -->
<dependency>
 <groupId>org.springframework</groupId>
 <artifactId>spring-jdbc</artifactId>
 <version>5.2.1.RELEASE</version>
</dependency>
<!--  -->
<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> 

Web部署描述符 – web.xml

主要是用来配置 Spring MVC 的 DispatcherServlet 。

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="#34;
xmlns="#34;
xsi:schemaLocation=" #34;
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> 

Spring IoC配置元数据 – dispatcher.xml

主要用来开启组件扫描、配置DataSource和JdbcTemplate这两个Bean。

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="#34;
xmlns:context="#34;
xmlns:xsi="#34;
xsi:schemaLocation=" 
 

#34;>

<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> 

Java代码 – 控制器层

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;
}
} 

Java代码 – 服务层

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"));
}

}
} 

Java代码 – 实体类

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 + "]";
}
}
 

静态页面 – login.html

<!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> 

JSP页面

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="#34; 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:

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ include file="include.jsp"%>
<form action="house-form.action" method="post">
<input type="hidden" name="userName" value="${param.userName}"/>
<input type="hidden" name="id" value="${target.id}"/>
<label for="house_name">房源名字:</label><input type="text" id="house_name" name="name" value="${target.name}" />
<label for="house_detail">房源详细信息:</label><input type="text" id="house_detail" name="detail" value="${target.detail}" />
<input type="submit" value="提交" />
</form>
</body>
</html> 

文章来源:智云一二三科技

文章标题:Java Web轻松学54 – 租房网应用完整代码

文章地址:https://www.zhihuclub.com/193331.shtml

关于作者: 智云科技

热门文章

网站地图