为了账号安全,请及时绑定邮箱和手机立即绑定

我的springMVC学习记录1——入门

标签:
Java

springMVC的执行原理是访问指定路径,然后前端控制器接收请求,转发到处理器映射器查找对应的处理器映射器,由处理器适配器执行handler,返回一个MoldelAndView对象到视图解析器,由视图解析器来解析,最后显示到浏览器
所以第一步先配置前端控制器

//在web.xml中配置前端控制器
  <!-- 前端控制器 -->
  <servlet>
    <servlet-name>dispatcherServlet</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    <!-- 配置springMVC配置文件位置 -->
    <init-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>classpath:springmvc.xml</param-value>
    </init-param>
  </servlet>
  <!-- *.action结尾的url会由DispatcherServlet处理 -->
  <servlet-mapping>
    <servlet-name>dispatcherServlet</servlet-name>
    <url-pattern>*.action</url-pattern>
  </servlet-mapping>

然后配置处理器映射器和处理器适配器

//在springMVC配置文件中配置处理器映射器和处理器适配器
<!-- 非注解的处理器映射器 -->
<!-- 根据BeanName作为url来访问handler -->
<bean class="org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping"></bean>
<!-- 非注解的处理器适配器 -->
<bean class="org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter"></bean>
<!-- 创建handler对象 -->
<bean class="com.melon.controller.ItemsController" name="/queryItems.action"></bean>
//非注解映射器还有另一个简单url映射器,可以直接配置多个url地址
<!-- 简单url处理器映射器 -->
    <bean class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">
        <property name="mappings">
            <props>
                <!-- key中填写访问路径,标签内填写handler的id -->
                <prop key="/queryItems1.action">queryItems</prop>
            </props>
        </property>
    </bean>

编写handler

//编写handler,需要实现Controller接口并实现handleRequest方法
public class ItemsController implements Controller {
    public ModelAndView handleRequest(HttpServletRequest request, HttpServletResponse response) throws Exception {
        List<Items> itemLists = new ArrayList<>();  
        Items cellPhone = new Items();
        cellPhone.setId(1);
        cellPhone.setName("金立手机");
        cellPhone.setPrice(2000.0);
        cellPhone.setDetail("垃圾手机");
        Items lapTop = new Items();
        lapTop.setId(2);
        lapTop.setName("惠普电脑");
        lapTop.setPrice(5000.09);
        lapTop.setDetail("还行");
        //将静态数据加入到list中
        itemLists.add(cellPhone);
        itemLists.add(lapTop);
        ModelAndView mnv = new ModelAndView();
        //将list对象添加到值域中,相当于request.setAttribute(arg0, arg1)方法
        mnv.addObject("itemLists", itemLists);
        //设定返回页面路径
        mnv.setViewName("/jsp/itemList.jsp");
        //返回ModelAndView对象
        return mnv;
    }
}

再配置视图解析器

<!-- 视图解析器,解析jsp,默认使用jstl标签 -->
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"></bean>

在浏览器中访问localhost:8080/springmvc-day1/queryItems.action即可


配置注解的处理器映射器和处理器适配器

//注解的处理器映射器和处理器适配器
<!-- 注解的处理器映射器 -->
<bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping"></bean>
<!-- 注解的处理器适配器 -->
<bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter"></bean>
<!-- 使用mvc:annotation-driven可以自动加载注解的处理器映射器和处理器适配器,还有其他组件,可以取代上面的配置 -->
<mvc:annotation-driven></mvc:annotation-driven>

<!-- 组件扫描,可以扫描指定包中的handler -->
<context:component-scan base-package="com.melon.controller"></context:component-scan>

编写注解的handler

//使用@Controller注解标识这个类是一个控制器
@Controller
public class ItemsController1 {
    //使用@RequestMapping配置这个控制器的访问路径,使用注解开发可以在一个类中定义多个方法
    @RequestMapping("/view")
    public ModelAndView view() {
        List<Items> itemLists = new ArrayList<>();
        Items cellPhone = new Items();
        cellPhone.setId(1);
        cellPhone.setName("金立手机");
        cellPhone.setPrice(2000.0);
        cellPhone.setDetail("垃圾手机");
        Items lapTop = new Items();
        lapTop.setId(2);
        lapTop.setName("惠普电脑");
        lapTop.setPrice(5000.09);
        lapTop.setDetail("还行");

        itemLists.add(cellPhone);
        itemLists.add(lapTop);

        ModelAndView mnv = new ModelAndView();
        mnv.addObject("itemLists", itemLists);
        mnv.setViewName("/jsp/itemList.jsp");

        return mnv;
    }
}

以上就是一个简单的SpringMVC入门程序
编写Controller方法返回类型可以是ModelAndView、String、void,例如:

    @RequestMapping("/searchUser")
    public String searchUser(Model model) throws Exception {
        User user = new User();
        user.setId(2);

        List<User> userList = userService.searchUser(user);
        model.addAttribute("userList", userList);
        return "userList";
    }

这里的返回值类型是String,所以返回值是一个页面的路径,在形参中定义一个Model对象,即可用model里面的方法传递model


扩展

springmvc参数绑定
在表单提交的数据绑定到Controller的形参中

//@RequestParam(value="id")Integer itemId)这个注解中的value的值是表单中的name属性的值,会自动封装到itemId中
public ModelAndView register(@RequestParam(value="id")Integer itemId){}
//封装到实体类中,表单中的name属性的值要对应实体类里面的属性名称
public ModelAndView register(User user){}

解决POST乱码
在web.xml中配置过滤器

  <filter>
    <filter-name>characterEncodingFilter</filter-name>
    <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
  </filter>
  <filter-mapping>
    <filter-name>characterEncodingFilter</filter-name>
    <url-pattern>/*</url-pattern>
  </filter-mapping>
点击查看更多内容
1人点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消