Study(5) xml配置开发基于SpringMvc的web应用

1.springmvc是什么?

springmvc:一个mvc框架,用来简化基于mvc架构的web应用开发

2.SpringMVC五大核心组件

(1).组件解析

### DispatcherServlet(前端控制器)
            接受请求,依据handlerMapping的配置调用相应的模型来处理

### HandlerMapping
            包含了请求路径和模型的对应关系

### Controller(处理器)
            负责处理业务逻辑

### ModelAndView
            封装了处理结果,处理结果除数据外还可能有视图名

### ViewResolver(视图解析器)
            DispatcherServlet依据viewResolver的解析,调用真正的视图对象来生成相应的页面。

(2)五大组件关系?

a.DispatcherServlet收到请求后,依据HandlerMapping的配置,调用相应的Controller来处理

b.Controller将处理结果封装成ModelAndView对象,然后返回给DispatcherServlet

c.DispatcherServlet依据viewResolver的解析,调用相应的视图对象,比如jsp生成相应的页面

3.解析DisptcherServelet前端控制器(web.xml)

A:web.xml配置

注解方式与xml配置方式相同

<servlet>
   <servlet-name>springtest</servlet-name>   // servlet命名
   <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>    // spring框架类
   <init-param>   //初始化参数
     <param-name>contextConfigLocation</param-name>
     <param-value>classpath:springmvc.xml</param-value>
   </init-param>
   <load-on-startup>1</load-on-startup>  //tomcat启动时,立即实例化dispatcherServlet
 </servlet>
 <servlet-mapping>
   <servlet-name>springtest</servlet-name>
   <url-pattern>*.do</url-pattern>
 </servlet-mapping>

B:流程分析:

当启动Tomcat时,加载web.xml文件,并实例化DispatcherServlet,
在DispatcherServlet初始化方法里面,会读取该初始化参数的值来获取spring配置文件(springmvc.xml)的位置,然后启动spring容器

C:特别说明:

<init-param>
  <param-name>contextConfigLocation</param-name>
  <param-value>classpath:springmvc.xml</param-value>
</init-param>

等价于:
    new ClassPathXmlApplicationContext("springmvc.xml");

4.配置HandlerMapping(springmvc.xml)

方式一:xml配置

  <!--配置handlermapping-->
<bean class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">
        <property name="mappings">
            <props>
                <prop key="/index.do">helloController</prop> 
                //与处理器的bean的id保持一致
            </props>
        </property>
</bean>

方式二:注解方式

(1).配置组件扫描
        <context:component-scan base-package="cn.com.controller"/>
            注:仅扫描 @Controller、@Service、@Component、@Repository

(2).springmvc.xml添加mvc注解扫描
         <!--配置mvc注解扫描-->
        <mvc:annotation-driven/>
            注:扫描@RequestMapping

(3).HelloController方法上添加RequestMapping注解 
    @RequestMapping("index.do")

5.配置Controller

方式一:xml配置

 <!--配置处理器 (springmvc.xml)-->
<bean id="helloController" class="controller.HelloController"/>

public class HelloController implements Controller {
    @Override
    public ModelAndView handleRequest(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse) throws Exception {
            System.out.println("handleRequest()");
            /*
                ModelAndView有两个构造器:
                    (1).ModelAndView(String viewName) , viewName是视图名
                    (2).ModelAndView(String viewName, Map<String, ?> model),map用于封装处理的结果数据
             */
        return new ModelAndView("index");
    }
}

方式二:注解方式

1.不用实现controller接口
2.可以在处理器中添加多个方法,每一个方法处理一种类型的请求
3.方法名不作要求,返回类型可以是ModelAndView,也可以是String
4.使用@Controller,将该处理器纳入容器进行管理(在spring配置文件中不用配置该处理器了)
5.使用@RequestMapping,告诉前端控制器(DispatcherServlet),请求路径与处理器方法的对应关系,(spring配置文件不用配置HandlerMapping)

   @Controller
   public class HelloController {
       @RequestMapping("index.do")
       public String hello(){
           System.out.println("index.do");
           return "index";
       }
   }

6.ModelAndView

ModelAndView有两个构造器:
    (1).ModelAndView(String viewName) , viewName是视图名
    (2).ModelAndView(String viewName, Map<String, ?> model)
                    viewName是视图名,map用于封装处理的结果数据

7.ViewResolver视图处理器(springmvc.xml)

注解方式与xml配置方式相同

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

8.Springmvc项目流程示意图

9.读取请求对象的值

DispatcherServler会分析方法的结构,通过java反射机制,将参数传给方法

(1).通过request对象

将request对象作为方法的入参即可

@RequestMapping("login.do")
public String login(HttpServletRequest request){
    String name = request.getParameter("name");
    System.out.println(name);
    return "index";
}

(2).使用@RequestParam对象

将该注解添加到方法的形参前面,值为实际参数值

 @RequestMapping("login.do")
public String login(String pwd ){
    System.out.println(pwd);
    return "index";
}
或者:
@RequestMapping("login.do")
public String login(@RequestParam("pwd") String password ){
    System.out.println(password);
    return "index";
}

(3).使用javabean封装请求参数值

a :写一个Java类,要求属性名称和请求参数名称一致,提供get()、set();

b :将该javabean作为方法的形参;

文章标题:Study(5) xml配置开发基于SpringMvc的web应用

发布时间:2020-04-26, 09:22:11

最后更新:2020-04-26, 09:22:11