美文网首页
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