zoukankan      html  css  js  c++  java
  • SpringMvc简单实例

    Spring MVC应用一般包括4个步骤:

    (1)配置web.xml,指定业务层对应的spring配置文件,定义DispatcherServlet;

    (2)编写处理请求的控制器

    (3)编写视图对象,例如jsp

    (4)配置springmvc配置文件,使得控制器,视图解析器生效

    第一步:web.xml配置:

    <?xml version="1.0" encoding="UTF-8"?> <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  xmlns="http://java.sun.com/xml/ns/javaee"  xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"  id="WebApp_ID" version="2.5">  

    <display-name>SpringMvc01</display-name>  

    <context-param>
     <param-name>contextConfigLocation</param-name>
     <param-value>classpath:spring-mvc.xml</param-value>
     </context-param>
     <listener>
     <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
     </listener>

     <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:spring-mvc.xml</param-value>   --业务层对应的配置文件

    </init-param>  */

    </servlet>  

    <servlet-mapping>   

    <servlet-name>springmvc</servlet-name>   

    <url-pattern>/</url-pattern>  

    </servlet-mapping>

    </web-app>

    ----------------

    第二步:编写控制器:

    使用一个@Controller可以将一个POJO转化为处理请求的控制器

    @Controller

    @RequestMapping("/user")

    public class UserController{

      @RequestMapping("/register")

      public String register(){

        return "user/register";

      }

    }

    --register()方法返回的字符串,它代表一个逻辑视图名,将由视图解析器解析为一个具体的试图对象,

    第三步:编写视图对象

    使用一个register.jsp作为一个视图对象,处理完UserController#register()后,将转到这个界面

    第四步:springMVC的配置文件 spring-mvc-xml:

    <!-- 使用注解的包,包括子集 -->    

    <context:component-scan base-package="com.java1234"/>--扫描包下的所有类,使得标注的注解生效,

        <!-- 视图解析器 -->  

    <bean id="viewResolver"   class="org.springframework.web.servlet.view.InternalResourceViewResolver">   

    <property name="prefix" value="/WEB-INF/jsp/" />  

     <property name="suffix" value=".jsp"></property>  

    </bean>    

    <bean id="multipartResolver"         class="org.springframework.web.multipart.commons.CommonsMultipartResolver">      

    <property name="defaultEncoding" value="UTF-8"/>      

    <property name="maxUploadSize" value="10000000"/>

     </bean>

     ---@RequestMapping()在类定义处指定的URL相当于Web应用的部署路径,而在方法处指定的URL则相对于类定义处指定的URL,如果在类定义处未标注,只是在方法处标注RequestMapping(),此时方法处指定的URL相对于部署路径;

    @RequestMapping()除了可以通过URL映射请求外,还可以通过请求方法,请求头参数以及请求参数映射请求;

    例如:

    @RequestMapping(value="/delete",method=RequestMethod.POST,params="userid")

    RequestMapping的value、method、params、headers分别表示请求URL、请求方法、请求参数、及报文头的文件的映射文件、他们之间是与的关系、

    处理方法的签名的详细说明:

    使用RequestParam绑定请求参数值,java类反射对象默认不记录方法入参的名称,因此需要在方法入参处使用@RequestParam注解指定其对应的参数,

    @RequestParam()有以下3个参数:

    value:参数名

    request:是否必须,默认是true必须,表示请求中必须包含对应的参数名,如果不存在则抛出异常

    @CookieValue()绑定请求中的Cookie值

    @RequestHeader()绑定请求报文头的属性值

    使用命令/表单对象绑定请求参数值,

     (1)SpringMVC校验:

    配置hibernate校验器(与hibernate毫无关系)

    校验器注入到处理器适配器中

    在pojo中添加校验规则

    捕获校验错误信息

    @RequestMapping("/editItemsSubmit")

    public String editItemsSubmit(Model model,HttpServletRequest request,Intrger id,

    @Validate ItemCustom itemCustom,BindingResult bindingResult) throws Exception(){}

    //在需要校验的pojo前边添加@Validated,在需要校验的pojo后边添加BindingResult bindingResult接收校验出错信息

    //注意:@ValidatedBindingResult bindingResult是配对出现,并且形参顺序是固定的(一前一后)。

    通过model.addAttribute(...)绑定传到后台

    分组校验:

    pojo中定义校验规则,而pojo是被多个 controller所共用,当不同的controller方法对同一个pojo进行校验,但是每个controller方法需要不同的校验

    解决方法:

    定义多个校验分组(其实是一个java接口),分组中定义有哪些规则

    每个controller方法使用不同的校验分组

    (1)定义一个接口不需要任何方法

    (2)在pojo中注解里加groups={接口名.class}

    (3)在control的方法中指定分组的校验

    @Validated(value={ValidGroup1.class})

    数据回显:

    1springmvc默认对pojo数据进行回显。

    pojo数据传入controller方法后,springmvc自动将pojo数据放到request域,key等于pojo类型(首字母小写)

    使用@ModelAttribute指定pojo回显到页面在request中的key

    2@ModelAttribute还可以将方法的返回值传到页面

    在商品查询列表页面,通过商品类型查询商品信息。

    controller中定义商品类型查询方法,最终将商品类型传到页面

    @ModelAttribute("itemTypes")

    页面上就可以得到itemTypes的数据;

    3、使用最简单方法使用model,可以不用@ModelAttribute

    model.addAttribute(...);

    使用最简单方法使用model。

    model.addAttribute("id", id);

    异常处理

    系统遇到异常,在程序中手动抛出,dao抛给serviceservicecontrollercontroller抛给前端控制器,前端控制器调用全局异常处理器

    springmvc提供一个HandlerExceptionResolver接口

    解析出异常类型

    如果该 异常类型是系统 自定义的异常,直接取出异常信息,在错误页面展示

    如果该 异常类型不是系统 自定义的异常,构造一个自定义的异常类型(信息为“未知错误”)

    @Override

    public ModelAndView resolveException(HttpServletRequest request,

    HttpServletResponse response, Object handler, Exception ex) {

    }

    RESTfulRepresentational State Transfer的缩写)其实是一个开发理念,是对http的很好的诠释。

    1、对url进行规范,写RESTful格式的url

    RESTurlhttp://...../queryItems.action?id=001&type=T01

    RESTurl风格:http://..../items/001

    特点:url简洁,将参数通过url传到服务端

    2http的方法规范

    不管是删除、添加、更新。。使用url是一致的,如果进行删除,需要设置http的方法为delete,同理添加。。。

    后台controller方法:判断http方法,如果是delete执行删除,如果是post执行添加

    3、对httpcontentType规范

    请求时指定contentType,要json数据,设置成json格式的type。。

    @RequestMapping(value="/ itemsView/{id}"):{×××}占位符,请求的URL可以是“/viewItems/1”或“/viewItems/2”,通过在方法中使用@PathVariable获取{×××}中的×××变量。

    @PathVariable用于将请求URL中的模板变量映射到功能处理方法的参数上。

    如果RequestMapping中表示为"/ itemsView /{id}",id和形参名称一致,@PathVariable不用指定名称。

    web.xml配置:

    <url-pattern> / </url-pattern>

    拦截器

    1.1 拦截定义

    定义拦截器,实现HandlerInterceptor接口。接口中提供三个方法。

  • 相关阅读:
    JavaScript作用域学习笔记
    Object.prototype.toString.call() 区分对象类型
    oracle 经典SQL整理
    day31
    ID3决策树
    C# 中浅拷贝与深拷贝区别
    C#值类型和引用类型的区别
    C#守护进程(windows服务)
    C#线程池
    C#双缓冲绘图
  • 原文地址:https://www.cnblogs.com/muliu/p/5568992.html
Copyright © 2011-2022 走看看