SSM Spring MVC

2020-09-15  本文已影响0人  极速魔法

SpringMVC

SpringMVC 实现了MVC,轻量级web框架
封装了Servlet共有的行为(参数封装,视图转发)

/web.xml/

<!-- DispatchServlet配置 -->
<servlet>
    <servlet-name>DispatcherServlet</servlet-name>
<servletclass>org.springframework.web.servlet.DispatcherServlet</servlet-class>

 <init-param>
   <param-name>contextConfigLocation</param-name>   <param-value>classpath:spring-mvc.xml</param-value>
 </init-param> 
<!-- 应用程序启动加载配置文件 ,值是正整数-->
<load-on-startup>2</load-on-startup>
</servlet>

<servlet-mapping>
  <servlet-name>DispatcherServlet</servlet-name>
    <!--/匹配所有访问路径,不会匹配*.jsp,/*匹配所有,包括*.jsp -->
    <url-pattern>/</url-pattern>
</servlet-mapping>

java web执行流程

tomcat服务器

  1. 接收请求,解析请求资源地址
  2. 创建request对象
  3. 创建response对象
  4. 调用目标资源,DispatchServlet调度分发给对应的controller
  5. 获得response中内容,组装http响应返回给客户端

SpringMVC执行流程

流程图解

spring mvc三大组件�

处理器映射器(HandlerMapping)
处理器适配器(HandlerAdaptor)
视图解析器(ViewResolver)

<!--处理器映射器-处理器适配器功能增强;支持json读写 -->
<mvc:annotation-driven />

<!-- 视图解析器 -->`
<bean id="viewResolver class="xxx.InternalResourceViewResolver">
<!-- 前缀 -->
    <property name="prefix" value="/WEB-INF/pages/"></property>
  <property name="suffix" value=".jsp"></property>
</bean>

RequestMapping 注解

// xxx/quick?accountName=tom
@RequestMapping(path=“/quick”,method=RequestMethod.GET,params={“accountName”})
public String findByName(String accountName) 

获取参数

基本类型参数
get参数和controller中的参数名一致

对象参数
表单的name值和 java bean 属性一致

集合类型参数
集合参数包装到一个POJO中

自定义转换器

public class DateConverter implements Converter<String,Date> {
    @Override
    public Date convert(String s) {...}
}

/spring-mvc.xml/

<!--处理器映射器和适配器增强-->
<mvc:annotation-driven conversion-service="conversionService"></mvc:annotationdriven>

<!-- 自定义转换器 -->
<bean id="conversionService" class="xxx.COnversionServiceFactoryBean">
    <property name="converters">
    <set>
        <bean class="com.lagou.DateConverter"/>
    </set>
</bean>
/*
* @RequestParam,解决表单和控制器参数不一致
* url:xxx/?pageNo=2
*/
@RequestMapping("/findByPage")
public String findByPage(�@RequestParam(name="pageNo",defaultValue="1",required=false) Integer pageNum)

// 获取请求头 cookie信息赋值给 变量 cookie
public String requestHead(@RequestHeader("cookie") String cookie)

// 获取cokie中key= JSESSIONID的值 给变量 jessionId
public String cookieValue(@CookieValue("JSESSIONID") String jessionId)

响应

// 请求转发,不走视图解析器,foraward 后面跟全路径,
return “forward:/WEB-INFO/pages/success.jsp”;
// 跳转到控制器方法
return “forward:/product/products”;

// 重定向,不走视图解析器
return "redirect:/index.jsp";

// 页面取model的值 ${username}
public String forward(Model model) {
    //底层使用request.setAttribute()
    model.addAttribute("user","tom");
}
// 方式一
public ModelAndView returnModelView() {
    ModelAndView modelAndView = new ModelAndView();
    //设置模型数据
    modelAndView.addObject("username", " lagou"); 
    //设置视图名称 
    modelAndView.setViewName("success"); 
    return modelAndView;
}

// 方式二
public ModelAndView returnModelView(ModelAndView modelAndView){...}

@SessionAttributes

多个请求之家共享数据,作用于

// request域中 model中存入key 为 username时,同步到session中
@SessionAttributes("username")

静态资源访问

/spring-mvc.xml/

