81.【SpringMVC】(三)

简介: 81.【SpringMVC】

(五)、使用注解开发SpringMVC

(1).使用SpringMVC必须要配置的三大件:
处理器映射器 处理器适配器 视图解析器
(2).如果使用注解进行开发的话
那么 处理器映射器 处理器适配器 就会被自动注入,不用我们去配置了

1.Spring下面的配置(可以写死)

1.进行配置的约束
http://www.springframework.org/schema/context
https://www.springframework.org/schema/context/spring-context.xsd
http://www.springframework.org/schema/mvc
https://www.springframework.org/schema/mvc/spring-mvc.xsd
2.扫描注解下面的所有包
<context:component-scan base-package="Com.Jsxs.Controller"/>
3.使SpringMVC处理静态资源
 <mvc:default-servlet-handler/>
4.导入驱动的注解
<mvc:annotation-driven/>
5.视图解析器
<?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"
       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
       https://www.springframework.org/schema/context/spring-context.xsd
       http://www.springframework.org/schema/mvc
       https://www.springframework.org/schema/mvc/spring-mvc.xsd
">
<!--    扫描包-->
    <context:component-scan base-package="Com.Jsxs.Controller"/>
<!--    让Spring MVC不处理静态资源-->
    <mvc:default-servlet-handler/>
<!--    支持驱动注解
    在spring中一般采用 @RequestMapping注解来完成映射关系
    要想使 @RequestMapping 注解生效
    必须像上下文中注册DefaultAnnotationHandleMapping
    和一个AnnotationMethodHandlerAdapter实列
    这两个实列分别在类级别和方法级别处理
    而annotation-driven配置,自动帮我们完成上述的两个实列的注入
-->
    <mvc: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>

