Springmvc结构及项目配置

SpringMVC

  • SpringMVC结构图
Springmvc结构及项目配置_第1张图片
1545546821865.png
  1. 创建webproject

    1. 直接使用maven提供的web.app模板創建

      项目结构图:


      Springmvc结构及项目配置_第2张图片
      1545531860484.png
  1. 编写web.xml,在其中注册一个特殊的servlet,前端控制器

    
    
        Spring_Mvc
        
            springmvc
            org.springframework.web.servlet.DispatcherServlet
        
        
        
            springmvc
            /
        
    
    
    
  2. 编写一个SpringMvc的配置文件

    1. 注册一个视图解析器 (在web-inf下新建springmvc-servlet.xml文件,该文件供web.xml中的DispatcherServlet注册时查找)

      
      
          
          
              
              
              
              
          
          
          
      
          
      
      

4.编写控制器(注意将返回视图放置与webapp下的jsp文件夹中,如果直接放在在根目录下,则setViewName("/mygirl.jsp"))

//controller 只具有一个方法的接口成为函数式接口
public class HelloController implements Controller {
    @Override
    public ModelAndView handleRequest(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse) throws Exception {
        ModelAndView mav=new ModelAndView();
        mav.addObject("girl","linda");
        mav.setViewName("mygirl");
        return mav;
    }
},

/* 基于注解模式-- 需要在springmvc-servlet.xml中注册扫描bean,该种实现比以上方法更简便  */

@Controller //标记为spring的一个组件,并且是控制器的组件,此时handlermappong会去扫描这个controller是否与之匹配,匹配成功就将工作交予该controller,匹配原则通过@RequestMapping(URI)进行匹配  
public class ByeController {
    @RequestMapping("/bbbb")
    public String method(Model model){
        model.addAttribute("model","李荣浩");
        return "bye";
    }
}


/*基于注解模式 --无需再springmvc.servlet.xml中注册component-sacn 但是需要注册controller Bean*/

@Controller
public class ByeController {
    @RequestMapping("/aa")
    public String bye(Model model){
        model.addAttribute("model","李荣浩");
        return "bye";//返回的string就是逻辑视图名称 bye.jsp
    }
    //访问路径aa
    //为什么可以成功,我都唔知。。。

5.返回视图

<%@ page contentType="text/html;charset=UTF-8" language="java" %>


    Title


    this is my girl: ${girl}


Springmvc-servlet.xml配置位置:

​ DispatcerSerlvet默认查找web-inf下的springmvc-servlet.xml文件[图片上传失败...(image-ebf666-1545553656872)]

可以通过标签更改位置满足maven项目式结构开发:


        
        springmvc
        org.springframework.web.servlet.DispatcherServlet
        
            contextConfigLocation
            classpath:mvc.xml
        
         
    

jsp

 
        
            ${user.id}
            ${user.username}
            ${user.password}
        
    

转发与重定向

默认的 return 就是一种转发

@RequestMapping("/aa")
    public String bye(Model model){
        model.addAttribute("model","李荣浩");
        return "bye";
    }

重定向到页面(注意这里的的return要返回path ,注意以反斜杠表明地址,重定向无法传递当前数据,相当于用户重新发起一次request请求)

@RequestMapping("/redirecttojsp")
    public String redirecttojsp(Model model){
        System.out.println("重定向");
        return "redirect:/index.jsp";
    }

转发到控制器forward:控制器声明URI(其中的model数据仍然可以被新的控制器所接收,并最终返回给页面):

@RequestMapping("/forward")
    public String forwardtoController(Model model){
        model.addAttribute("mmm","1111");
        System.out.println("forwardtoController");
        return "forward:/Bye/users";
    }

springmvc访问web元素

  • request

    • @Controller
      @RequestMapping("/test")
      public class TestController {
          @RequestMapping("/request")
          public String getrequest(HttpServletRequest httpServletRequest){
              String o=httpServletRequest.getParameter("boy");
              System.out.println("输出内容"+o);
              return null;
          }
      }
      //控制台答应数据为:输出内容wuzerui
      //浏览器访问路径为:http://localhost:8080/SpringMvc_war_exploded/test/request?boy=wuzerui
      
  • session

    @RequestMapping("/session")
    public String setsession(HttpSession session){
        session.setAttribute("session","hi")
        session.getServletContext().setAttribute("会话","这是我的会话");
        return null;
    }
    //可通过另一个test.jsp页面中的${会话},${session},得到数据
    

application

SpringMVC注解详情

  • 路劲数组访问,多路径访问一个controller

    @RequestMapping(value=["/uri","/uri2"])

    @RequestMapping(path=["/uri","/uri2"])

  • 限定请求方式只能为GET(其他方式同理,可以写成数组):

    @RequestMapping(method=RequestMethod.GET)

    @RequestMapping(path ={"p1","p2"},method= RequestMethod.GET)
        public String onlyget(){
            System.out.println("this is onlygetMethod");
            return "test";
        }
    

获取项目的地址:

@WebServlet(urlPatterns = {},loadOnStartup = 2)
public class WebPatInitServlet extends HttpServlet {
    @Override
    public void init(ServletConfig config) throws ServletException {
        //在整个应用中上下文使用webpath来存储上下文路径
        config.getServletContext().setAttribute("webpath",config.getServletContext().getContextPath());
        super.init(config);
    }
}
//loadonstartup =2 是为了让这个servlet最快加载,可以优先获取到webpath

表单访问:

你可能感兴趣的:(Springmvc结构及项目配置)