- 配置好eclipse的所需环境,jdk,tomcat
- 新建一个动态网页 Dynamic Web Projec工程
- 在WebContent文件夹下的下创建要给index.jsp文件,然后启动项目,看是否启动成功。
- 开始搭建Spring mvc 框架 在WEB-INF文件夹下的lib文件夹中导入所需要的相关jar包,直接在官网下载SpringFramework的GA(发布)版本,然后将文件夹中的jar包导入以上目录中。此外还需要自己下载commons-logging,jstl和standard相关的jar包。并且也导入。
- 在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>
- 在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>-->
- 然后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> <a
href="deleteTest.do?id=${test.id }">删除</a></td>
</tr>
</c:forEach>
</table>
</body>
</html>
最后在浏览器中调用,测试是否成功。可以看到,最终成功了。