springMVC 入门学习笔记
相关依赖
 <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.12</version>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-webmvc</artifactId>
            <version>5.3.14</version>
        </dependency>
        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>servlet-api</artifactId>
            <version>2.5</version>
        </dependency>
        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>jsp-api</artifactId>
            <version>2.0</version>
        </dependency>
        <dependency>
            <groupId>javax.servlet.jsp.jstl</groupId>
            <artifactId>jstl</artifactId>
            <version>1.2</version>
        </dependency>
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <version>1.18.20</version>
        </dependency>
1 回顾使用Servlet
- 
创建一个servlet (继承HttpServlet)
public class HelloServlet extends HttpServlet { @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { //获取前端参数 String name=req.getParameter("name"); if(name.equals("aaaa")){ req.getSession().setAttribute("name","aaaa"); }else { req.getSession().setAttribute("name","otherr"); } //业务层调用 //视图转发或者重定向 req.getRequestDispatcher("/WEB-INF/jsp/hello.jsp").forward(req,resp); } @Override protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { doGet(req, resp); } } - 
创建一个jsp 页面。
 - 
在web.xml 中配置映射
<servlet> <servlet-name>hello</servlet-name> <servlet-class>com.fadaiyu.serlvet.HelloServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>hello</servlet-name> <url-pattern>/hello</url-pattern> </servlet-mapping> - 
配置tomcat
 - 
启动测试
 
2 第一个springMVC
2.1 通过接口实现
- 
DispatcherServlet
其实就是个Servlet(它继承自HttpServlet基类),同样也需要在web应用的web.xml中注册DispatcherServle。<servlet> <servlet-name>example</servlet-name> <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> <!--引入配置文件--> <init-param> <param-name>contextConfigLocation</param-name> <param-value>classpath:springmvc-servlet.xml</param-value> </init-param> <!--设置启动级别--> <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <servlet-name>example</servlet-name> <!-- / 是匹配所有请求 /* 是匹配所有jsp 页面--> <url-pattern>/</url-pattern> </servlet-mapping> - 
springmvc 配置文件
<!--处理器映射--> <bean class="org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping"/> <!--适配器映射--> <bean class="org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter"/> <!--视图解析器,dispatcherservlet 给他的modelandview 模板引擎 --> <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver" id="InternalResourceView"> <!--前缀--> <property name="prefix" value="/WEB-INF/jsp/"/> <!--后缀--> <property name="suffix" value=".jsp"/> </bean> <bean id="/hello" class="com.fadaiyu.controller.HelloCon"/> - 
继承一个controller 接口
public class HelloCon implements Controller { @Override public ModelAndView handleRequest(HttpServletRequest request, HttpServletResponse response) throws Exception { //模型和视图 ModelAndView view = new ModelAndView(); //封装对象,放在modelandview 中 view.addObject("msg","hellocc"); // /WEB-INF/jsp/hello.jsp view.setViewName("hello"); return view; } } 
运行发现404 :在项目结构 ,工件中导入相关依赖
- 
DispaterServlet 表示前端控制器,是整个springmvc 的控制中心,用户发出请求,DispaterServlet接收请求并拦截请求。
#拦截该路径下的请求 <servlet-mapping> <servlet-name>example</servlet-name> <url-pattern>/</url-pattern> </servlet-mapping> - 
HandlerMapping 为处理器映射,HandlerMapping 根据请求url查找handler
 - 
HandlerExecution 表示具体的handler 其主要作用是根据url查找控制器,上面例子中url被查找控制器为hello
 - 
HandlerExecution 将解析后的信息传递给DispaterServlet ,如解析控制器映射等。
 - 
HandlerAdapter 表示处理器适配器,其按照特定的规则去执行Handler
 - 
Handler 让具体的Controller执行
 - 
Controller 将具体的执行信息返回给HandlerAdapter ,如ModelAndView
 - 
HandlerAdapter 将视图逻辑名或模型传递给DispatcherServlet.
 - 
DispatcherServlet 调用视图解析器ViewResolver 来解析HandlerAdapter 传递的逻辑视图名。
 - 
视图解析器将解析的逻辑视图名传给DispatcherServlet
 - 
DispatcherServlet 根据视图解析器解析的视图结果调用具体的视图
 - 
最终视图呈现给用户。
 
2.2 通过注解
springmvc 配置文件
<?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:mcv="http://www.springframework.org/schema/mvc"
       xmlns:context="http://www.springframework.org/schema/context"
       xmlns:mvc="http://www.springframework.org/schema/mvc"
       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
        http://www.springframework.org/schema/mvc
        http://www.springframework.org/schema/mvc/spring-mvc.xsd">
    <!--自动扫描包,让指定包下的注解生效 -->
    <context:component-scan base-package="com.fadaiyu.controller"/>
    <!--让spring mvc 不处理静态资源-->
    <mvc:default-servlet-handler/>
    <!--支持mvc 注解驱动
            在spring 中一般采用@RequesetMapping注解来完成映射关系
            要想@RequesetMapping 注解生效 必须向上下文中注册@DefaultAnnotationHandlerMapping 和一个 AnnotationMethodHandlerAdapter实例
            这两个实例分别在类级别和方法级别处理
            而annotation-driven配置帮助我们自动完成上面两个实例的注入-->
    <mcv:annotation-driven/>
    <!--视图解析器-->
    <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver" id="internalResourceViewResolver">
        <property name="prefix" value="/WEB-INF/jsp/"/>
        <property name="suffix" value=".jsp"/>
    </bean>
</beans>
@Controller
//@RestController 如果是@RestController 就不会被视图解析器解析 返回的就是字符串。
@RequestMapping("/")
public class HelloCon {
    @RequestMapping("/hello")
    public String hello(Model model){
        //封装数据
        model.addAttribute("msg","hellooooo");
        //返回数据会被视图解析器处理
        return "hello";
        //  return "redirect:/index.jsp"; 重定向
    }
}
3 接收参数
@GetMapping("/test1")
public String test1(Model model,@RequestParam("name") String name){ //@RequestParam("name") 表示从前端接收,并与前端配对
    //接收参赛
    System.out.println(name);
    //将返回结果传递给前端
    model.addAttribute("msg","name");
    //视图跳转
    return "test";
}
/**
 *  如果传递的是一个user 对象,则会匹配user 中的属性,名字一样,则正确接收,否则接收不到。
 */
@RequestMapping("/test2")
public String test2(User user){
    System.out.println(user);
    return "test";
}
学习来自《狂神说java》
                    
                
                
            
        
浙公网安备 33010602011771号