使用IntelliJ IDEA和Maven管理搭建Web開發環境(以Spring MVC為例)(二)


前言:在使用IntelliJ IDEA和Maven管理搭建Web開發環境(以Spring MVC為例)(一)中已經介紹了如何對web基礎環境進行搭建,這里主要演示,如何對spring環境進行搭建,然后組合成一個完整的spring MVC Web項目。


Spring環境的搭建

1.通過Maven可以輕松的配置,spring環境,具體pom文件如下所示

<!--設置版本信息-->
    <properties>
        <file.encoding>UTF-8</file.encoding>
        <spring.version>4.2.1.RELEASE</spring.version>
        <mysql.version>5.1.20</mysql.version>
        <servlet.version>2.5</servlet.version>
        <commons-dbcp.version>1.4</commons-dbcp.version>
        <commons-pool.version>1.4</commons-pool.version>
        <aspectj.version>1.8.1</aspectj.version>
    </properties>
    <!--定義依賴-->
    <dependencies>
        <!--spring相關依賴-->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-core</artifactId>
            <version>${spring.version}</version>
        </dependency>

        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-beans</artifactId>
            <version>${spring.version}</version>
        </dependency>

        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-context</artifactId>
            <version>${spring.version}</version>
        </dependency>

        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-context-support</artifactId>
            <version>${spring.version}</version>
        </dependency>

        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-jdbc</artifactId>
            <version>${spring.version}</version>
        </dependency>

        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-tx</artifactId>
            <version>${spring.version}</version>
        </dependency>

        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-webmvc</artifactId>
            <version>${spring.version}</version>
        </dependency>

        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-web</artifactId>
            <version>${spring.version}</version>
        </dependency>
        <dependency>
            <groupId>org.aspectj</groupId>
            <artifactId>aspectjweaver</artifactId>
            <version>${aspectj.version}</version>
        </dependency>
        <!-- 數據庫驅動依賴-->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>${mysql.version}</version>
        </dependency>

        <!-- 連接池依賴-->
        <dependency>
            <groupId>commons-dbcp</groupId>
            <artifactId>commons-dbcp</artifactId>
            <version>${commons-dbcp.version}</version>
        </dependency>
        <dependency>
            <groupId>commons-pool</groupId>
            <artifactId>commons-pool</artifactId>
            <version>${commons-pool.version}</version>
        </dependency>
        <!-- web類庫依賴-->
        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>servlet-api</artifactId>
            <version>${servlet.version}</version>
            <scope>provided</scope>
        </dependency>
        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>jstl</artifactId>
            <version>1.2</version>
        </dependency>

        <!-- 日志依賴-->
        <dependency>
            <groupId>log4j</groupId>
            <artifactId>log4j</artifactId>
            <version>1.2.17</version>
        </dependency>
    </dependencies>

    <build>

        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-surefire-plugin</artifactId>
                <version>2.17</version>
                <configuration>
                    <parallel>methods</parallel>
                    <threadCount>10</threadCount>
                </configuration>

            </plugin>

        </plugins>

    </build>
View Code

注:pom文件中除了spring所需jar包,還對數據庫驅動等相關信息,進行了依賴配置。

2.在Resource目錄下創建spring配置文件,如下圖所示

3.由於需演示一個相對完整的Spring MVC Web項目,因此建立如下所示的目錄結構

注:這里主要演示一個登錄界面,當登錄成功后,進入主界面(為了簡單這里就不演示日志操作了)。因此接下來需要創建一個數據庫。

4.創建數據庫

DROP DATABASE IF EXISTS springtestdb;
CREATE DATABASE springtestdb DEFAULT CHARACTER SET utf8;
USE springtestdb;
##建表
CREATE TABLE `t_user` (
  `user_id` int(11) NOT NULL auto_increment,
  `user_name` varchar(30) default NULL,
  `password` varchar(32) default NULL,
    PRIMARY KEY  (`user_id`)
) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8

