eclipse从零开始搭建spring mvc 并实现简单的指定页面访问和数据查询

14 篇文章 0 订阅
14 篇文章 0 订阅
  1. 配置好eclipse的所需环境,jdk,tomcat
  2. 新建一个动态网页 Dynamic Web Projec工程
  3. 在WebContent文件夹下的下创建要给index.jsp文件,然后启动项目,看是否启动成功。
  4. 开始搭建Spring mvc 框架 在WEB-INF文件夹下的lib文件夹中导入所需要的相关jar包,直接在官网下载SpringFramework的GA(发布)版本,然后将文件夹中的jar包导入以上目录中。此外还需要自己下载commons-logging,jstl和standard相关的jar包。并且也导入。
    在这里插入图片描述
  5. 在src目录下新建config目录,并在目录下新建applicationContext.xml (spring规定)注意这里的文件夹和文件名都时固定的不可修改。并在配置文件中先填入以下代码
    在这里插入图片描述
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xmlns:context="http://www.springframework.org/schema/context"
	xmlns:aop="http://www.springframework.org/schema/aop"
	xsi:schemaLocation="http://www.springframework.org/schema/beans
        http://www.springframework.org/schema/beans/spring-beans.xsd
        http://www.springframework.org/schema/context
        http://www.springframework.org/schema/context/spring-context.xsd
        http://www.springframework.org/schema/aop
        http://www.springframework.org/schema/aop/spring-aop.xsd">

	<!-- 开启Spring全文注解功能识别的标签 -->
	<context:annotation-config />
	<!-- base-package指定包扫描路径及其以下所有子包 -->
	<context:component-scan base-package="com.guoqi" />
</beans>
  1. 在config目录下再新建一个springmvc.xml文件,这里是用于springmvc使用。并在配置文件中配置扫描功能和视图解析器,如果前后端分离的方式则不用设置视图解析器。
    在这里插入图片描述
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xmlns:context="http://www.springframework.org/schema/context"
	xmlns:mvc="http://www.springframework.org/schema/mvc"
	xsi:schemaLocation="http://www.springframework.org/schema/beans
        http://www.springframework.org/schema/beans/spring-beans.xsd
        http://www.springframework.org/schema/context
        http://www.springframework.org/schema/context/spring-context.xsd
        http://www.springframework.org/schema/mvc
        http://www.springframework.org/schema/mvc/spring-mvc.xsd">

	<!-- control层的注解扫描路径 -->
	<context:component-scan
		base-package="com.guoqi.control" />
	<!-- 开启SpringMVC的注解功能 -->
	<mvc:annotation-driven />

	<!-- 设置加载内部视图解析器,如果前后端分离则不用此项 
	<bean
		class="org.springframework.web.servlet.view.InternalResourceViewResolver">
		<!-- 配置视图解析的前缀 -->
		<property name="prefix" value="/WEB-INF/jsp/" />
		<!-- 配置视图解析的后缀 -->
		<property name="suffix" value=".jsp" />
	</bean>
</beans>-->
  1. 然后src下新建包,并且再新建一个测试用的controller,并在测试用的controller中写入以下内容: (在写入以下内容时侯注意导入相应包)

在这里插入图片描述

package com.guoqi.control; 
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
@Controller
public class TestController {

	@RequestMapping("/hello")
	public String hello() {
		System.out.println("Hello SpringMVC!");
		return null;
	}
}	

在web.xml文件中进行以下配置以设置前端控制器,拦截前端请求和设置视图解析的核心配置

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xmlns="http://xmlns.jcp.org/xml/ns/javaee"
	xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
	id="WebApp_ID" version="4.0">
	<display-name>RuanTong0305</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>
	<context-param>
		<!-- 加载配置spring变量 -->
		<param-name>contextConfigLocation</param-name>
		<param-value>classpath:*applicationContext.xml</param-value>
	</context-param>
	<!-- 加载spring的监听器 -->
	<listener>
		<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
	</listener>
	<!-- 配置前端控制器的核心配置, 使用视图层必要配置 -->
	<servlet>
		<servlet-name>DispatcherServlet</servlet-name>
		<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
		<!-- 配置初始化参数,从springmvc.xml中加载参数 -->
		<init-param>
			<param-name>contextConfigLocation</param-name>
			<param-value>classpath:*springmvc.xml</param-value>
		</init-param>
	</servlet>

	<!-- 设置拦截发往主机的所有.do请求 -->
	<servlet-mapping>
		<servlet-name>DispatcherServlet</servlet-name>
		<url-pattern>*.do</url-pattern>
	</servlet-mapping>
