美文网首页
springMVC环境搭建

springMVC环境搭建

作者: 水煮鱼又失败了 | 来源:发表于2020-08-05 20:23 被阅读0次

1 场景

本文主要用来搭建ssm环境中的spring、springMvc的部分。

1.1 版本说明

jdk版本:1.8

spring版本:5.2.2.RELEASE

1.2 代码地址

https://github.com/yjhcpdd/mymvc

1.3 项目结构

--java
--resources
    --conf
        -spring.xml*********[1]
        -spring-mvc.xml*****[2]
    --properties
        -system.properties**[3]
--webapp
    --css
    --img
    --js
    --jsp
    --WEB-INF
        -web.xml************[4]

java外层包路径为:com.demo.cs

2 搭建步骤

2.1 配置maven依赖

pom.xml中配置相关依赖包:

<properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <maven.compiler.source>1.8</maven.compiler.source>
    <maven.compiler.target>1.8</maven.compiler.target>
    <spring.version>5.2.2.RELEASE</spring.version>
    <jackson.databind.version>2.11.0</jackson.databind.version>
</properties>

<dependencies>
    <!-- ==========【Web相关】========== -->
    <dependency>
        <groupId>javax.servlet</groupId>
        <artifactId>javax.servlet-api</artifactId>
        <version>3.1.0</version>
        <scope>provided</scope>
    </dependency>
    <dependency>
        <groupId>javax.servlet</groupId>
        <artifactId>jsp-api</artifactId>
        <version>2.0</version>
        <scope>provided</scope>
    </dependency>
    <dependency>
        <groupId>javax.servlet</groupId>
        <artifactId>jstl</artifactId>
        <version>1.2</version>
    </dependency>

    <!-- ==========【spring、springMvc相关】========== -->
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-context</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-web</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-test</artifactId>
        <version>${spring.version}</version>
    </dependency>
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-jdbc</artifactId>
        <version>${spring.version}</version>
    </dependency>
    <!-- SpringMVC会自动添加Jackson的转换器,支持@ResponseBody将对象转换成json,jackson的版本需与springMvc的版本进行对应 -->
    <dependency>
        <groupId>com.fasterxml.jackson.core</groupId>
        <artifactId>jackson-databind</artifactId>
        <version>${jackson.databind.version}</version>
    </dependency>
    <!-- ascpectJ支持aop -->
    <dependency>
        <groupId>org.aspectj</groupId>
        <artifactId>aspectjweaver</artifactId>
        <version>1.9.6</version>
    </dependency>
    
    <!-- ==========【单元测试】========== -->
    <dependency>
        <groupId>junit</groupId>
        <artifactId>junit</artifactId>
        <version>4.13</version>
        <scope>test</scope>
    </dependency>

    <!-- ==========【文件上传】========== -->
    <dependency>
        <groupId>commons-fileupload</groupId>
        <artifactId>commons-fileupload</artifactId>
        <version>1.4</version>
    </dependency>

    <!-- ==========【工具类】========== -->
    <dependency>
        <groupId>org.apache.commons</groupId>
        <artifactId>commons-lang3</artifactId>
        <version>3.10</version>
    </dependency>
    <dependency>
        <groupId>org.projectlombok</groupId>
        <artifactId>lombok</artifactId>
        <version>1.18.12</version>
        <scope>provided</scope>
    </dependency>
</dependencies>

2.2 配置程序入口

web.xml[4]配置spring和springMVC的程序入口。

<!-- ============【spring配置】============ -->
<context-param>
    <param-name>contextConfigLocation</param-name>
    <param-value>
        classpath:conf/spring.xml
    </param-value>
</context-param>
<listener>
    <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>