##插入初始化數據
INSERT INTO t_user (user_name,password) 
             VALUES('admin','123456');
COMMIT;
View Code

5.編寫相應代碼

User:

public class User implements Serializable
{
    private int userid;
    private String username;
    private String password;

    public int getUserid()
    {
        return userid;
    }

    public void setUserid(int userid)
    {
        this.userid = userid;
    }

    public String getUsername()
    {
        return username;
    }

    public void setUsername(String username)
    {
        this.username = username;
    }

    public String getPassword()
    {
        return password;
    }

    public void setPassword(String password)
    {
        this.password = password;
    }

    @Override
    public String toString()
    {
        return "User[" +
                "userid=" + userid +
                ", username='" + username + '\'' +
                ", password='" + password + '\'' +
                ']';
    }
}
View Code

UserDao:

@Repository("userDao")
public class UserDao
{
    private static Logger logger = Logger.getLogger(UserDao.class);
    //如果直接使用注解進行屬性的修飾,可以不用set函數
    @Resource(name = "jdbcTemplate")
    private JdbcTemplate jdbcTemplate;

    /**
     * 獲取匹配用戶的個數
     * @param username
     * @param password
     * @return
     */
    public int getMatchCount(String username, String password)
    {
        String querysql = "select count(*) from t_user where user_name=? and password=?";

        int rows = jdbcTemplate.queryForObject(querysql, Integer.class, username, password);

        logger.info("rows=" + rows);
        return rows;
    }
}
View Code

UserService:

@Transactional
@Service("userService")
public class UserService
{
    //直接通過在屬性上進行配置注入,就可以不用寫set方法了
    @Resource(name = "userDao")
    private UserDao userDao;

    @Resource(name="loginlogDao")
    private LoginLogDao loginLogDao;

    /**
     * 判斷用戶名與密碼是否正確
     * @param useranme
     * @param password
     * @return
     */
    public boolean hasMatchUser(String useranme,String password)
    {
        int matchcount=userDao.getMatchCount(useranme,password);
        return matchcount>0;
    }
}
View Code

 LoginController:

@Controller("loginController")
public class LoginController
{
    private static Logger logger=Logger.getLogger(LoginController.class);

    @Resource(name = "userService")
    private UserService userService;

    @RequestMapping(value = "/index.html") //默認會 訪問index.html頁面
    public String loginPage()
    {
        return "login";
    }

    @RequestMapping(value = "/loginCheck.html")
    public ModelAndView loginCheck(HttpServletRequest request, LoginCommand loginCommand)
    {
        String username=loginCommand.getUsername();
        String password=loginCommand.getPassword();
        boolean isvaliduser = userService.hasMatchUser(username, password);

        if (!isvaliduser)
        {
            return new ModelAndView("login", "error", "用戶名或密碼錯誤");
        }
        else
        {
            logger.info("username="+username+" password="+password);
          
        request.getSession().setAttribute("user", user);
        return new ModelAndView("main");
            
        }

    }

}
View Code

LoginCommand:

public class LoginCommand
{
    private String username;
    private String password;

    public String getUsername()
    {
        return username;
    }

    public void setUsername(String username)
    {
        this.username = username;
    }

    public String getPassword()
    {
        return password;
    }

    public void setPassword(String password)
    {
        this.password = password;
    }
}
View Code

login.jsp:

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
<html>
    <head>
        <title>測試</title>
    </head>
    <body>
        <c:if test="${!empty error}">
            <font color="red"><c:out value="${error}" /></font>
        </c:if>        
        <form action="<c:url value="/loginCheck.html"/>" method="post">
            用戶名:
            <input type="text" name="username">
            <br>
            密 碼:
            <input type="password" name="password">
            <br>
            <input type="submit" value="登錄" />
            <input type="reset" value="重置" />
        </form>
    </body>
</html>
View Code

main.jsp:

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>測試</title>
</head>
<body>
    ${user.username},歡迎您!