</web-app>

设置完后保存然后启动项目,通过地址栏http://localhost:8080/RuanTong0304/hello.do访问到指定的controller,这里页面会显示404,因为我们在hello控制器写的返回内容为null,所以显示404。但是控制台已经输出我们的内容,说明我们写的代码没有问题。
在这里插入图片描述
在这里插入图片描述
现在设置一个可以跳转的页面的controller中的方法。在刚才的controller中添加一个新方法。这点新代码表示当请求index.do时候,返回一个视图,视图为index.jsp
在这里插入图片描述

@RequestMapping("/index")
	public String index() {
		System.out.println("Hello indexJSP!");
		return "index.jsp";
	}

然后通过浏览器输入http://localhost:8080/RuanTong0304/index.do访问到当前的方法,并且成功跳转到index.jsp页面中。同时注意,项目中WEB-INF下的页面都是外部不能访问的(地址栏输入内容无法访问),只能通过内部调用才可以访问。
在这里插入图片描述
下一步要和数据库进行连接,新建一个实体类。
在这里插入图片描述

package com.guoqi.bean;

public class Test {
	private int id;
	private float sum;

	public int getId() {
		return id;
	}

	public void setId(int id) {
		this.id = id;
	}

	public float getSum() {
		return sum;
	}

	public void setSum(float sum) {
		this.sum = sum;
	}

	@Override
	public String toString() {
		return "Test [id=" + id + ", sum=" + sum + "]";
	}

}

再新建一个实体类对应的DAO类,申明访问数据的方法
在这里插入图片描述

package com.guoqi.dao;

import java.util.List;

import com.guoqi.bean.Test;

public interface TestDAO { 
	
	// 添加
	public int insert(Test test); 
	// 删除
	public int delete(int id); 
	// 修改
	public int update(Test test); 
	// 根据ID获取指定数据
	public Test getTestById(int id); 
	// 查询所有
	public List<Test> selectAll();

}

再新建一个数据库连接工具类
在这里插入图片描述

package com.guoqi.util;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;

public class DBHelper {

	private static String DIRVER = "com.mysql.jdbc.Driver"; 
	private static String URL = "jdbc:mysql://localhost:3306/test"; 
	private static String USERNAME = "root"; 
	private static String PASSWORD = "1234";

	/**
	 * 获取连接
	 * 
	 * @return
	 */
	public static Connection getConnection() {
		Connection conn = null;
		try {
			Class.forName(DIRVER);
			conn = DriverManager.getConnection(URL, USERNAME, PASSWORD);
		} catch (ClassNotFoundException e) {
			e.printStackTrace();
		} catch (SQLException e) {
			e.printStackTrace();
		}
		return conn;
	}

	/**
	 * 关闭连接
	 * 
	 * @param conn
	 */
	public static void close(Connection conn) {
		try {
			if (conn != null) {
				conn.close();
			}
		} catch (SQLException e) {
			e.printStackTrace();
		}
	}

	/**
	 * 添加、删除、修改
	 * 
	 * @param conn
	 * @param sql
	 * @param values
	 * @return
	 */
	public static int executeUpdate(Connection conn, String sql, Object... values) {
		int i = -1;
		try {
			PreparedStatement ps = conn.prepareStatement(sql);
			for (int index = 0; index < values.length; index++) {
				ps.setObject((index + 1), values[index]);
			}
			i = ps.executeUpdate();
		} catch (SQLException e) {
			e.printStackTrace();
		}
		return i;
	}

	/**
	 * 查询
	 * 
	 * @param conn
	 * @param sql
	 * @param values
	 * @return
	 */
	public static ResultSet executeQuery(Connection conn, String sql, Object... values) {
		ResultSet rs = null;
		try {
			PreparedStatement ps = conn.prepareStatement(sql);
			for (int index = 0; index < values.length; index++) {
				ps.setObject((index + 1), values[index]);
			}
			rs = ps.executeQuery();
		} catch (SQLException e) {
			e.printStackTrace();
		}
		return rs;
	}
}

再对DAO中申明的接口进行实现。在其中使用最普通方法进行对申明接口的实现。
在这里插入图片描述

package com.guoqi.dao.impl;

import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;

