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)  在新增页面中加错误提示

  • 相关阅读:
    Java for LeetCode 229 Majority Element II
    Java for LeetCode 228 Summary Ranges
    Java for LeetCode 227 Basic Calculator II
    Java for LintCode 颜色分类
    Java for LintCode 链表插入排序
    Java for LintCode 颠倒整数
    Java for LintCode 验证二叉查找树
    Java for LeetCode 226 Invert Binary Tree
    Java for LeetCode 225 Implement Stack using Queues
    Java for LeetCode 224 Basic Calculator
  • 原文地址:https://www.cnblogs.com/biaogejiushibiao/p/9726846.html
Copyright © 2011-2022 走看看