使用idea构建一个简单的SpringMVC+MySql项目

目录

一、创建项目

二、创建配置文件

1、创建配置文件 

2、创建项目文件

三、配置idea的Project Structure

1.第一步: 配置Project

2.第二步:配置Modules 

3.第三步:配置 Facets 

4.第四步: 配置 Artifacts,

四、配置文件

1、web.xml 配置

2、applicationContext.xml配置

3、context-dispatcher.xml配置

4、然后是 context.xml

5、Java类,jsp、js

6、数据库 

五、配置Tomcat

六、启动服务,验证


一、创建项目

在创建项目时要注意,在idea中一个Project对应 eclipse中一个工作区间 working space,而Module  才是一个工程,不然新建Project又要重新切换部署了,所以这里我们新建 Module

在eclipse中我们都是创建一个Dynamic Web Project,对应在idea中创建一个 Java EE Web Application

注意不要勾选下图中 Spring MVC 选项,此选项是使用Maven部署了。

创建成功后目录:

二、创建配置文件

1、创建配置文件 :

      在WEB-INF目录下面新建 lib目录,将Jar复制过来。这里使用的Spring4.0,还有其他一些 http ,fastjson,commons, apach的一些jar; 在src目录下创建applicationContext.xml,context-dispatcher.xml,

2、创建项目文件:

    创建java package,com.spm.action,com.spm.domain, com.spm.service, com.spm.util,分别创建Java后台 UserController, User,  UserService ,util等java类,最后创建一些前端页面文件index.jsp, login.jsp, main.jsp, main/login.js, main/main.js, 还有jquery包,放在main/目录下。(META-INF不需要创建,一会配置的时候会自动生成)项目整体结构如下图:

三、配置idea的Project Structure

          配置Project Structure,这个是idea的配置,在这里指定编译jdk、引入要依赖的Jar,Tomcat 等。Module位置相当于eclipse中编译后 .class文件位置。

选中项目点击右上角 Project Structure 按钮:如图

1.第一步: 配置Project

配置此工作空间(idea的Project ,spm项目相当于一个Module)的编译环境,选择jdk1.8

2.第二步:配置Modules 

在Modules中有三个选卡Sources、Paths、Dependencies。Sources不需要修改。先配置Paths,Paths中设置的是module编译后文件路径,最好放在当前项目目录下,如下图。

  

然后配置Dependencies,Dependencies里面你会发现 是依赖jar目录,首先jdk已经有了 ,不需要你配置,点击左下角的+,依次添加JARs or directiors (添加 lib里面的jar ),Library (Tomcat)。如下图:

3.第三步:配置 Facets 

这一步是配置生成 META-INF/context.xml ,在context.xml中配置数据库连接 Source, 如下图:

4、第四步: 配置 Artifacts,

这一步主要是设置 Output directory:如下图:

最后点击OK保存即可。如果 Artifacts不存在可以点击 + ,根据Module 去生成,这里可以新增Web Application: Exploded, 会生成一个spm_war_exploded文件夹相当于项目编译后的文件夹(war包在tomcat webapps中被解压后的项目文件) ,也可以新增Web Application:Archive ,这是生成war包。

四、配置文件

