未加星标

基于注解的实现SpringMVC+MySQL

字体大小 | |
[数据库(mysql) 所属分类 数据库(mysql) | 发布者 店小二04 | 时间 2017 | 作者 红领巾 ] 0人收藏点击收藏

目录结构:

SprinigMVC是什么 SpringMVC工作原理 @Controller和@RequestMapping注解 @Controller注解类型 @RequestMapping注解类型 基于注解的SpringMVC+mysql 参考文章 SpringMVC是什么

MVC的全称是Model View Controller,通过实现MVC框架可以很好的数据、视图、业务逻辑进行分离。Spring MVC也是一种MVC框架,它是SpringFrameWork的后续产品,同样需要Spring的Jar包才能运行起来。

SpringMVC工作原理

SpringMVC是一个基于DispatcherServlet的MVC框架,每一个请求最先访问的就是DispatcherServlet,DispathcerServlet负责将每一个request转发到相应的Controller,Controller处理后再返回模型(Model)和视图(View)。在使用注解的SpringMVC中,处理器Controller是基于@Controller和@RequestMapping进行注解的。


基于注解的实现SpringMVC+MySQL
@Controller和@RequestMapping注解 @Controller注解类型

声明一个控制器类,DispatcherServlet会通过扫描机制找到该类,如下是一个@Controller的例子。

package com.example.controller;
import org.springframework.stereotype.Controller;
@Controller
public class ProductController {
}

为了保证DispatcherServlet能够扫描到该Controller,需要在DispatcherServlet中配置注解驱动和上下文扫描包。

上下文扫描包:

……
xmlns:context=http://www.springframework.org/schema/context
……

注解驱动包:

……
xmlns:mvc=http://www.springframework.org/schema/mvc
……

然后应用<mvc:annotation-driven>和<context:component-scan/>元素:

...... <mvc:annotation-driven></mvc:annotation-driven>
<context:component-scan base-package=""></context:component-scan> ...... @RequestMapping注解类型

该注解类型在控制器类的内部定义每一个动作相应的处理方法,一个采用@RequestMapping注释的方法将成为一个请求处理方法,并由调度程序在接收到对应的URL请求时调用,下面是一个RequestMapping注解方法的控制器类。

@Controller
public class ProductController {
@RequestMapping(value="/productInput")
public String inputProduct(){
//do something here
return "ProductForm";
}
}

使用requestMapping注解的value属性将URL映射到方法,在上面的例子中通过 http://localhost:8080/SpringMVC/productInput访问inputProduct方法。RquestMapping除了有value属性外,还有许多属性,比如method、consumes、header、path等等。例如当HTPP POST或PUT方法时才调用test()方法。

@RequestMapping(value="/order_process", method={RequestMethod.POST, RequestMethod.PUT})
public String test(){
//do something here
return "viewpage";
}

如果method属性只有一个HTTP方法值,则无需{},直接为method=RequestMethod.POST,如果未指定method属性,则请求处理方法可以处理任意HTTP方法。此外RequestMapping注释类型也可以用来注释一个控制器类。

import org.springframework.stereotype.Controller;
...
@Controller
@RequestMapping(value="/customer")
public class CustomerController{
@RequestMapping(value="/delete", method={RequestMethod.POST, RequestMethod.PUT})
public String deleteCustomer(){
//do something here
return “viewpage”;
}
}

在这种情况下,所有的方法都将映射为相对于类级别的请求,如例子中的deleteCustomer方法,由于控制器类映射使用"/customer",而deleteCustomer方法映射为"/delete",则需要通过 http://localhost:8081/SpringMVC/customer/delete 访问。

基于注解的SpringMVC+MySQL 项目目录结构:
基于注解的实现SpringMVC+MySQL

login.jsp类


基于注解的实现SpringMVC+MySQL
1 <%@ page language="java" contentType="text/html; charset=utf-8"
2 pageEncoding="utf-8"%>
3 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
4 <html>
5 <head>
6 <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
7 <title>login</title>
8 </head>
9 <body>
10 <form action="select.do" method="post">
11 <input type="submit" value="查询所有信息"/>
12 </form>
13 </body>
14 </html>

第二步:

web.xml类


