zoukankan      html  css  js  c++  java
  • SpringMvc笔记一

    SpringMVC介绍

    1. Strut2缺点

    1)  效率低

    2)  标签库非常丰富,但业界使用的并不多,业界使用JSTL(通用)

    Jsp/servlet/struts1/struts2/springmvc

    1. SpringMVC工作原理

     

    1. 体验springmvc

    开发步骤:

    1、  创建一个工程

    2、  导入jar

    spring-aop-3.2.2.jar                   AOP

    spring-aspects-3.2.2.jar            面向切面

    spring-beans-3.2.2.jar               核心包

    spring-context-3.2.2.jar            扩展包

    spring-context-support-3.2.2.jar               对扩展包支持

    spring-core-3.2.2.jar                  核心包

    spring-expression-3.2.2.jar      spring表达式

    spring-web-3.2.2.jar                  b/s

    spring-webmvc-3.2.2.jar          springmvc

    com.springsource.org.aopalliance-1.0.0.jar             aop

    com.springsource.org.apache.commons.logging-1.1.1.jar     通用日志

    3、  需求:http://localhost/springmvc/home.action

    最终要转向一个jsp页面 /WEB-INF/pages/index.jsp

    4、  配置DispatcherServlet,在web.xml中配置

    <?xml version="1.0" encoding="UTF-8"?>

    <web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee"

             xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

             xsi:schemaLocation="http://java.sun.com/xml/ns/javaee

             http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">

             <!-- 配置springmvc核心分发器,对所有的url后缀为action的进行过滤 -->

             <servlet>

                       <servlet-name>action</servlet-name>

                       <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>

             </servlet>

             <servlet-mapping>

                       <servlet-name>action</servlet-name>

                       <url-pattern>*.action</url-pattern>

             </servlet-mapping>

             <welcome-file-list>

                       <welcome-file>index.jsp</welcome-file>

             </welcome-file-list>

    </web-app>

    l  Springmvc 什么时间加载的?

    它不随容器启动而启动,它是第一次访问时进行加载。

    l  改动springmvc的配置文件的位置

    改到classpath下

             <servlet>

                       <servlet-name>action</servlet-name>

                       <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>

                       <!-- 改变springmvc配置文件的位置和名称 -->

                       <init-param>

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

                                <param-value>classpath:springmvc-servlet.xml</param-value>

                       </init-param>

             </servlet>

    5、  配置Controller

    handlerMapping默认BeanName方式

    <bean name="/home.action" class="cn.itcast.controller.HomeController"/>

    6、  写jsp页面 在WEB/INF/pages/index.jsp

    7、  配置转向jsp

    1)  在Controller处理完返回一个逻辑名 new ModelAndView(“逻辑名”)

    2)  在springmvc-servlet.xml中配置Jsp视图解析器,内部资源视图解析器

    <!-- 配置视图jsp解析器      

    内部资源视图解析器     前缀+逻辑名+后缀  /WEB-INF/pages/   index   .jsp -->                  

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

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

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

    </bean>

    了解常用的handlerMapping

    1)   BeanNameUrlHandlerMapping 

    <bean

    id="beanNameUrlHandlerMapping" class="org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping"/>

    找寻配置的Controller,搜索器name属性,找到则转向jsp

    2)   SimpleUrlHandlerMapping

    前提controller要声明id属性

    <bean id="homeController" name="/home.action" class="cn.itcast.controller.HomeController"/>

             <bean

    id="simpleUrlHandlerMapping" class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">

                       <property name="mappings">

                                <props>

                                         <prop key="/a.action">homeController</prop>

                                         <prop key="/b.action">homeController</prop>

                                         <prop key="/c.action">homeController</prop>

                                </props>

                       </property>

             </bean>

    当有beanName方式和simple方式它们声明冲突时,也就是同名url。这时springmvc框架如何处理?

    l  首先配置重名不会引起冲突。

    l  当同名时,springmvc框架先按配置文件配置的顺序执行,当发现有一个URL满足,就跳出。

    支持用户自定义顺序。增加order属性即可。

    <proprety name=”order” value=”n”/>             n是一个整数,从0开始,越小优先级越高

    3)   ControllerClassName 控制器类名

    <bean

    id="controllerClassNameHandlerMapping" class="org.springframework.web.servlet.mvc.support.ControllerClassNameHandlerMapping"/>

    访问链接:

    http://localhost/springmvc/homeController.action

    链接有多个单词时,都小写。

    也可以去掉Controller

    1. 常见的Contoller控制器

    1)   Command命令控制器

    规定:传参,command,对应实体

    在构造方法中要指定command对应实体

             public MyCommandController() {

                       this.setCommandClass(Person.class);

             }

    2)   简单的Form控制器

    规定:链接以get方式提交时转向formView;链接以post方式提交转向successView

             <bean class="cn.itcast.controller.PersonFormController">

                       <property name="formView" value="PersonForm"/>    <!-- 转向的form视图 -->

                       <property name="successView" value="index"/>          <!-- 成功视图 -->

             </bean>

    3)   Wizard控制器

    需求:个人简历,包括:简历信息、教育经历、工作经历

    1)  继承  extends AbstractWizardFormController

    2)  构造方法时设置关联的实体

             public MyWizardController() {

                       this.setCommandClass(Person.class);

                       this.setCommandName("p");                    //设置页面访问的对象

             }

    3)  设置processFinish成功完成要处理的事情;设置processCancel取消转向页面

    4)  做多个页面

    5)  配置页面和顺序

             <bean class="cn.itcast.controller.MyWizardController">

                       <!-- 配置这个向导有哪些页面和页面的流转顺序 -->

                       <property name="pages">

                                <list>

                                         <value>wizard/PersonInfo</value>

                                         <value>wizard/PersonEdu</value>

                                         <value>wizard/PersonWork</value>

                                </list>

                       </property>

             </bean>

    1. 注解方式开发

    1)   开发步骤:

    1、  新建项目

    2、  导入jar包

    3、  创建controller,用注解方式声明

    4、  在web.xml配置核心分发器DispatcherServlet

    5、  创建一个springmvc-servlet.xml,只配置注解开发方式,配置视图解析器

    6、  创建jsp

    2)   需求:人员的管理,CRUD

    1、  内存数据库,模拟一个service层

    2、  初始化数据,10条,模拟列表页面

    3、  将数据传递给页面,(集合)

    4、  新增从页面获取数据,Model

    3)   注意:新增保存如何传参

    public String saveOrUpdate(String name, Integer age){

    参数只要在方法中声明,springmvc框架会自动从页面中找寻对应变量,找寻变量的set方法,找到就设置,找不到抛弃。

    l  方法一,按字段从页面取值

             @RequestMapping("/person/saveOrUpdate")

             public String saveOrUpdate(String name, Integer age){

                       Person p = new Person();

                       p.setName(name);

                       p.setAge(age);

                      

                       ps.insert(p);                                                              //调用servcie.insert方法插入记录

                      

                       return "redirect:/person/all.action";                         //转向列表action

             }

    l  方法二,传实体对象

             @RequestMapping("/person/saveOrUpdate")

             public String saveOrUpdate(Person p){            //可以传递字段,也可以传递实体对象

                       ps.insert(p);                                                              //调用servcie.insert方法插入记录

                      

                       return "redirect:/person/all.action";                         //转向列表action

             }

    修改方法:

    4)   删除方法

    封装到数组,但名称不同,页面一个名称,声明的属性另外一个名称

    public String deleteMuch(@RequestParam("id")Integer[] ids){

    当封装多个同名值时,springmvc如何封装?

    1)  当类型为string,多个值以逗号隔开,

    2)  当类型为integer或者double,date等只留第一个值;不会抛出错误。、

    5)   传参总结

    1)  从页面传递参数到action

    Struts2               Model

    Springmvc       可以通过单个属性,也可以通过实体对象

    2)  从action传递参数到页面

    Struts2               Model

    Springmvc         Model(Map)

    1. 图片上传

    1)  改造form enctype=”multipart/form-data” ;使用springmvc提供标签

    2)  在后台接收参数二进制流

    3)  配置单独的文件上传视图解析器

    修改修改页面,先让数据回显,使用springmvc提供的标签

    <%@ taglib uri="http://www.springframework.org/tags/form" prefix="sf" %>

    <sf:form

    action="${pageContext.request.contextPath}/person/saveOrUpdate.action" method="post">

    <sf:hidden path="id"/>

    <sf:input path="name"/>

    1. 注意修改时接收对象参数:

    <sf:form

             enctype="multipart/form-data"

             action="${pageContext.request.contextPath}/person/saveOrUpdate.action"

             modelAttribute="p"

             method="post">model.addAttribute("p", p);                            //数据放到response

    modelAttribute接收设置在Model中的对象

    1. 图片显示

    默认只扫描.action结尾

             <servlet-mapping>

                       <servlet-name>action</servlet-name>

                       <url-pattern>*.action</url-pattern>

             </servlet-mapping>

    扫描所有URL

             <servlet-mapping>

                       <servlet-name>action</servlet-name>

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

             </servlet-mapping>

    <mvc:resources location="/upload/" mapping="/upload/**"/>

    1. 文件上传需要一个视图解析器

             <!-- 文件上传视图解析器,它的名字必须为multipartResolver -->

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

                       <property name="maxUploadSize" value="10485760"/><!-- 10M -->

             </bean>

    还需要两个jar

    commons-fileupload-1.2.2.jar

    commons-io-2.0.1.jar

    1. 框架中动态资源和静态资源分别解析

    Apache + tomcats(集群)

    Apache负责负载均衡,同时它来解析静态资源(js,css,image),tomcat做动态资源解析(jsp,action) 静态内容处理比动态快很多倍。

    Nginx + tomcats

    它的速度是apache的100倍。

    1. 校验JSR303 hibernate

    com.springsource.javax.validation-1.0.0.GA.jar      校验规则

    hibernate-validator-4.1.0.Final.jar                              hibernate实现

    log4j.jar

    slf4j-api-1.5.8.jar

    slf4j-log4j12.jar

    后台校验步骤:

    1)  在实体上配置要校验的属性

    public class Person {

             private Integer id;

             @Size(min=6,max=30,message="用户名称必须大于6个字符,小于30个字符。")

             private String name;

    2)是否启用校验

    @Valid Person p

    3)  发生错误,在页面上提示    

    BindingResult br      传递错误信息

    4)  在新增页面中加错误提示

  • 相关阅读:
    MapReduce 基础
    HDFS 快照(了解)
    HDFS 回收站(了解)
    HDFS 数据拷贝
    微信小程序(9)——多个空格写法
    react中使用jsonp跨域
    docker 介绍
    事务,悲观锁和乐观锁
    接口幂等性
    分布式爬虫
  • 原文地址:https://www.cnblogs.com/biaogejiushibiao/p/9726846.html
Copyright © 2011-2022 走看看