1、web.xml 配置

    主要是一些常规配置如下:

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" id="WebApp_ID" version="2.5">
    <display-name>spm</display-name>
    <welcome-file-list>
        <welcome-file>index.jsp</welcome-file>
    </welcome-file-list>

    <listener>
        <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
    </listener>
    <context-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>
            classpath:applicationContext.xml
        </param-value>
    </context-param>
    <filter>
        <filter-name>encodingFilter</filter-name>
        <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
        <init-param>
            <param-name>encoding</param-name>
            <param-value>UTF-8</param-value>
        </init-param>
    </filter>
    <filter-mapping>
        <filter-name>encodingFilter</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>

    <servlet>
        <servlet-name>spring</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
        <init-param>
            <param-name>contextConfigLocation</param-name>
            <param-value>classpath:context-dispatcher.xml</param-value>
        </init-param>
        <load-on-startup>1</load-on-startup>
    </servlet>

    <servlet-mapping>
        <servlet-name>spring</servlet-name>
        <url-pattern>/</url-pattern>
    </servlet-mapping>
    <servlet-mapping>
        <servlet-name>default</servlet-name>
        <url-pattern>*.css</url-pattern>
    </servlet-mapping>
    <servlet-mapping>
        <servlet-name>default</servlet-name>
        <url-pattern>*.html</url-pattern>
    </servlet-mapping>
    <servlet-mapping>
        <servlet-name>default</servlet-name>
        <url-pattern>*.js</url-pattern>
    </servlet-mapping>
    <servlet-mapping>
        <servlet-name>default</servlet-name>
        <url-pattern>*.png</url-pattern>
    </servlet-mapping>
    <servlet-mapping>
        <servlet-name>default</servlet-name>
        <url-pattern>*.gif</url-pattern>
    </servlet-mapping>
    <servlet-mapping>
        <servlet-name>default</servlet-name>
        <url-pattern>*.map</url-pattern>
    </servlet-mapping>
    <servlet-mapping>
        <servlet-name>default</servlet-name>
        <url-pattern>*.eot</url-pattern>
    </servlet-mapping>
    <servlet-mapping>
        <servlet-name>default</servlet-name>
        <url-pattern>*.svg</url-pattern>
    </servlet-mapping>
    <servlet-mapping>
        <servlet-name>default</servlet-name>
        <url-pattern>*.ttf</url-pattern>
    </servlet-mapping>
    <servlet-mapping>
        <servlet-name>default</servlet-name>
        <url-pattern>*.woff</url-pattern>
    </servlet-mapping>
    <servlet-mapping>
        <servlet-name>default</servlet-name>
        <url-pattern>*.woff2</url-pattern>
    </servlet-mapping>
    <!--提供移动端接口获取文件Zip下载,下载后删除 -->
    <servlet-mapping>
        <servlet-name>default</servlet-name>
        <url-pattern>*.jpg</url-pattern>
    </servlet-mapping>
    <servlet-mapping>
        <servlet-name>default</servlet-name>
        <url-pattern>*.zip</url-pattern>
    </servlet-mapping>

    <!-- session time in 1440 mins 2019/06-->
    <session-config>
        <session-timeout>1440</session-timeout>
    </session-config>

</web-app>

2、applicationContext.xml配置

   applicationContext.xml配置包括spring的约束,java包的扫描,数据库jndi的配置,如下:

<?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:aop="http://www.springframework.org/schema/aop"
       xmlns:context="http://www.springframework.org/schema/context"
       xmlns:task="http://www.springframework.org/schema/task"
       xmlns:mvc="http://www.springframework.org/schema/mvc"
       xmlns:tx="http://www.springframework.org/schema/tx"
       xmlns:jee="http://www.springframework.org/schema/jee"
       xsi:schemaLocation=" http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-4.0.xsd
		http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.0.xsd
		http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-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/task
		http://www.springframework.org/schema/task/spring-task-4.0.xsd
		http://www.springframework.org/schema/jee
		http://www.springframework.org/schema/jee/spring-jee-4.0.xsd
				">
    <context:component-scan base-package="com.spm" />
    <mvc:annotation-driven />
    <context:annotation-config />
    <context:component-scan base-package="com.spm.util"/>

    <bean class="org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor"/>
    <!-- Database -->
    <jee:jndi-lookup id="dataSource"
                     jndi-name="jdbc/AppService"
                     cache="true"
                     resource-ref="true"
                     lookup-on-startup="false"
                     proxy-interface="javax.sql.DataSource"/>
    <bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">
        <property name="dataSource" ref="dataSource"/>
    </bean>
    <!-- enable the configuration of transactional behavior based on annotations -->
    <tx:annotation-driven transaction-manager="transactionManager"/>
    <!-- a PlatformTransactionManager is still required -->
    <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
        <property name="dataSource" ref="dataSource"/>
    </bean>

    <bean class="org.springframework.web.multipart.commons.CommonsMultipartResolver" id="multipartResolver">
        <property name="maxUploadSize" value="38000000" /><!-- 上传最大文件限制 -->
        <property name="maxInMemorySize" value="4096" /><!-- 读取文件到内存中的最大字节数,默认1024字节 -->
        <property name="defaultEncoding" value="utf-8" />
    </bean>
</beans>

3、context-dispatcher.xml配置

