美文网首页
Sprng学习(五)SpringMVC

Sprng学习(五)SpringMVC

作者: 木书 | 来源:发表于2017-11-13 17:29 被阅读72次

    一、开始一个SpringMVC项目

    1.配置DispatcherServlet

    DispatcherServlet是Spring MVC的核心。 在这里请求会第一次接触到框架, 它要负责将请求路由到其他的组件之中。


    请求路径
    • java类配置
      配置DispatcherServlet
      public class SpitterWebInitializer extends AbstractAnnotationConfigDispatcherServletInitializer {
      //ContextLoaderListener创建应用上下文,加载应用中的其他bean。这些bean通常是驱动应用后端的中间层和数据层组件。
      @Override
      protected Class<?>[] getRootConfigClasses() {
        return new Class<?>[] { RootConfig.class };
      }
      //DispatcherServlet加载应用上下文时,加载包含Web组件的bean。 如控制器、 视图解析器以及处理器映射。
      @Override
      protected Class<?>[] getServletConfigClasses() {
        return new Class<?>[] { WebConfig.class };
      }
      //将DispatcherServlet映射到“/”
      @Override
      protected String[] getServletMappings() {
        return new String[] { "/" };
        }
      }
      
      

    但是,这种方式只能部署到支持Servlet 3.0的服务器中才能正常工作, 如Tomcat 7或更高版本。

    • web.xml配置
    1. 启用Spring MVC
    • java类注解方式
      创建一个带有@EnableWebMvc注解的类:
      WebConfig
      @Configuration
      //启用Spring MVC
      @EnableWebMvc
      //启用组件扫描
      @ComponentScan("spittr.web")
      public class WebConfig extends WebMvcConfigurerAdapter {
      //配置JSP视图解析器
      @Bean
      public ViewResolver viewResolver() {
        InternalResourceViewResolver resolver = new InternalResourceViewResolver();
        resolver.setPrefix("/WEB-INF/views/");
        resolver.setSuffix(".jsp");
        return resolver;
      }
      //配置静态资源的管理
      @Override
      public void configureDefaultServletHandling(DefaultServletHandlerConfigurer configurer) {
        configurer.enable();
      }
      @Override
      public void addResourceHandlers(ResourceHandlerRegistry registry) {
        // TODO Auto-generated method stub
        super.addResourceHandlers(registry);
      }
      }
      
      RootConfig
      @Configuration
      @Import(DataConfig.class)
      //启用组件扫描
      @ComponentScan(basePackages={"spittr"}, 
        excludeFilters={
            @Filter(type=FilterType.ANNOTATION, value=EnableWebMvc.class)
        })
      public class RootConfig {}
      
    • xml配置

    二、SpringMVC简单操作

    • 编写基本的控制器
    • 接受请求的输入
    • 处理表单
    1. 编写基本的控制器
    • 添加@RequestMapping注解

    • 添加@Controller注解

       //声明为一个控制器,基于@Component注解
      @Controller
      //声明处理对"/"的GET请求
      @RequestMapping("/")
      public class HomeController {
      @RequestMapping(method = GET)
      public String home(Model model) {
        //视图名为home
        return "home";
        }
      }
      视图名“home”将会解析为“/WEB-INF/views/home.jsp”路径的JSP。
      
      homepage与a相同
      @RequestMapping({"/a","/homepage"})
      

      Model实际上就是一个Map(也就是 key-value对的集合) , 它会传递给视图, 这样数据就能渲染到客户端了。 当调用addAttribute()方法并且不指定key的时候, 那么key会根据值的对象类型推断确定。 在本例中, 因为它是一 个List<Spittle>, 因此, 键将会推断为spittleList。

        //添加模型参数
        @RequestMapping(method=RequestMethod.GET)
        public String spittle(Model model) {
          model.addAttribute(createSpittleList(20));
          return "spittles";
        }
        private List<Spittle> createSpittleList(int count) {
          List<Spittle> spittles = new ArrayList<Spittle>();
          for (int i=0; i < count; i++) {
            spittles.add(new Spittle("Spittle " + i, new Date()));
          }
          return spittles;
        }
      

      当要显示指定key时,可以这样做

      @RequestMapping(method=RequestMethod.GET)
        public String spittle(Model model) {
          model.addAttribute("spittleList",createSpittleList(20));
          return "spittles";
        }
      

      在jsp中访问数据

       <c:forEach items="${spittleList}" var="spittle" >
              <li id="spittle_<c:out value="spittle.id"/>">
                <div class="spittleMessage"><c:out value="${spittle.message}" /></div>
                <div>
                  <span class="spittleTime"><c:out value="${spittle.time}" /></span>
                  <span class="spittleLocation">(<c:out value="${spittle.latitude}" />, <c:out value="${spittle.longitude}" />)</span>
                </div>
              </li>
            </c:forEach>
      
    1. 接受请求的输入
      Spring MVC允许以多种方式将客户端中的数据传送到控制器的处理器方法中, 包括:
    • 查询参数(Query Parameter)
    • 表单参数(Form Parameter)
    • 路径变量(Path Variable)

    查询参数

    ```
    @RequestMapping(method=RequestMethod.GET)
    public String spittle(@RequestParam(value="max1")long max,
                           @RequestParam(value="count1")int count1, Model model) {
        model.addAttribute(createSpittleList(20));
        return "spittles";
    }
    //浏览器访问:
    http://localhost:8080/spittrtest/spittles?max1=238900&count1=50
    

    路径参数

    @RequestMapping(value="/{spittleId}",method=RequestMethod.GET)
    public String spittle(@PathVariable int spittleId,Model model) {
         model.addAttribute(createSpittle(spittleId));
         return "spittle";
    }
    
    1. 处理表单
    @Controller
    @RequestMapping("/spitter")
    public class SpitterController {
        private SpitterRepository spittlerRepository;
        @Autowired
        public SpitterController(SpitterRepository spitterRepository) {
            this.spittlerRepository = spitterRepository;
        }
        @RequestMapping(value="/register", method=GET)
        public String showRegistrationForm() {
            return "registerForm";
        }
        @RequestMapping(value="/register", method=POST)
        public String processRegistration(Spitter spitter) {
            System.out.println("保存注册信息");
            return "redirect:/spitter/"+spitter.getUsername();
        }
        @RequestMapping(value="/{username}",method=GET)
        public String showSpitterProfile(@PathVariable String username,Model model) {
            System.out.println("模拟一个注册用户");
            Spitter spitter = new Spitter();
            spitter.setUsername(username);
            model.addAttribute(spitter);
            return "profile";
        }
    }
    

    校验表单

    //编写需要校验的实体类
    public class Spitter {
    
      private Long id;
      
      @NotNull
      @Size(min=5, max=16)
      private String username;
    
      @NotNull
      @Size(min=5, max=25)
      private String password;
      
      @NotNull
      @Size(min=2, max=30)
      private String firstName;
    
      @NotNull
      @Size(min=2, max=30)
      private String lastName;
      
      @NotNull
      @Email
      private String email;
    }
    //编写处理请求的方法
    @RequestMapping(value="/register", method=POST)
        public String processRegistration(@Valid Spitter spitter,Errors errors) {
            if(errors.hasErrors()) {
                System.out.println("表单校验出错");
                return "registerForm";
            }
            System.out.println("保存注册信息");
            return "redirect:/spitter/"+spitter.getUsername();
        }

    相关文章

      网友评论

          本文标题:Sprng学习(五)SpringMVC

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