《Spring 实战》Spring MVC

搭建SpringMVC项目
当你需要搭建一个SpringMVC时你需要考虑几个方面:
配置DispatcherServlet、SpringMVC启动

配置DispatcherServlet:1、web.xml
2.java配置 :实现AbstractAnnotationConfigDispatcherServletInitializer
第二种方法有容器版本要求,要求支持Servlet3.0的服务器,比如tomcat7.0或者更高的版本,而Servlet3.0 2009年就已经发布。
java的初始化器的好处就是可以定义任意数量的初始化器。只需要实现WebApplicationInitializer就可以往Web容器中注册其他组件。

/**
 * 添加其他Servlet和Filter的示例代码
 *
 * @author ranran
 */
public class MyServletInitiation implements WebApplicationInitializer{
    @Override
    public void onStartup(ServletContext servletContext) throws ServletException {
        Dynamic myServlet =  servletContext.addServlet("myServlet", MyServlet.class);
        myServlet.addMapping("/custom/**");
        
        //配置mutilpart   /tmp Linux是临时文件路径
        myServlet.setMultipartConfig(new MultipartConfigElement("/tmp/myproject/uploads",2 * 1024 * 1024, 4 * 1024 * 1024,0));
        FilterRegistration.Dynamic myFilter = servletContext.addFilter("myFilter", MyFilter.class);
        myFilter.addMappingForUrlPatterns(null, false,"/custom/**");
    }

   
}

启动SpringMVC
1、配置组件扫描包路径@ComponetScan(basePackages"")
2、添加ViewResolver bean显示声明
3、WebConfig类扩展WebMvcConfigurerAdapter 用来要求DispatcherServlet将对静态资源的请求转发到Servlet容器默认的Servlet上。

SpringMVC参数客户端传送参数方式:在这里插入图片描述

Spring在Spring3.0以后支持Java 的参数校验,可以帮助我们只需要注解就可以进行参数校验。
在这里插入图片描述

Spring MVC处理multipart形式数据

当前端需要上传文件等,SpringMVC就需要处理multipart形式的数据。multipart将表单拆成多个部分,文件部分可以时二进制,并且会有Content-Type:image/jpge
Controller中配置multipart数据解释器

DispatcherServlet 委托Spring中使用MultipartResolver策略接口解析multipart请求数据。另外需要在Servlet初始化器或者web.xml中指定multipart的配置,例如文件上传过程中的临时文件路径。代码如上面第一段代码。

显示配置使用MultipartResolver的哪一个实现作为multipart数据的解析器。

配置好以后Controller中使用@RequestPart(MultipartFile file)注解接收文件参数

Spring 异常处理

Spring处理异常有三种方式
1、Spring会将异常自动映射为http状态
2、在自动义的异常上使用@ResponseStatus,从而将其映射为某一http状态
3、方法上使用@ExceptionHandler,来处理异常

@ExceptionHandler(多个Exception.class用英文逗号隔开)
该方法放在相应的Controller中就可以处理整个Controller中抛出的特定的异常。

如果要集中处理所有Controller中的抛出的异常
需要配合@ControllerAdvice
例如:

@ControllerAdvice
public class CustomExceptionHandler extends ResponseEntityExceptionHandler 
{
    @ExceptionHandler(Exception.class)
    public final ResponseEntity<ErrorResponse> handleAllExceptions(Exception ex, WebRequest request) {
        List<String> details = new ArrayList<>();
        details.add(ex.getLocalizedMessage());
        ErrorResponse error = new ErrorResponse(ApplicationConstants.SERVER_ERROR, details);
        return new ResponseEntity<>(error, HttpStatus.INTERNAL_SERVER_ERROR);
    }
 
    @ExceptionHandler(RecordNotFoundException.class)
    public final ResponseEntity<ErrorResponse> handleUserNotFoundException(RecordNotFoundException ex,
                                                WebRequest request) {
        List<String> details = new ArrayList<>();
        details.add(ex.getLocalizedMessage());
        ErrorResponse error = new ErrorResponse(ApplicationConstants.RECORD_NOT_FOUND, details);
        return new ResponseEntity<>(error, HttpStatus.NOT_FOUND);
    }
}