2.注册DispatcherServlet(可以写死 )

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
         version="4.0">
    <!--  1.  配置DispatcherServlet 核心-->
    <servlet>
        <servlet-name>springmvc</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
        <!--  3.      DispatcherServlet要绑定Spring的配置文件-->
        <init-param>
            <param-name>contextConfigLocation</param-name>
            <param-value>classpath:springmvc-servlet.xml</param-value>
        </init-param>
        <!--   4.     启动级别: 就是让他和服务器进行同步-->
        <load-on-startup>1</load-on-startup>
    </servlet>
    <!--  2.
        在SpringMVC中,
        / 只匹配所有的请求,不会去请求jsp
        /* 匹配所有的请求,会请求jsp
        在springMvc中 我们尽量写/
    -->
    <servlet-mapping>
        <servlet-name>springmvc</servlet-name>
        <url-pattern>/</url-pattern>
    </servlet-mapping>
</web-app>

3.Controller控制层

1.@Controller 设置为 controller
2. @RequestMapping("/hello") 请求映射
package Com.Jsxs.Controller;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
@Controller
public class HelloController {
    @RequestMapping("/hello")
    public String hello(Model model){
        model.addAttribute("msg","hello springAnnotation!!");
        return "hello";   //会被试图解析器处理;
    }
}

@RequestMapping(“/hello”)才是真正的映射的地址

(六)、Controller【控制器】

  • 控制器复杂提供访问应用程序的行为,通常通过接口定义或注解定义两种方法实现
  • 在控制器负责解析用户的请求并将其转换成一个模型
  • 在Spring MVC中一个控制器类可以包含多个方法
  • 在Spring MVC中,对于Controller的配置有很多种

1.实现一个Controller的接口

控制层

package Com.Jsxs.Controller;
import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.mvc.Controller;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class controllerFirst implements Controller {
    @Override
    public ModelAndView handleRequest(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse) throws Exception {
        ModelAndView modelAndView = new ModelAndView();
        modelAndView.addObject("msg","这是通过接口来实现");
        modelAndView.setViewName("hello");
        return modelAndView;
    }
}

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"
       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
       https://www.springframework.org/schema/context/spring-context.xsd
       http://www.springframework.org/schema/mvc
       https://www.springframework.org/schema/mvc/spring-mvc.xsd
">
<!--   开始扫描包下的注解-->
    <context:component-scan base-package="Com.Jsxs.Controller"/>
<!--    设置默认-->
    <mvc:default-servlet-handler/>
<!--    设置驱动器-->
    <mvc: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>
<bean class="Com.Jsxs.Controller.controllerFirst" id="/hello"/>
</beans>

2.使用注解实现Controller

@Component  组件
@service  service
@Controller controller
@Repository dao
1.这个返回类型为字符串的方法,返回值的名字不是随便要起的,而是存在页面的
名字。如果乱其名字的话,我们可能会面临404的尴尬处境
2.方法里面的参数是 Model 不是其他的

控制层

package Com.Jsxs.Controller;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
@Controller
public class TwoController {
    @RequestMapping("/hello2")
    public String test(Model model){
        model.addAttribute("msg","这是利用注解进行开发的数据");
        return "hello";  //这个的意思就是说要和jsp文中的文件的名字一样,不能乱起名字
    }
}

spring可以不用写bean了

<?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"
       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
       https://www.springframework.org/schema/context/spring-context.xsd
       http://www.springframework.org/schema/mvc
       https://www.springframework.org/schema/mvc/spring-mvc.xsd
">
<!--   开始扫描包下的注解-->
    <context:component-scan base-package="Com.Jsxs.Controller"/>
<!--    设置默认-->
    <mvc:default-servlet-handler/>
<!--    设置驱动器-->
    <mvc: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>

3.新思路

并不是说一个网站又N张页面,我们就对它设置了N张的JSP,而有可能我们只是对其进行了一些的数据更新,并没有做到每一个数据更新就需要更换一张JSP

eg:

package Com.Jsxs.Controller;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
@Controller
public class TwoController {
    @RequestMapping("/hello2")
    public String test(Model model){
        model.addAttribute("msg","这是利用注解进行开发的数据2");
        return "hello";  //这个的意思就是说要和jsp文中的文件的名字一样,不能乱起名字
    }
    @RequestMapping("/hello1")
    public String test2(Model model){
        model.addAttribute("msg","这是利用注解进行开发的数据1");
        return "hello";  //这个的意思就是说要和jsp文中的文件的名字一样,不能乱起名字
    }
}

(七)、RequestMapping【请求映射】

@RequestMapping 是 Spring Web 应用程序中最常被用到的注解之一。这个注解会将 HTTP 请求映射到 MVC 和 REST 控制器的处理方法上

1.RequestMapping在方法上

RequestMapping在方法上会精确的找到这一 个方法

package Com.Jsxs.Controller;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
@Controller
public class Controller2 {
    @RequestMapping("/hello2")
    public String test(Model model){
        model.addAttribute("msg","进入了控制层2,映射是hello2");
        return "hello";  //这个的意思就是说要和jsp文中的文件的名字一样,不能乱起名字
    }
    @RequestMapping("/hello1")
    public String test2(Model model){
        model.addAttribute("msg","进入了控制层2,映射是hello1");
        return "hello";  //这个的意思就是说要和jsp文中的文件的名字一样,不能乱起名字
    }
}

2.RequestMapping在类上

package Com.Jsxs.Controller;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
@Controller
@RequestMapping("/hello3")
public class Controller3 {
@RequestMapping("/hello2")
    public String test(Model model){
        model.addAttribute("msg","进入了控制层3,映射的IP是hello3");
        return "hello";
    }
}

3.RequestMapping在类上和方法上同时存在

我们要先访问类路径上的然后再访问方法路上的,相当于加了一层
http://localhost/SpringMVC_06_Controller_war_exploded/hello3/hello2
package Com.Jsxs.Controller;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
@Controller
@RequestMapping("/hello3")
public class Controller3 {
    @RequestMapping("hello2")
    public String test(Model model){
        model.addAttribute("msg","进入了控制层3,映射的IP是hello3");
        return "hello";
    }
}


相关文章
|
8月前
|
Java Spring
|
8月前
|
前端开发 Java 程序员
|
8月前
|
前端开发 JavaScript Java
|
8月前
|
JSON JavaScript 前端开发
|
8月前
|
XML 运维 前端开发
|
5月前
|
XML 前端开发 Java
SpringMvc专题
SpringMvc笔记(持续更新)此方法的执行时机是在控制器方法执行之前,所以我们通常是使用此方法对请求部分进行增强。同时由于结果视图还没有创建生成,所以此时我们可以指定响应的视图。
|
5月前
|
存储 JSON 前端开发
|
5月前
|
存储 JSON Java
SpringMVC应用
SpringMVC应用
32 0
|
9月前
SpringMVC@RequestHeader
SpringMVC@RequestHeader
18 0
|
9月前
|
前端开发 Java Maven
SpringMVC1
SpringMVC1
57 0
SpringMVC1

热门文章

最新文章

相关课程

更多