基于注解的实现SpringMVC+MySQL
1 <?xml version="1.0" encoding="UTF-8"?>
2 <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_3_1.xsd" id="WebApp_ID" version="3.1">
3 <display-name>mydb2</display-name>
4 <welcome-file-list>
5 <welcome-file>welcome.html</welcome-file>
6 </welcome-file-list>
7
8 <!-- 这里是一个总控制器 -->
9 <servlet>
10 <servlet-name>spring</servlet-name>
11 <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
12 </servlet>
13 <servlet-mapping>
14 <servlet-name>spring</servlet-name>
15 <url-pattern>*.do</url-pattern>
16 </servlet-mapping>
17
18 <!-- 解决POST提交乱码问题 -->
19 <filter>
20 <filter-name>EncodingName</filter-name>
21 <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
22 <init-param>
23 <param-name>encoding</param-name>
24 <param-value>utf-8</param-value>
25 </init-param>
26 </filter>
27 <filter-mapping>
28 <filter-name>EncodingName</filter-name>
29 <url-pattern>/*</url-pattern>
30 </filter-mapping>
31
32 </web-app>

spring-servlet.xml类


基于注解的实现SpringMVC+MySQL
1 <?xml version="1.0" encoding="UTF-8"?>
2 <beans xmlns="http://www.springframework.org/schema/beans"
3 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
4 xmlns:mvc="http://www.springframework.org/schema/mvc"
5 xmlns:context="http://www.springframework.org/schema/context"
6 xsi:schemaLocation="http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-4.3.xsd
7 http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
8 http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.3.xsd">
9
10
11 <mvc:annotation-driven/>
12
13 <context:component-scan base-package="com.spring"></context:component-scan>
14
15 <!-- 获取properties配置文件 -->
16 <bean id="config" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
17 <property name="locations">
18 <list>
19 <value>classpath:db-config.properties</value>
20 </list>
21 </property>
22 </bean>
23
24 <!-- 获取数据源 -->
25 <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource">
26 <property name="driverClassName">
27 <value>${db.dirverClass}</value>
28 </property>
29 <property name="url">
30 <value>${db.url}</value>
31 </property>
32 <property name="username">
33 <value>${db.username}</value>
34 </property>
35 <property name="password">
36 <value>${db.password}</value>
37 </property>
38 </bean>
39
40 <!--
41 给jdbc模板注入数据源
42 在JdbcTemplate里有一个对应的私有属性dataSource
43 -->
44 <bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">
45 <property name="dataSource" ref="dataSource"></property>
46 </bean>
47
48 <!--
49 给userDao(负责和数据库打交道)注入模板
50 在com.spring.db.UserDao里应该设有一个JdbcTemplate jdbcTemplate的私有属性,并且setter
51 -->
52 <bean id="userDao" class="com.spring.db.UserDao">
53 <property name="jdbcTemplate" ref="jdbcTemplate"></property>
54 </bean>
55
56 <!--定义视图 通过internalResourceView来表示 使用的是Servlet/jsp技术-->
57 <bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
58 <property name="viewClass">
59 <value>org.springframework.web.servlet.view.InternalResourceView</value>
60 </property>
61 <!--jsp存放的目录-->
62 <property name="prefix">
63 <value>/view/</value>
64 </property>
65 <!--jsp文件的后缀-->
66 <property name="suffix">
67 <value>.jsp</value>
68 </property>
69 </bean>
70 </beans>

db-config.properties类


基于注解的实现SpringMVC+MySQL
db.url=jdbc:mysql:///test?characterEncoding=utf8&useSSL=true&serverTimezone=GMT
db.username=root
db.password=root
db.dirverClass=com.mysql.cj.jdbc.Driver

这里的Driver和版本有关系,笔者的Connection/j 是6.0.5的。

UserVO.java类


基于注解的实现SpringMVC+MySQL
1 package com.spring.model;
2
3 public class UserVO {
4 private int id;
5 private String name;
6 private String pwd;
7
8 public int getId() {
9 return id;
10 }
11 public void setId(int id) {
12 this.id = id;
13 }
14 public String getName() {
15 return name;
16 }
17 public void setName(String name) {
18 this.name = name;
19 }
20 public String getPwd() {
21 return pwd;
22 }
23 public void setPwd(String pwd) {
24 this.pwd = pwd;
25 }
26 }

UserDao.java类


基于注解的实现SpringMVC+MySQL
1 package com.spring.db;
2
3 import java.sql.ResultSet;
4 import java.sql.SQLException;
5 import java.util.List;
6
7 import org.springframework.jdbc.core.JdbcTemplate;
8 import org.springframework.jdbc.core.RowMapper;
9
10 import com.spring.model.UserVO;
11
12 public class UserDao {
13 private JdbcTemplate jdbcTemplate;
14
15 public JdbcTemplate getJdbcTemplate() {
16 return jdbcTemplate;
17 }
18
19 public void setJdbcTemplate(JdbcTemplate jdbcTemplate) {
20 this.jdbcTemplate = jdbcTemplate;
21 }
22 @SuppressWarnings({ "unchecked", "rawtypes" })
23 public List<UserVO> find(){
24 String sql="select * from userbo";//这里也可以添加查询限制条件
25 return jdbcTemplate.query(sql, new RowMapper(){
26
27 public Object mapRow(ResultSet rs, int num) throws SQLException {
28 UserVO uservo=new UserVO();
29 uservo.setId(rs.getInt("USERID"));
30 uservo.setName(rs.getString("USERNAME"));
31 uservo.setPwd(rs.getString("USERPSW"));
32 return uservo;
33 }
34 });
35 }
36 }

这儿的jdbcTemplate不能用注解@Autowired来指定,因为在spring-servlet.xml文件中已经指定了扫描包为"com.spring",而jdbcTemplate的包为“org.springframework.jdbc.core.JdbcTemplate”,所以会扫描不到JdbcTemplate的。在spring-servlet.xml已经通过bean的方式,将数据源注入JDBC模板。

LoginController.java类


基于注解的实现SpringMVC+MySQL
1 package com.spring.controller;
2
3 import java.util.HashMap;
4 import java.util.List;
5 import java.util.Map;
6
7 import org.springframework.beans.factory.annotation.Autowired;
8 import org.springframework.stereotype.Controller;
9 import org.springframework.web.bind.annotation.RequestMapping;
10 import org.springframework.web.servlet.ModelAndView;
11 import com.spring.db.UserDao;
12 import com.spring.model.UserVO;
13
14 @Controller
15 public class LoginController {
16
17 @Autowired
18 private UserDao userDao;
19 @SuppressWarnings("unchecked")
20
21 @RequestMapping(value="/select.do")
22 public ModelAndView selectAll(){
23
24 @SuppressWarnings("rawtypes")
25 Map model=new HashMap();
26
27 List<UserVO> userVO=userDao.find();
28
29 model.put("uservo", userVO);
30
31 return new ModelAndView("userInfo",model);
32 }
33 }

@Autowired根据字面意思可以很快理解,就是自动配置。有@Autowired注解的变量,会按照扫描路径进行查找文件并且自动配置信息。如果把userDao的注解@Autowired注解注释掉,也可以通过bean来实现相同的效果,首先在LoginController类里把userDao进行setter,如:

public void setUserDao(UserDao userDao) {
this.userDao = userDao;
}

然后再在spring-servlet.xml里面添加如下bean信息:

<bean id="controller" class="com.spring.controller.LoginController">
<property name="userDao" ref="userDao"></property>
</bean>

userInfo.jsp类


基于注解的实现SpringMVC+MySQL
1 <%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
2 <[email protected] import="com.spring.model.UserVO"%>
3 <%
4 @SuppressWarnings("unchecked")
5 /*
6 *这儿是合法的,根据com.spring.db.controller.LoginController中handleRequest的返回数据类型进行设置的。
7 */
8 List<UserVO> str= (List<UserVO>)request.getAttribute("uservo");
9 %>
10
11 <html>
12 <head>
13 <title>result</title>
14 </head>
15
16 <body>
17 <table border="1">
18 <tr>
19 <td >编号</td>
20 <td >姓名</td>
21 <td >年龄</td>
22 </tr>
23 <%
24 for(UserVO user:str){
25 %>
26 <tr>
27 <td><%=user.getId() %></td>
28 <td><%=user.getName() %></td>
29 <td><%=user.getPwd() %></td>
30 </tr>
31 <%
32 }
33 %>
34 </table>
35 </body>
36 </html>