<!--放行全部静态资源-->
<mbc:defalut-servlet-handler/>

Spring MVC进阶

json

// @RequestBody,提交数据为json形式时,通过 HttpMessageConverter接口转换为对应的POJO对象。
@RequestMaping("/ajaxRequest")
@RequestBody //响应转为json
public void ajaxRequest(@RequestBody List<User> users) {
    return users;
}

RESTful风格

@RequestMapping(value="/user{id}",method=RequestMethod.GET)
@ResponseBody // 直接响应,不会页面跳转
public String findById(@PathVariable Integer id) { 
// @PathVariable获取占位符的值,占位符和参数名相同
    return ”findById“;
}

@RestController // 组合@Controller和@ResponseBody
@GetMapping("/user/{id}") // @RequestMapping(value="/user{id}",method=RequestMethod.GET)

文件上传

<!--文件上传解析器--> <bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">

<!-- 设定文件上传的最大值为5MB,5*1024*1024 -->

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

<!-- 设定文件上传时写入内存的最大值,如果小于这个参数不会生成临时文件,默认为10240 -->

<property name="maxInMemorySize" value="40960"></property> </bean>
// 单文件MultipartFile,多文件MultipartFile[]遍历数组依次保存
public String fileUpload(String username,MultipartFile filePic) {
    // 上传的文件名
  String original=filePic.getOriginalFilename();
    filePic.transferTo(new File("/upload"+original));
}

Spring MVC异常处理

接口 HandleExceptionResolver(异常处理器)

/web.xml/

<!--处理500异常--> 
<error-page>
    <error-code>500</error-code>

<location>/500.jsp</location> </error-page> <!--处理404异常--> <error-page>
<error-code>404</error-code>
<location>/404.jsp</location> 
</error-page>

拦截器(interceptor)

拦截器 过滤器区别

public class MyInterceptor implements HandleInterceptor {
// 目标方法执行之前,return true 放行
    public boolean preHandler()

// 目标方法执行之后,视图对象返回之前,获得Controller处理后的ModelAndView
    public void postHandler()

// 流程都执行完(视图完成了跳转后)
    public void afterCompletion()
}

/spring-mvc.xml/

<!--配置拦截器-->
 <mvc:interceptors>

    <mvc:interceptor> <!--对哪些资源执行拦截操作-->
        <mvc:mapping path="/**"/>
        <bean class="com.lagou.interceptor.MyInterceptor1"/>
    </mvc:interceptor>

</mvc:interceptors>

Spring整合mybatis

<!--注解组件扫描--> <context:component-scan base-package="com.lagou.service"/>

<!--spring整合mybatis-->

<context:property-placeholder location="classpath:jdbc.properties"/>

<bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource">

<property name="driverClassName" value="${jdbc.driver}"/>

<property name="url" value="${jdbc.url}"/>

<property name="username" value="${jdbc.username}"/>

<property name="password" value="${jdbc.password}"/>

</bean>

<!--SqlSessionFactory创建交给spring的IOC容器-->

<bean id="sqlSessionFactory"

class="org.mybatis.spring.SqlSessionFactoryBean">

<!--数据库环境配置-->

<property name="dataSource" ref="dataSource"/>

<!--类型别名配置-->

<property name="typeAliasesPackage" value="com.lagou.domain"/>

<!--如果要引入mybatis主配置文件,可以通过如下配置-->

<!--<property name="configLocation"

value="classpath:SqlMapConfig.xml"/>-->

</bean>

<!--映射接口扫描配置,由spring创建代理对象,交给IOC容器-->
<!-- 对应SqlMapConfig.xml
<mappers>
    <package name="com.lagou.dao"/>
</mappers> 
-->
<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">

<property name="basePackage" value="com.lagou.dao"/>

</bean>

spring整合 spring mvc

<!--spring 与 web容器整合--> 
<listener>
  <listener-class>
  org.springframework.web.context.ContextLoaderListener
  </listener-class> 
</listener> 

<context-param>

    <param-name>contextConfigLocation</param-name>

    <param-value>classpath:applicationContext.xml</param-value> 
</context-param>

字段和属性名不一致?配置resultMap

上一篇下一篇

猜你喜欢

热点阅读