<!-- ============【springMvc配置】============ -->
<!-- spring编码过滤器(防止“post提交”、“上传文件文件名”中文乱码) -->
<filter>
    <filter-name>characterEncodingFilter</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>characterEncodingFilter</filter-name>
    <url-pattern>/*</url-pattern>
</filter-mapping>
<!-- springMVC核心servlet -->
<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:conf/spring-mvc.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>

2.3 spring配置

spring.xml[1]用来配置spring。

<!-- 通过扫描器实现bean的自动载入(只扫描非Controller注解,防止ContextLoaderListener扫描的事务失效) -->
<context:component-scan base-package="com.demo.cs">
    <context:exclude-filter type="annotation" expression="org.springframework.stereotype.Controller"/>
</context:component-scan>

<!-- 引入配置文件 -->
<context:property-placeholder location="classpath:properties/system.properties" />

<!-- 使用cglib动态代理(默认为JDK动态代理,只可代理接口实现) -->
<aop:aspectj-autoproxy proxy-target-class="true" />

2.4 springmvc配置

spring-mvc.xml[2]用来配置springMVC。

<!-- 通过扫描器实现bean的自动载入(只扫描Controller注解,防止ContextLoaderListener扫描的事务失效)
     use-default-filters="false"需和include-filter配合使用,否则默认仍然会扫描所有注解-->
<context:component-scan base-package="com.demo.cs" use-default-filters="false">
    <context:include-filter type="annotation" expression="org.springframework.stereotype.Controller"/>
</context:component-scan>

<!-- 开启注解驱动模式。默认注册RequestMappingHandlerMapping,RequestMappingHandlerAdapter,ExceptionHandlerExceptionResolver
        以支持@RequestMapping,@ExceptionHandler以及其他注解的控制器方法的请求处理。-->
<mvc:annotation-driven/>

<!--当一个请求找不到处理器时将会把它交给容器本身处理(tomcat)-->
<mvc:default-servlet-handler/>

<!--配置静态资源访问路径。 -->
<mvc:resources mapping="/css/**" location="/css/" />
<mvc:resources mapping="/img/**" location="/img/" />
<mvc:resources mapping="/js/**" location="/js/" />

<!-- 视图解析器 -->
<bean id="internalResourceViewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
    <!-- 前缀 -->
    <property name="prefix" value="/jsp/"/>
    <!-- 后缀 -->
    <property name="suffix" value=".jsp"/>
</bean>

<!-- 支持文件上传(bean的id需配置成"multipartResolver") -->
<bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver" >
    <!--上传文件的最大大小,单位为字节 -->
    <property name="maxUploadSize" value="1073741824"></property>
    <!-- 上传文件的编码 -->
    <property name="defaultEncoding" value="UTF-8"></property>
</bean>

3 代码示例

实体类:

@Data
public class TempUser {
    private String userName;
    private Integer age;   
}

3.1 controller定义

@Controller
@RequestMapping("tempUser")
public class TempUserController {
    ......
}

3.1 加载页面

@RequestMapping("init")
public ModelAndView init(TempUser form){
    ModelAndView modelAndView=new ModelAndView("template/user/user_list");
    modelAndView.addObject("xxx",xxx);
    return modelAndView;
}

3.2 执行业务操作

@ResponseBody
@RequestMapping("doBusniess")
public Object doBusiness(TempUser form){
    //doBusiness......
    Map<String,Object> resultMap=new HashMap<>();
    resultMap.put("success",true);
    resultMap.put("xxx",xxx);
    return resultMap;
}

3.3 接收json

@ResponseBody
@RequestMapping("doJsonBusiness")
public Object doJsonBusiness(@RequestBody TempUser tempUser){
    //doBusiness......
    Map<String,Object> resultMap=new HashMap<>();
    resultMap.put("success",true);
    resultMap.put("xxx",xxx);
    return resultMap;
}

3.4 上传文件

@ResponseBody
@RequestMapping("doUploadFile")
public Object doUploadFile(HttpServletRequest request,TempUser form) throws IOException {
    MultipartHttpServletRequest multipartHttpServletRequest = (MultipartHttpServletRequest) request;
    //获取文件信息
    MultipartFile multipartFile = multipartHttpServletRequest.getFile("file");
    //文件名:multipartFile.getOriginalFilename()
    //文件是否存在:multipartFile.isEmpty()
    //文件字节大小:multipartFile.getSize()
    //获取文件字节数组:multipartFile.getBytes()
    //获取文件输入流:multipartFile.getInputStream()
    //拷贝文件:multipartFile.transferTo(...);
    
    Map<String,Object> resultMap=new HashMap<>();
    resultMap.put("success",true);
    resultMap.put("xxx",xxx);
    return resultMap;
}

3.5 下载文件

@ResponseBody
@RequestMapping("doDownloadFile")
public void doDownloadFile(HttpServletRequest request,HttpServletResponse response){
    File file=new File("D:\\Elasticsearch权威指南(中文版).pdf");
    String fileName=file.getName();
    //-----------------开始下载文件-------------
    try(ServletOutputStream out=response.getOutputStream();
        FileInputStream input=new FileInputStream(file);
       ) {
        response.reset();
        response.setContentType("application/octet-stream; charset=utf-8");
        //防止文件名中文乱码
        fileName=URLEncoder.encode(fileName,"UTF-8");
        String agent=request.getHeader("User-Agent");
        if(StringUtils.isNotEmpty(agent)&&agent.toUpperCase().indexOf("MSIE")<0){
            ///其他浏览器
            response.setHeader("Content-Disposition","attachment; filename*=utf-8'zh_cn'"+fileName);
        }else{
            ///IE浏览器(6,7,8,9)
            response.setHeader("Content-Disposition","attachment; filename="+fileName);
        }
        //全部拷贝
        //out.write(FileUtils.readFileToByteArray(file));
        //缓存拷贝
        IOUtils.copyLarge(input,out,new byte[1024]);
        out.flush();
    }catch (Exception e){
        e.printStackTrace();
    }
}

4 其他代码

4.1 jquery发送ajax请求

发送json形式的请求

$.ajax({
    type: "POST",
    url:"<%=basePath%>/tempUser/doJsonBusiness",
    //将JavaScript值转换为JSON字符串,使请求以json的形式传输到后台
    data: JSON.stringify({"userName":"张三","age":18}),
    contentType: "application/json; charset=utf-8",
    dataType: "json",
    success: function (res) {
        alert(JSON.stringify(res));
    },
    error: function () {
        alert("通信异常,访问失败!");
    }
});

4.2 文件上传

建议动态创建from元素的形式,将下载事件绑定到按钮上(提单原始表单内按钮提交下载的形式),此种方式,更加灵活。

相关文章

网友评论

      本文标题:springMVC环境搭建

      本文链接:https://www.haomeiwen.com/subject/hehyrktx.html