@ControllerAdvice的类里面包含三种方法:
1、 带@ExceptionHandler注解的方法
2、带@InitBinder的方法
3、带@ModelAttribute注解的方法

Spring重定向

Spring重定向参数传递方式
1、通过Url模版进行重定向
url模版方式可以满足简单的String,和数字的参数传递
模版方式
Controller返回的字符串名以redirect开头,就是表示重定向,Controller中返回的模型数据会被拷贝给请求作为参数,使用模型如:“redirect:/hello/world/{username}”
那么模型中匹配到username的值会被放入url中,其他参数会被key=value的形式拼接在后。

2、使用flash属性
Spring提供通过RedirectAttributes 设置flash属性的方法,flash属性可以带着数据指导下一次请求,在重定向之前,flash属性会被复制到会话中,重定向之后flash属性会被转移到modle中。

Spring Web Flow

Spring Web Flow 是一个Web框架,是SpringMVC的扩展,适用于原属按规定流程运行的程序。其他的web框架,流程的定义分散在各个元素中,没有地方能够完整得描述整个流程。

Spring Web Flow 默认使用的是Spring表达式(Spring Expression Language)

通过配置一些bean来处理流程请求并执行流程,Spring Web Flow 不支持java配置,只能通过xml配置
Spring Web Flow 配置:
1、首先声明Spring Web Flow 的xml命名空间
2、装配流程执行器,它负责创建和执行流程
<flow:flow-excutor id=“flowExcutor”>
3、流程组册表(flow registry),负责加载流程定义,并让流程执行器能够使用它们
使用<flow:flow-registry>来配置
两种方式:1、通过base-path来定义

<!-- base-path定义了流程注册表会在 /WEB-INF/flows路径下-->
<flow:flow-registry id="flowRegistry" base-path="/WEB-INF/flows">
<flow:flow-location-pattern value="*-flow.xml">
<flow:flow-registry>

2、显示声明流程定义文件的位置

<flow:flow-registry id="flowRegistry" >
<!--path显示声明流程定义文件的位置  id显示声明流程的ID-->
<flow:flow-location id="pizzaFlow" path="/WEB-INF/flows/pizzaflow.xml">
<flow:flow-registry>

在Spring中通过FlowHandlerMapping帮助DispatcherServlet将请求转发给Spring Web Flow
其配置如下:

  <bean  class="org.springframework.webflow.mvc.servlet.FlowHandlerAdapter" >       
            <property name="flowExecutor" ref="flowExecutor"/>            
  </bean>

Spring Web Flow 主要有3个组件:
在这里插入图片描述
转移元素如果配置了on属性,如果触发了on的事件,就会转移到to流程种。on-exception=""发生特定异常时转移。

全局转移定义:

 <global-transitions>  
           <transition on="cancle" to="endState">        
  </global-transitions>

定义了以后,所有的状态都默认拥有这个cancel转移

这个Spring Web Flow用xml写代码,太难受了吧。

保护Web应用 Spring Security

Spring Security提供来娃们总金额美国的安全性解决方案。能够在Web请求级别和方法调用级别处理身份认证和授权。

Spring 3.2种的配置比较简单,使用@EnableWebSecurity/@EnableWebMvcSecurity(SpringMVC框架开发可用)就可以启用安全功能,需要配置在扩展WebSecurityConfigurerAdapter的类上。@EnableWebMvcSecurity有参数解析器,可以通过带有@AuthenticationPrincipal注解的参数获得认证用户的principal。
重写WebSecurityConfigurerAdapter的三个config方法(必须重写否则整个应用会被锁住),只需要填充相应的表和字段,之后可以什么都不用做就可以控制系统的访问权限,乃至方法的调用权限。
Spring Security为方法的安全提供的注解:
@PreAuthorize和@PostAuthorize
方法上的注解使用可以参考该书14章

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值