SpringMVC+MyBatis集成配置 http://www.linuxidc.com/Linux/2016-09/135212.htm

SpringMVC总结篇 http://www.codesec.net/Linux/2016-06/132659.htm

Spring+SpringMVC企业快速开发架构搭建 http://www.codesec.net/Linux/2015-09/122942.htm

SpringMVC的乱码处理 http://www.codesec.net/Linux/2015-07/120542.htm

Spring MVC+Spring3+Hibernate4开发环境搭建 http://www.codesec.net/Linux/2013-07/87119.htm

Spring MVC整合Freemarker基于注解方式 http://www.codesec.net/Linux/2013-02/79660.htm

基于注解的Spring MVC简单介绍 http://www.codesec.net/Linux/2012-02/54896.htm

SpringMVC详细示例实战教程 http://www.codesec.net/Linux/2015-06/118461.htm

SpringMVC错误页面配置 http://www.codesec.net/Linux/2016-12/138097.htm

SpringMVC 异常处理 http://www.codesec.net/Linux/2015-06/119049.htm

SpringMVC框架入门配置 IDEA下搭建Maven项目 http://www.codesec.net/Linux/2016-09/134918.htm

本文地址 : http://www.codesec.net/Linux/2017-01/139438.htm

本文数据库(mysql)相关术语:navicat for mysql mysql workbench mysql数据库 mysql 存储过程 mysql安装图解 mysql教程 mysql 管理工具

主题: SpringLinuxSQLMySQLXMLHibernateHTMLMyBatisERP数据
分页:12
转载请注明
本文标题:基于注解的实现SpringMVC+MySQL
本站链接:http://www.codesec.net/view/524078.html
分享请点击:


1.凡CodeSecTeam转载的文章,均出自其它媒体或其他官网介绍,目的在于传递更多的信息,并不代表本站赞同其观点和其真实性负责;
2.转载的文章仅代表原创作者观点,与本站无关。其原创性以及文中陈述文字和内容未经本站证实,本站对该文以及其中全部或者部分内容、文字的真实性、完整性、及时性,不作出任何保证或承若;
3.如本站转载稿涉及版权等问题,请作者及时联系本站,我们会及时处理。
登录后可拥有收藏文章、关注作者等权限...
技术大类 技术大类 | 数据库(mysql) | 评论(0) | 阅读(136)