<?xml version="1.0" encoding="UTF-8"?>
<beans default-lazy-init="true"
       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-4.0.xsd
       http://www.springframework.org/schema/mvc
       http://www.springframework.org/schema/mvc/spring-mvc-4.0.xsd
       http://www.springframework.org/schema/context
       http://www.springframework.org/schema/context/spring-context-4.0.xsd"
       default-autowire="byName">
    <!-- 使用注解的包,包括子集 -->
    <context:component-scan base-package="com.spm.action">
        <context:include-filter type="annotation"
                                expression="org.springframework.web.bind.annotation.ControllerAdvice" />
    </context:component-scan>
    <!-- 通过注解,把URL映射到Controller上,该标签默认注册DefaultAnnotationHandlerMapping和AnnotationMethodHandlerAdapter -->
    <!-- <mvc:annotation-driven/> -->
    <!-- json配置,需要导入fastjson包 采用的spring4.0版本 -->
    <mvc:annotation-driven>
        <mvc:message-converters register-defaults="true">
            <bean id="fastJsonHttpMessageConverter"
                  class="com.alibaba.fastjson.support.spring.FastJsonHttpMessageConverter">
                <property name="supportedMediaTypes">
                    <list>
                        <value>application/json;charset=UTF-8</value>
                    </list>
                </property>
            </bean>
        </mvc:message-converters>
    </mvc:annotation-driven>

    <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <property name="viewClass" value="org.springframework.web.servlet.view.JstlView" />
        <property name="prefix" value="/WEB-INF/pages/"></property>
        <property name="suffix" value=".jsp"></property>
    </bean>
</beans>

4、然后是 context.xml

     这里context.xml配置是配置数据库的地址、账号、密码等。如果项目在tomcat中运行 也可以直接在Tomcat的 ..conf/context.xml中配置 一个Resource ,这里我们已经在Facets里面添加了,这里就在项目中配置即可。注意<Resource..../> 里面name 要和 applicationContext.xml 中 <jeez: jndi-loopup...>中的jndi名字一致。

5、Java类,jsp、js

UserController.java

package com.spm.action;

import com.spm.domain.BaseResp;
import com.spm.domain.User;
import com.spm.service.UserService;
import com.spm.util.Utils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;

@Controller
@RequestMapping("/user")
public class UserController {
    @Autowired
    UserService userService;

    @Autowired(required = true)
    private HttpServletRequest request;

    @RequestMapping("/login")
    @ResponseBody
    public BaseResp login(String userId, String pwd, @ModelAttribute("clientIpAddress") String clientIpAddress)
    {
        try {
            System.out.println("userId : "+userId +"pwd : " + pwd);
            // 校验用户名,密码,检验码,设置最后登陆时间和IP地址
            HttpSession session = request.getSession();
            User user = this.userService.checkLogin(userId, pwd);
            System.out.println(user);
            if (Utils.isBlank(user)) {
                // 记录日志
                return BaseResp.getFailInstance("Account or Password error, please check your account.");
            }
            // 获取岗位等其他信息
            session.setAttribute("user", user);
//            session.setAttribute("emp", emp);
//            session.setAttribute("orgName", orgName);
//            session.setAttribute("rndNum", userId + sDate);
            session.setAttribute("clientIpAddress", clientIpAddress);
            // 记录日志

            return BaseResp.getSuccessInstance(user);
        } catch (Exception e) {
            e.printStackTrace();
            return BaseResp.getFailInstance();
        }

    }
}

BaseResp.java

package com.spm.domain;

public class BaseResp {

    public final static Integer HTTP_OK = 200;
    public final static String MESSAGE_OK = "SUCCESS";

    public final static Integer HTTP_ERROR_500 = 500;
    public final static String MESSAGE_ERROR = "The system error, please wait.";

    public final static Integer HTTP_ERROR_501 = 501;

    private Integer retCode;
    private String message;
    private Object data;

    public BaseResp() { }

    public BaseResp(int retCode, String message, Object data) {
        this.retCode = retCode;
        this.message = message;
        this.data = data;
    }

    public static BaseResp getSuccessInstance() {
        return new BaseResp(HTTP_OK, MESSAGE_OK, null);
    }

    public static BaseResp getSuccessInstance(Object data) {
        return new BaseResp(HTTP_OK, MESSAGE_OK, data);
    }

    // 系统异常
    public static BaseResp getFailInstance() {
        return new BaseResp(HTTP_ERROR_500, MESSAGE_ERROR, null);
    }

    //  业务异常
    public static BaseResp getFailInstance(String errorMsg) {
        return new BaseResp(HTTP_ERROR_501, errorMsg, null);
    }

    public Integer getRetCode() {
        return retCode;
    }

    public void setRetCode(Integer retCode) {
        this.retCode = retCode;
    }

    public String getMessage() {
        return message;
    }

    public void setMessage(String message) {
        this.message = message;
    }

    public Object getData() {
        return data;
    }

    public void setData(Object data) {
        this.data = data;
    }
}

User.java 

package com.spm.domain;

public class User {


        private String userId;
        private String password;
        private String status;

        public String getUserId() {
        return userId;
    }

        public void setUserId(String userId) {
        this.userId = userId;
    }

        public String getPassword() {
        return password;
    }

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

        public String getStatus() {
        return status;
    }

        public void setStatus(String status) {
        this.status = status;
    }

    @Override
    public String toString() {
        return "User{" +
                "userId='" + userId + '\'' +
                ", password='" + password + '\'' +
                ", status='" + status + '\'' +
                '}';
    }
}

UserService.java 

package com.spm.service;

import com.spm.domain.User;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.dao.EmptyResultDataAccessException;
import org.springframework.jdbc.core.BeanPropertyRowMapper;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.stereotype.Service;

import javax.sql.DataSource;

@Service
public class UserService {

    @Autowired
    private JdbcTemplate jdbcTemplate;

    @Autowired
    private void setDataSource(DataSource dataSource) {
        this.jdbcTemplate = new JdbcTemplate(dataSource);
    }

    public User checkLogin(String userId, String pwd) {
        try {
            String sql = "select * from T_USER where  userId=? and password=?";
            System.out.println("sql="+sql);
            final Object[] params = new Object[]{userId, pwd};
            return this.jdbcTemplate.queryForObject(sql, params, new BeanPropertyRowMapper<User>(User.class));
        } catch (EmptyResultDataAccessException e) {
            return null;
        }
    }
}

 

index.jsp 

<%@ page language="java" contentType="text/html; charset=GB18030"
         pageEncoding="GB18030"%>
<!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=GB18030">
    <title>Insert title here</title>
</head>
<body>
<%
    response.setStatus(HttpServletResponse.SC_MOVED_PERMANENTLY);
    response.setHeader("Location",request.getContextPath()+"/login.jsp");
%>
</body>
</html>

login.jsp 

<%@ page contentType="text/html;charset=UTF-8" language="java" %>

<html xmlns="http://www.w3.org/1999/xhtml">
<head>
    <meta charset="utf-8">
</head>
<body>
<div style="margin-left: 40%;"><span> spm console</span></div>
</br>
</br>

<div >
    <div id="loginform" >
        <form >
            <div >
                <div style="margin-left: 40%;">
                    <input id="username" name="" type="text" placeholder="账户" >
                </div>
            </div>
            <div >
                <div style="margin-left: 40%;">
                    <input id="password" name="" type="password" placeholder="密码" >
                </div>
            </div>

            <div>
                <div style="margin-left: 40%">
                    <button style="margin-left: 10px;" οnclick="submitForm()">&nbsp;登&nbsp;&nbsp;&nbsp;&nbsp;录&nbsp;</button>
                    <button type="reset">&nbsp;取&nbsp;&nbsp;&nbsp;&nbsp;消&nbsp;</button>
                </div>
            </div>
        </form>
    </div>
</div>
<script src="main/jquery/jquery.js"></script>
<script src="main/login.js"></script>

</body>
</html>

main.jsp 

<%@ page contentType="text/html;charset=UTF-8" language="java" import="java.util.*,com.spm.domain.*"%>

<html xmlns="http://www.w3.org/1999/xhtml">
<head>
    <meta charset="utf-8">
</head>
<body>
<div class="header"><span class="login-title">spm main console</span></div>

</body>
</html>

login.js

function submitForm(){
    var username = $("#username").val();
    var pwd = $("#password").val();
    if(!username || username=="" || !pwd || ""==pwd){
        swal("", "用户名/密码不能为空!", "error");
        return;
    }
    var newEmpData ={
        userId: username,
        pwd: pwd
    };
    $.ajax({
        type : "POST",
        url : "user/login.json",
        data : newEmpData,
        success : function(data) {
            var ret = data;
            if(data.retCode&&data.retCode ==200 ){
                window.location.href = 'main.jsp';
            }else{
                alert(data.message);
            }
        },
        error : function() {
            alert("服务器异常,请稍后再试!");
        }
    })

}

6、数据库 

创建myfb数据库,创建了 t_user表

CREATE TABLE `t_user` (
  `userId` varchar(50) NOT NULL,
  `userName` varchar(255) DEFAULT NULL,
  `password` varchar(255) DEFAULT NULL,
  `lastLoginIp` varchar(255) DEFAULT NULL,
  `lastLoginTime` timestamp NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  `status` varchar(255) DEFAULT NULL,
  PRIMARY KEY (`userId`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

五、配置Tomcat

六、启动服务,验证

最后:启动tomcat在浏览器输入 :http://localhost:8080/spm/

点击登陆,后调用 login接口:查询数据库,日志如下图

然后返回查询结果,成功后跳转到main.jsp 页面。 

也可以通过postman验证接口:

发布了49 篇原创文章 · 获赞 19 · 访问量 3万+

猜你喜欢

转载自blog.csdn.net/shenju2011/article/details/103250717
今日推荐