import org.springframework.stereotype.Repository;

import com.guoqi.bean.Test;
import com.guoqi.dao.TestDAO;
import com.guoqi.util.DBHelper;

@Repository("testDAO") // 等价于<bean id="testDAO" class="com.guoqi.dao.impl.TestDAOImpl" />
public class TestDAOImpl implements TestDAO {

	@Override
	public int insert(Test test) {
		Connection conn = DBHelper.getConnection();
		String sql = "insert into test(`sum`) values(?)";
		return DBHelper.executeUpdate(conn, sql, test.getSum());
	}

	@Override
	public int delete(int id) {
		Connection conn = DBHelper.getConnection();
		String sql = "delete from test where id = ?";
		return DBHelper.executeUpdate(conn, sql, id);
	}

	@Override
	public int update(Test test) {
		Connection conn = DBHelper.getConnection();
		String sql = "update test set `sum` = ? where `id` = ?";
		return DBHelper.executeUpdate(conn, sql, test.getSum(), test.getId());
	}

	@Override
	public List<Test> selectAll() {
		// 日志收集
		System.out.println("This is product selectAll");
		Connection conn = DBHelper.getConnection();
		String sql = "select * from test";
		List<Test> list = new ArrayList<Test>();
		ResultSet rs = DBHelper.executeQuery(conn, sql);
		try {
			while (rs.next()) {
				Test t = new Test();
				t.setId(rs.getInt(1));
				t.setSum(rs.getFloat(2));
				list.add(t);
			}
		} catch (SQLException e) {
			e.printStackTrace();
		}
		System.out.println("This is product selectAll END!!!");
		return list;
	}

	@Override
	public Test getTestById(int id) {
		Connection conn = DBHelper.getConnection();
		String sql = "select * from test where id = ?";
		ResultSet rs = DBHelper.executeQuery(conn, sql, id);
		Test t = null;
		try {
			if (rs.next()) {
				t = new Test();
				t.setId(rs.getInt(1));
				t.setSum(rs.getFloat(2));
			}
		} catch (SQLException e) {
			e.printStackTrace();
		}
		return t;
	}

}

在对web.xml进行配置,添加以下代码
在这里插入图片描述

  <!-- 配置上下文变量 -->
  <context-param>
  <!-- 将指定的上下文变量写入到指定的路径中 -->
		<param-name>contextConfigLocation</param-name>
		<param-value>classpath:*applicationContext.xml</param-value>
	</context-param>
	<!-- 加载监听器 -->
	<listener>
		<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
	</listener>

再对配置文件springmvc.xml进行配置,添加以下代码:
在这里插入图片描述

<!-- 设置加载内部视图解析器 -->
	<bean
		class="org.springframework.web.servlet.view.InternalResourceViewResolver">
		<property name="prefix" value="/WEB-INF/jsp/" />
		<property name="suffix" value=".jsp" />
	</bean>

还要对配置文件applicationContext.xml进行设置:
在这里插入图片描述

<!-- 开启Spring注解功能识别的标签 -->
	<context:annotation-config />
	<!-- 开启Spring mvc包扫描的功能 -->
	<!-- base-package指定包扫描路径及其以下所有子包 -->
	<context:component-scan
		base-package="com.guoqi" />

以上,总共对三个配置文件进行了修改。
最后在controller新建一个新的方法,此方法调用数据库进行查询。通过此类进行对数据库连接和操作。
在这里插入图片描述

@RequestMapping("/getAllTest")
public String getAllTest(Model model) {
	List<Test> list = testService.selectAll();
	model.addAttribute("list", list);
	return "testTable";
}

因为我们在这个新方法中返回的是一个视图,所以我们需要在WEB-INF文件夹下新建一个jsp文件夹,并且创建一个testTable.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>
</head>
<body>
	<table border="1" cellspacing="0" align="center">
		<tr>
			<th>id</th>
			<th>sum</th>
			<th>操作</th>
		</tr>
		<c:forEach items="${list }" var="test">
			<tr>
				<td>${test.id }</td>
				<td>${test.sum }</td>
				<td><a href="toUpdateTest.do?id=${test.id }">修改</a>&nbsp;<a
					href="deleteTest.do?id=${test.id }">删除</a></td>
			</tr>
		</c:forEach>
	</table>
</body>
</html>

最后在浏览器中调用,测试是否成功。可以看到,最终成功了。
在这里插入图片描述

  • 3
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值