美文网首页
SpringMVC系列(一)helloworld程序

SpringMVC系列(一)helloworld程序

作者: 探索的影子 | 来源:发表于2018-08-15 23:48 被阅读0次

    emmmmm,讲道理,搭建springmvc的环境特别麻烦。特别是我看的视频用的是eclipse,我用的是idea的局面下。
    这里贴上springmvc的学习视频。当然我学习的时候有自己的方法,我比较喜欢用自己曾经写过的系统,作为基础。然后,借新知识来重构自己的代码。虽然在才开始学的时候很难,因为代码不同,有的时候,设置出来的东西不一定对,所以还是需要掌握背后的原理才行。这样也能够更加容易理解。


    环境搭建

    我通过idea来创建maven工程,然后加入springmvc的相关包。相关创建方法:用idea创建springmvc项目

    创建的包结果.png

    对于教程里面创建环境需要注意的问题
    1 有些创建出来的没有resource和java文件夹,当然普通的文件夹也是没有用的。
    解决方法:创建普通的文件夹,然后右键


    image.png

    从上往下分别是:

    • 源码根目录
    • 测试代码根目录
    • 资源文件根目录

    如果你不设置的话,你的classpath是会报错的,或者找不到文件。

    创建springmvc配置文件

    名字无所谓,但是需要在里面设置很多参数,在这里创建也是为了下一步设置前端控制器的初始化参数。
    创建方法就是创建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:context="http://www.springframework.org/schema/context"
           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">
     
    
    </beans>
    

    设置dispatcherServlet(前端控制器)

    配置如下:

    <!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>
      <!-- 配置前端控制器-->
      <servlet>
        <servlet-name>springmvc</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
        <!-- contextConfigLocation配置springmvc加载的配置文件(配置处理器,映射器,适配器等等) -->
        <init-param>
          <param-name>contextConfigLocation</param-name>
          <param-value>classpath:springmvc.xml</param-value>
        </init-param>
      </servlet>
      <servlet-mapping>
          <servlet-name>springmvc</servlet-name>
          <!--
          1.*.action,只对动态资源进行拦截
          2./,对所有资源进行拦截,包括静态资源。我们需要自己排除。
          -->
          <url-pattern>*.action</url-pattern>
      </servlet-mapping>
    </web-app>
    

    注意点:
    1 springmvc的配置路径一定要正确~~,不设置的话会有一个默认的配置文件。
    2 设置拦截:有两种,根据自己的需求来选择。

    创建处理器

    这里有注解的和非注解的。

    创建基于非注解的处理器映射器和适配器

    处理器和处理器适配的创建

    1)第一种方法
    handler需要实现Controller接口,重写handleRequest方法,返回ModelandView。

    public class FacultyController implements Controller {
        @Override
        public ModelAndView handleRequest(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse) throws Exception {
            ModelAndView modelAndView = new ModelAndView();
            modelAndView.setViewName("/index.jsp");
            return modelAndView;
        }
    }
    

    对应的适配器配置

    <bean class="org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter"/>
    

    2)第二种方法
    实现HttpRequestHandler接口,重写handleRequest方法
    这种方法可以返回设置相应上下文,返回json,就用这种方法。

    
    public class StudentController implements HttpRequestHandler {
    
        @Override
        public void handleRequest(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse) throws ServletException, IOException {
            httpServletResponse.sendRedirect("/index.jsp");
        }
    }
    

    对应的适配器

     <bean class="org.springframework.web.servlet.mvc.HttpRequestHandlerAdapter"/>
    

    注入

    
        <!--设置handler-->
        <bean id="facultyController" name="/faculty.action" class="com.pesystem.controller.FacultyController"/>
        <bean id="studentController" name="/Student.action" class="com.pesystem.controller.StudentController"/>
    
    处理器映射器

    实现
    两种方法
    1)第一种

        <!--处理器映射器,单个的配置-->
        <bean class="org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping"/>
    

    2)第二种

        <!--批量映射,可以给一个控制器设置多个url路径,多个映射器可以共存-->
        <bean class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">
            <property name="mappings">
                <props>
                    <prop key="/faculty.action">facultyController</prop>
                    <prop key="/facultyP1.action">facultyController</prop>
                    <prop key="/facultyP2.action">facultyController</prop>
                </props>
            </property>
        </bean>
    

    创建基于注解的处理器映射器和适配器

    <!--3.1之后适配器-->
        <bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter"/>
        <!--3.1之后,映射器-->
        <bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping"/>
        
    

    这样处理器适配器和映射器就设置好了,但是我们需要使用到Handler里面去

    处理器需要@Controller修饰,方法用@RequestMapping,在@RequestMapping里面设置URL

    package com.pesystem.controller;
    
    import org.springframework.stereotype.Controller;
    import org.springframework.web.bind.annotation.RequestMapping;
    import org.springframework.web.servlet.ModelAndView;
    @Controller
    public class MajorController{
        @RequestMapping("/major.action")
        public ModelAndView getIndex(){
            ModelAndView modelAndView = new ModelAndView();
            modelAndView.setViewName("index2");
            return modelAndView;
        }
    }
    
    
    组件扫描

    如果不组件扫描的话,就需要一个一个注入,十分麻烦。
    我们就需要启动组件扫描配置如下:

        <!--组件扫描-->
        <context:component-scan base-package="com.pesystem.controller"/>
    

    注意@Controller的包

    设置视图加载器

    注意里面设置了前缀和后缀,如/index.jsp。那么我们设置viewName就只需要些index2.

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

    容易出现下面的错误:


    image.png

    如果适配器错误,会出现下面的错误;


    image.png

    在正式写项目核心之前我们需要大量的设置,真的挺烦的~~~~,那么有么有一款????

    相关文章

      网友评论

          本文标题:SpringMVC系列(一)helloworld程序

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