程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> JAVA綜合教程 >> 【Spring】基於注解的實現SpringMVC+MySQL,springspringmvc

【Spring】基於注解的實現SpringMVC+MySQL,springspringmvc

編輯:JAVA綜合教程

【Spring】基於注解的實現SpringMVC+MySQL,springspringmvc


目錄結構:

contents structure [-]
  • 基於注解的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進行注解的。

    @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

    項目目錄結構: 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> login.jsp

    第二步:

    web.xml類

    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> web.xml

    spring-servlet.xml類

    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> spring-servlet.xml

    db-config.properties類

    db.url=jdbc:mysql:///test?characterEncoding=utf8&useSSL=true&serverTimezone=GMT db.username=root db.password=root db.dirverClass=com.mysql.cj.jdbc.Driver db-config.properties

    這裡的Driver和版本有關系,筆者的Connection/j 是6.0.5的。

    UserVO.java類

    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 } UserVO.java

    UserDao.java類

    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 } UserDao.java

    這兒的jdbcTemplate不能用注解@Autowired來指定,因為在spring-servlet.xml文件中已經指定了掃描包為"com.spring",而jdbcTemplate的包為“org.springframework.jdbc.core.JdbcTemplate”,所以會掃描不到JdbcTemplate的。在spring-servlet.xml已經通過bean的方式,將數據源注入JDBC模板。

    LoginController.java類

    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 } LoginController.java

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

    1 <%@ page language="java" import="java.util.*" pageEncoding="utf-8"%> 2 <%@page 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> userInfo.jsp

    參考文章

    http://www.cnblogs.com/zhanglei93/p/6264796.html

    1. 上一頁:
    2. 下一頁:
    Copyright © 程式師世界 All Rights Reserved