SpringMVC

SpringMVC

一. DispatcherServlet是前端控制器设计模式的实现,提供Spring Web MVC的集中访问点,而且负责职责的分派,而且与Spring IoC容器无缝集成,从而可以获得Spring的所有好处。

DispatcherServlet主要用作职责调度工作,本身主要用于控制流程,主要职责如下:

1、文件上传解析,如果请求类型是multipart将通过MultipartResolver进行文件上传解析;

2、通过HandlerMapping,将请求映射到处理器(返回一个HandlerExecutionChain,它包括一个处理器、多个HandlerInterceptor拦截器);

3、通过HandlerAdapter支持多种类型的处理器(HandlerExecutionChain中的处理器);

4、通过ViewResolver解析逻辑视图名到具体视图实现;

5、本地化解析;

6、渲染具体的视图等;

7、如果执行过程中遇到异常将交给HandlerExceptionResolver来解析。

在web.xml中配置DispatcherServlet

    <servlet>
        <servlet-name>springmvc</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
        <init-param>
            <param-name>contextConfigLocation</param-name>
            <param-value>classpath:config.xml</param-value>
        </init-param>
    </servlet>

    <servlet-mapping>
        <servlet-name>springmvc</servlet-name>
        <url-pattern>/</url-pattern>
    </servlet-mapping>

在resource资源文件新建config.xml 用来注入对象

之后可以写SpringMVC的核心Controller 控制器 DispatcherServlet根据不同的请求控制不同控制器来进行处理。

实现Controller控制器一般有两种方式一种是实现Controller接口

public class InputProductController implements Controller {

    @Override
    public ModelAndView handleRequest(HttpServletRequest request, HttpServletResponse response) throws Exception {
        System.out.println("handleRequest in InputProductController is called");
        return new ModelAndView("/WEB-INF/ProductForm.jsp");//new ModelAndView("/WEB-INF/ProductDetail.jsp", "product", p);
    }
}

之后要在config.xml文件中注入Controller对象

//这里name相当于actionname
bean name="/product_input.action"
        class="com.controller.InputProductController" />

第二种方式是使用用注解的方式

@Controller
public class SaveProductController {

    @RequestMapping("/product_save3.action")
    //这里的ProductForm 类似于Struts中的模型驱动
    //Model 相当于在request中setAtrubute
    public String productSave(ProductForm pf, Model model){

        Product p = new Product();

        p.setName(pf.getName());
        p.setDescr(pf.getDescr());
        p.setPrice(pf.getPrice());

        model.addAttribute("product", p);

        return "jsp/ProductDetail";
    }

    @RequestMapping("/update.action")
    public String update(){
        System.out.println("update method");
        return "jsp/ProductDetail";
    }
@Controller
@RequestMapping("/product")//在类名前加mapping注解之后在里面的方法的返回Actionname之前要加上类名的product
public class ProductController {

    @Autowired//此注解可以自动加载注入下面的对象 对应的实现类应该前应加入@Service
    private IProductService proService;// = new ProductServiceImpl();



    @RequestMapping(value="/addProduct.action", method=RequestMethod.POST)
    //RedirectAttributes 重定向后可以加message
    public String addProduct(ProductForm pf, RedirectAttributes ra){

        Product p = proService.addProduct(pf);

        ra.addFlashAttribute("msg", "add successfully!");
        //重定向另一个Action
        return "redirect:/product/product_view.action/" + p.getPid();
    }
    //可以在Action后面加/加上一个参数
    @RequestMapping("/product_view.action/{pid}")
    public String showProduct(@PathVariable long pid, Model model){

        Product p = proService.getProductById(pid);

        model.addAttribute("product", p);

        return "jsp/ProductDetail";
    }
}

之后要在config.xml中配置扫面注解

<?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:p="http://www.springframework.org/schema/p"
    xmlns:mvc="http://www.springframework.org/schema/mvc" xmlns:context="http://www.springframework.org/schema/context"
    xsi:schemaLocation="
        http://www.springframework.org/schema/beans
        http://www.springframework.org/schema/beans/spring-beans.xsd
        http://www.springframework.org/schema/mvc
        http://www.springframework.org/schema/mvc/spring-mvc.xsd     
        http://www.springframework.org/schema/context
        http://www.springframework.org/schema/context/spring-context.xsd">

    <!-- 组件扫描,扫描该报下的所有组件(Controller) -->
    <context:component-scan base-package="com.annotation.controller" />

    <!-- 组件扫描,将该包下的类注入到指定的接口中 -->
    <context:component-scan base-package="com.service.impl"/>

    <mvc:annotation-driven />

    <!-- 
        设定最终的虚拟视图,前缀为/WEB-INF/jsp/, 后缀为.jsp
        假如@RequestMapping所注解的方法返回值为abc,则完整的视图为/WEB-INF/jsp/abc.jsp
     -->
    <bean
        class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <property name="prefix" value="/WEB-INF/"></property>
        <property name="suffix" value=".jsp"></property>
    </bean>


</beans>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值