</body>
</html>
View Code

6.進行相應配置

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:p="http://www.springframework.org/schema/p"
       xmlns:context="http://www.springframework.org/schema/context"
       xmlns:aop="http://www.springframework.org/schema/aop"
       xmlns:tx="http://www.springframework.org/schema/tx"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
       http://www.springframework.org/schema/beans/spring-beans-4.0.xsd
       http://www.springframework.org/schema/context
       http://www.springframework.org/schema/context/spring-context-4.0.xsd
       http://www.springframework.org/schema/tx
       http://www.springframework.org/schema/tx/spring-tx-4.0.xsd
       http://www.springframework.org/schema/aop
       http://www.springframework.org/schema/aop/spring-aop-4.0.xsd">
    <!-- 開啟注解-->
    <context:component-scan base-package="com.springlearning"/>

    <!-- 配置數據源-->
    <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource"
          destroy-method="close"
          p:driverClassName="com.mysql.jdbc.Driver"
          p:url="jdbc:mysql://localhost:3307/springtestdb"
          p:username="root"
          p:password=""/>

    <!-- 配置jdbcTemplate-->
    <bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate"
          p:dataSource-ref="dataSource"/>

    <!-- 配置jdbc事務管理器-->
    <bean id="txManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
        <!-- 注入數據源 -->
        <property name="dataSource" ref="dataSource"/>
    </bean>

    <aop:config proxy-target-class="true">
        <aop:pointcut id="serviceMethod"
                      expression="(execution(* com.springlearning.service..*(..)))" />
        <aop:advisor pointcut-ref="serviceMethod" advice-ref="txAdvice" />
    </aop:config>
    <tx:advice id="txAdvice" transaction-manager="txManager">
        <tx:attributes>
            <tx:method name="*" />
        </tx:attributes>
    </tx:advice>

</beans>
View Code

web.xml配置:

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://java.sun.com/xml/ns/javaee"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
         http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
         version="2.5" id="webapp_id">
   <!--配置監聽器 --> <!--以便在服務器啟動的時候,加載spring配置文件-->
    <listener>
        <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
    </listener>
    <!--配置spring配置文件-->
    <context-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>classpath:spring/springconfig.xml</param-value>
    </context-param>

    <servlet>
        <servlet-name>learning</servlet-name>
        <servlet-class>
           org.springframework.web.servlet.DispatcherServlet
        </servlet-class>
        <load-on-startup>3</load-on-startup>
    </servlet>
    <servlet-mapping>
        <servlet-name>learning</servlet-name>
        <url-pattern>*.html</url-pattern>
    </servlet-mapping>
    
    <welcome-file-list>
        <welcome-file>index.html</welcome-file> <!--這里配置的默認頁面和LoginController中對應名稱需要一致-->
    </welcome-file-list>
    
</web-app>
View Code

learning-servlet.xml配置:

<?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:p="http://www.springframework.org/schema/p"
       xmlns:context="http://www.springframework.org/schema/context"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
       http://www.springframework.org/schema/beans/spring-beans-4.0.xsd
       http://www.springframework.org/schema/context
       http://www.springframework.org/schema/context/spring-context-4.0.xsd">

    <!-- 開啟web包的spring注解-->
    <context:component-scan base-package="com.springlearning.web"/>

    <!-- 配置視圖解析器,將ModelAndView及字符串解析為具體的頁面 -->
    <bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver"
          p:viewClass="org.springframework.web.servlet.view.JstlView"
          p:prefix="/WEB-INF/jsp/"
          p:suffix=".jsp"/>

</beans>
View Code

至此,編寫和配置完所有文件,下面進行發布(不要忘記Put into Output Root,具體步驟請參看看上一篇文章)。當正確輸入用戶名和密碼后,效果如下:

至此通過IDEA與Maven搭建Spring MVC Web項目成功。


by Shawn Chen,2018.1.11日,下午。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM