solr测试项目(上)--基于maven的springmvc环境搭建

从去年9月21开始写博客,今天整一年了。

从开始写文章到现在,写过spring的,springmvc的,spring与其他框架整合的(包括hibernate,ehcache,shiro),写过一些工具类,写过微信公众号开发,写过前端的一些小demo,虽然一直在用mybatis却一直没写。

今天写一个比较全面的测试项目,包括maven,spring,springmvc,solr,mongodb的,一是强哥安排的Solr任务,二是学习与整理。

这篇文章更像是一个详细的基于maven的springmvc环境搭建


Solr测试项目

maven创建javaee开发环境

mvn archetype:generate -DgroupId=com.gwc -DartifactId=learn -DarchetypeArtifactId=maven-archetype-webapp -DarchetypeCatalog=internal

创建过程中需要确认版本和报名,输入回车,属于Y即可

这里写图片描述

参考

Maven创建项目时出现Generating project in Interactive mode就一直卡住的解决方案

创建好之后结构如下

这里写图片描述

默认的webapp版本为2.3。

这里写图片描述

web.xml

<!DOCTYPE web-app PUBLIC
 "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
 "http://java.sun.com/dtd/web-app_2_3.dtd" >

<web-app>
  <display-name>Archetype Created Web Application</display-name>
</web-app>

如果想换更高的版本可以直接修改web.xml这里我使用3.0

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_3_0.xsd"
    id="WebApp_ID" version="3.0">

</web-app>

参考

Eclipse建立webapp3.0以上的Maven项目

创建好之后我们导入到eclipse中

导入项目并修改

File->Import->Maven->Existing Maven Projects

这里写图片描述

这里写图片描述

新导入的项目有个报错

The superclass "javax.servlet.http.HttpServlet" was not found on the Java Build Path

这里写图片描述

该报错是由于没有引入jsp和servlet的依赖而导致的

引入依赖,因为后面会用jstl,所以一并引入

<!-- servlet -->
<dependency>
    <groupId>javax.servlet</groupId>
    <artifactId>javax.servlet-api</artifactId>
    <scope>provided</scope>
    <version>3.1.0</version>
</dependency>
<dependency>
    <groupId>javax.servlet</groupId>
    <artifactId>jsp-api</artifactId>
    <scope>provided</scope>
    <version>2.0</version>
</dependency>
<dependency>
    <groupId>jstl</groupId>
    <artifactId>jstl</artifactId>
    <version>1.2</version>
</dependency>
<dependency>
    <groupId>taglibs</groupId>
    <artifactId>standard</artifactId>
    <version>1.1.2</version>
</dependency>

引入之后项目报错就消失了。

命名行创建的maven项目中并没有为我们创建相应的java和test目录(我的电脑上一直不创建,不知道为什么,如果已经创建了就不需要再创建)

这里写图片描述

在src下新建一个test目录,test目录和main目录在一级
在main下面新建java目录,在test下新建java目录
建好目录之后项目看着有点怪怪的。

这里写图片描述

我们在项目了上右键->Refresh

这里写图片描述

项目结构就好了。

这里写图片描述

参考

Maven的安装和配置
Eclipse建立webapp3.0以上的Maven项目
Maven中关于serlvet和jstl的引用

spring环境配置与相关依赖配置

项目结构配置好之后我们开始配置spring和其他依赖

spring

由于spring模块很多,这里采用spring官方文档推荐的BOM统一管理spring的版本。引入spring-framework-bom只有后面所有依赖的spring都无需指明版本,和spring-framework-bom 一个版本。

BOM

<dependencyManagement>
    <dependencies>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-framework-bom</artifactId>
            <version>4.2.5.RELEASE</version>
            <type>pom</type>
            <scope>import</scope>
        </dependency>
    </dependencies>
</dependencyManagement>

spring依赖

<!-- spring依赖 -->
<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-aop</artifactId>
</dependency>
<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-aspects</artifactId>
</dependency>
<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-beans</artifactId>
</dependency>
<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-context</artifactId>
</dependency>
<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-context-support</artifactId>
</dependency>
<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-core</artifactId>
    <exclusions>
        <exclusion>
            <groupId>commons-logging</groupId>
            <artifactId>commons-logging</artifactId>
        </exclusion>
    </exclusions>
</dependency>
<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-expression</artifactId>
</dependency>
<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-orm</artifactId>
</dependency>
<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-jdbc</artifactId>
</dependency>
<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-tx</artifactId>
</dependency>
<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-web</artifactId>
</dependency>
<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-webmvc</artifactId>
</dependency>
<!-- spring依赖的第三方 -->
<dependency>
    <groupId>commons-fileupload</groupId>
    <artifactId>commons-fileupload</artifactId>
    <version>1.3.1</version>
</dependency>
<dependency>
    <groupId>commons-io</groupId>
    <artifactId>commons-io</artifactId>
    <version>2.5</version>
</dependency>

单元测试

自动生成的junit版本有点低。

改为如下(当前为4.12版)
为了整合spring进行测试引入spring-test

<!-- 单元测试 -->
<dependency>
    <groupId>junit</groupId>
    <artifactId>junit</artifactId>
    <version>4.12</version>
    <scope>test</scope>
</dependency>
<!-- 整合spring测试 -->
<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-test</artifactId>
    <scope>test</scope>
</dependency>

日志记录,json和发送http请求

<!-- 日志记录 -->
<dependency>
    <groupId>org.slf4j</groupId>
    <artifactId>slf4j-log4j12</artifactId>
    <version>1.7.21</version>
</dependency>
<!-- json需要 -->
<dependency>
    <groupId>com.google.code.gson</groupId>
    <artifactId>gson</artifactId>
    <version>2.6.2</version>
</dependency>
<dependency>
    <groupId>org.json</groupId>
    <artifactId>json</artifactId>
    <version>20160810</version>
</dependency>
<!-- 发送http请求 -->
<dependency>
    <groupId>org.apache.httpcomponents</groupId>
    <artifactId>httpclient</artifactId>
    <version>4.5.2</version>
</dependency>
<dependency>
    <groupId>org.apache.httpcomponents</groupId>
    <artifactId>httpmime</artifactId>
    <version>4.5.2</version>
</dependency>

依赖配置之后我们导入配置文件

日志log4j.properties

放在src/main/resources目录下

#------------------------------------------------------------------------------------
# 日志输出级别
#------------------------------------------------------------------------------------
log4j.rootLogger=info, stdout, info_log, error_log

#------------------------------------------------------------------------------------
# 输出到控制台
#------------------------------------------------------------------------------------
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.Target=System.out
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss:SSS} %p [%M] %c %L %m%n
#log4j.appender.stdout.layout=org.apache.log4j.TTCCLayout

#------------------------------------------------------------------------------------
# info_log
#------------------------------------------------------------------------------------
log4j.appender.info_log=org.apache.log4j.DailyRollingFileAppender
log4j.appender.info_log.File=/usr/logs/learn/info.log
log4j.appender.info_log.Append=true
log4j.appender.info_log.Threshold=INFO
log4j.appender.info_log.layout=org.apache.log4j.PatternLayout
log4j.appender.info_log.DatePattern='.'yyyy-MM-dd
log4j.appender.info_log.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss:SSS} %p [%M] %c %L %m%n

#------------------------------------------------------------------------------------
# error_log
#------------------------------------------------------------------------------------
log4j.appender.error_log=org.apache.log4j.DailyRollingFileAppender
log4j.appender.error_log.File=/usr/logs/learn/error.log
log4j.appender.error_log.Append=true
log4j.appender.error_log.Threshold=ERROR
log4j.appender.error_log.layout=org.apache.log4j.PatternLayout
log4j.appender.error_log.DatePattern='.'yyyy-MM-dd
log4j.appender.error_log.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss:SSS} %p [%M] %c %L %m%n

#------------------------------------------------------------------------------------
# 我的配置
#------------------------------------------------------------------------------------
log4j.logger.org.springframework=info

测试一下日志

package test;

import org.junit.Test;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

public class HelloTest {
    private Logger logger = LoggerFactory.getLogger(this.getClass());

    @Test
    public void test() {
        logger.info("info:{}", "info");
        logger.error("error:{}", "error");
    }

}

执行之后我们发现日志已经生效

这里写图片描述

并且error会单独输出到error.log

来配置spring

首先在src/main/resources目录下创建一个spring的目录,该目录中存放各种spring的配置,总体结构如下

这里写图片描述

先把项目的包结构建立起来

com.gwc.learn.controller放conttroller
com.gwc.learn.service放service
com.gwc.learn.dao放dao
com.gwc.learn.timer放定时任务
com.gwc.learn.util放一些工具类

先建一个spring-mvc.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"
    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">

    <mvc:annotation-driven/>

    <!-- 只扫描Controller,不扫描Service -->
    <context:component-scan base-package="com.gwc.learn">
        <context:include-filter type="annotation"
            expression="org.springframework.stereotype.Controller" />
        <context:exclude-filter type="annotation"
            expression="org.springframework.stereotype.Service" />
    </context:component-scan>
    <!-- 静态资源 -->
    <mvc:resources location="/assets/" mapping="/assets/**"></mvc:resources>
    <!-- jsp视图解析器 -->
    <bean id="viewResolver"
        class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <property name="viewClass"
            value="org.springframework.web.servlet.view.JstlView" />
        <property name="prefix" value="/WEB-INF/views/" />
        <property name="suffix" value=".jsp" />
    </bean>
</beans>

再建一个spring-core.xml这个配置文件主要是导入一些其他的spring配置,比如数据库,定时任务,主要是为了将spring的配置分开,暂时没有导入,后面配置mongo数据在导入

<?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:tx="http://www.springframework.org/schema/tx"
    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/tx
        http://www.springframework.org/schema/tx/spring-tx.xsd">

    <context:component-scan base-package="com.gwc.learn" />

</beans>

然后配置web.xml

这里有一个上下文的spring-core.xml,其他配置都会被import进来,这样当配置文件比较大的时候看着清晰,配置起来方便。

<display-name>solr测试项目</display-name>
<!-- 加载spring上下文 -->
<context-param>
    <param-name>contextConfigLocation</param-name>
    <param-value>classpath:spring/spring-core.xml</param-value>
</context-param>
<listener>
    <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<!-- 统一编码 -->
<filter>
    <filter-name>charsetEncoding</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>
    <init-param>
        <param-name>forceEncoding</param-name>
        <param-value>true</param-value>
    </init-param>
</filter>
<filter-mapping>
    <filter-name>charsetEncoding</filter-name>
    <url-pattern>/*</url-pattern>
</filter-mapping>
<!-- SpringMVC的配置 -->
<servlet>
    <servlet-name>springmvc</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    <init-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>classpath:spring/spring-mvc.xml</param-value>
    </init-param>
    <load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
    <servlet-name>springmvc</servlet-name>
    <url-pattern>/</url-pattern>
</servlet-mapping>

写一个controller和jsp视图
com.gwc.learn.controller包下的HelloController.java

package com.gwc.learn.controller;

import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;

@Controller
@RequestMapping("/solr")
public class HelloController {

    @RequestMapping(value="/hello",method=RequestMethod.GET)
    public String hello(Model model){
        model.addAttribute("msg", "你好springMVC");
        return "hello";
    }
}

WEB-INF/views下的hello.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>我是标题</title>
</head>
<body>
${msg }
</body>
</html>

好了,发布到tomcat

访问
http://localhost:8080/learn/solr/hello

这里写图片描述

Springmvc环境搭建完毕。

参考

一个简单的SpringMVC需要哪些jar包[Spring4]

再写就有点长了,下一篇写整合mongodb和solrj

参考文献

  1. Maven创建项目时出现Generating project in Interactive mode就一直卡住的解决方案
  2. Eclipse建立webapp3.0以上的Maven项目
  3. Maven的安装和配置
  4. Eclipse建立webapp3.0以上的Maven项目
  5. Maven中关于serlvet和jstl的引用
  6. 一个简单的SpringMVC需要哪些jar包[Spring4]
已标记关键词 清除标记
相关推荐
©️2020 CSDN 皮肤主题: 酷酷鲨 设计师:CSDN官方博客 返回首页