Spring_MVC

5 篇文章 0 订阅
3 篇文章 0 订阅

SpringMVC

为了快速启动,加一个键值对:

archetypeCatalog internal

一:基本概念了解:

是基于组件的;

(1)表现层:

1表现层:现层:SpringMVC 浏览器—>请求参数–>表现层—>响应请求–>浏览器业务层:

2spring框架

3持久层:Mybatis

(2)MVC设计模型:

​ M模块:java Bean

​ V:view:jsp

​ C:Contraller;控制器

(3)SpringMVC和Struts的优劣分析:

共同点:

  1. 底层都离不开原始的ServletAPI
  2. 都是基于mVC的表现层框架;

区别:

  1. 入口核心是Servlet; ------是Filter
  2. 基于方法设计的;--------是基于类的,每次创建一个动作类
  3. SPringMVC支持JSR303,处理ajax的请求更方便;

二入门程序:

release:

1pom.xml

 <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-compiler-plugin</artifactId>
            <version>3.8.1</version>
            <configuration>
                <!--根据个人需要自己修改-->
                <source>8</source>
                <target>8</target>
            </configuration>
        </plugin>
<?xml version="1.0" encoding="UTF-8"?>

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>

  <groupId>cn.itcast</groupId>
  <artifactId>springmvc_day01_01_quickstart</artifactId>
  <version>1.0-SNAPSHOT</version>
  <packaging>war</packaging>

  <name>springmvc_day01_01_quickstart Maven Webapp</name>
  <!-- FIXME change it to the project's website -->
  <url>http://www.example.com</url>

  <properties>
      <!--jak运行编译器的版本 --!>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <maven.compiler.source>1.8</maven.compiler.source>
    <maven.compiler.target>1.8</maven.compiler.target>
    <spring.version>5.0.2.RElEASE</spring.version>
  </properties>

  <dependencies>
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-web</artifactId>
      <version>5.2.16.RELEASE</version>
    </dependency>
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-webmvc</artifactId>
      <version>5.2.16.RELEASE</version>
    </dependency>
    <dependency>
      <groupId>javax.servlet</groupId>
      <artifactId>servlet-api</artifactId>
      <version>2.5</version>
      <scope>provided</scope>
    </dependency>
    <dependency>
      <groupId>javax.servlet.jsp</groupId>
      <artifactId>jsp-api</artifactId>
      <version>2.0</version>
      <scope>provided</scope>
    </dependency>
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>4.11</version>
      <scope>test</scope>
    </dependency>
  </dependencies>

  <build>
    <finalName>springmvc_day01_01_quickstart</finalName>
    <pluginManagement><!-- lock down plugins versions to avoid using Maven defaults (may be moved to parent pom) -->
      <plugins>

        <plugin>
          <groupId>org.apache.maven.plugins</groupId>
          <artifactId>maven-compiler-plugin</artifactId>
          <version>3.8.1</version>
          <configuration>
            <!--根据个人需要自己修改-->
            <source>8</source>
            <target>8</target>
          </configuration>
        </plugin>
        <plugin>
          <artifactId>maven-clean-plugin</artifactId>
          <version>3.1.0</version>
        </plugin>
        <!-- see http://maven.apache.org/ref/current/maven-core/default-bindings.html#Plugin_bindings_for_war_packaging -->
        <plugin>
          <artifactId>maven-resources-plugin</artifactId>
          <version>3.0.2</version>
        </plugin>
        <plugin>
          <artifactId>maven-compiler-plugin</artifactId>
          <version>3.8.0</version>
        </plugin>
        <plugin>
          <artifactId>maven-surefire-plugin</artifactId>
          <version>2.22.1</version>
        </plugin>
        <plugin>
          <artifactId>maven-war-plugin</artifactId>
          <version>3.2.2</version>
        </plugin>
        <plugin>
          <artifactId>maven-install-plugin</artifactId>
          <version>2.5.2</version>
        </plugin>
        <plugin>
          <artifactId>maven-deploy-plugin</artifactId>
          <version>2.8.2</version>
        </plugin>
      </plugins>

    </pluginManagement>
  </build>
</project>

2web.xml

<!DOCTYPE web-app PUBLIC
                "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
                "http://java.sun.com/dtd/web-app_2_3.dtd" >

<web-app>
<display-name>Archetype Created Web Application</display-name>
<servlet>
  <servlet-name>dispatcherServlet</servlet-name>
  <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
  <init-param>
    <param-name>contextConfigLocation</param-name>
    <param-value>classpath:springmvc.xml</param-value>
  </init-param>
  <load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
  <servlet-name>dispatcherServlet</servlet-name>
  <url-pattern>/</url-pattern>
</servlet-mapping>
</web-app>

<!DOCTYPE web-app PUBLIC
                "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
                "http://java.sun.com/dtd/web-app_2_3.dtd" >

<web-app>
<display-name>Archetype Created Web Application</display-name>

  <!--前端控制器-->
<servlet>
  <servlet-name>dispatcherServlet</servlet-name>
  <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
  <init-param>
    <param-name>contextConfigLocation</param-name>
    <param-value>classpath:springmvc.xml</param-value>
  </init-param>
  <load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
  <servlet-name>dispatcherServlet</servlet-name>
  <url-pattern>/</url-pattern>
</servlet-mapping>
  <!--中文乱码过滤器-->
  <filter>
    <filter-name>ChracterEncondingFilter</filter-name>
    <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
    <init-param>
      <param-name>encoding</param-name>
      <param-value>UTF-8</param-value>
    </init-param>
  </filter>
 <filter-mapping>
   <filter-name>ChracterEncondingFilter</filter-name>
   <url-pattern>/*</url-pattern>
 </filter-mapping>


</web-app>

3配置文件:springmvc.xml

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:mvc="http://www.springframework.org/schema/mvc"
       xmlns:context="http://www.springframework.org/schema/context"
       xsi:schemaLocation=
               "http://www.springframework.org/schema/beans
               http://www.springframework.org/schema/beans/spring-beans.xsd
                http://www.springframework.org/schema/context
         https://www.springframework.org/schema/context/spring-context.xsd
          http://www.springframework.org/schema/mvc
        https://www.springframework.org/schema/mvc/spring-mvc.xsd">

    <!--开启注解的方式-->
    <context:component-scan base-package="cn.itcast"></context:component-scan>
    
    
    <!--视图的解析器对象-->
    
     <bean id="internalResourceViewResolver" 
           class="org.springframework.web.servlet.view.InternalResourceViewResolver">
         <property name="prefix" value="/WEB-INF/pages/"></property>
         <property name="suffix" value=".jsp"></property>
     </bean>
    
    <!--开启springmvc框架注解的支持-->
    <mvc:annotation-driven></mvc:annotation-driven>

</beans>

4逻辑

请求------前端控制器--------》处理器映射器----->

​ |

​ |

​ 响应---- -->前端控制器 ----------->视图适配器–>视图解析器

三注解:

@RequestMapping:

  1. 作用:用于建立请求URL和处理请求方法之间的对应关系;
  2. 属性:
    1. value和path一样,都是路径名字
    2. method:get/psot: @RequestMapping(path = “/test”,method = {RequestMethod.GET})用于指定请求的方式;
    3. params:规定参数;
    4. headers:用于规定发送的请求头

四:请求参数的绑定:

变量用& 参数用?分割

1三种参数类型:
  1. 基本类型
  2. javaBean
  3. 封装的集合;

五定义自定义类型转换器

  1. 大多数都处理好了,例如String转integer.等;
  2. 实现Converter接口:
package cn.itcast.utils;

import org.springframework.core.convert.converter.Converter;

import javax.xml.crypto.Data;
import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;

public class StringToDateConverter implements Converter<String , Date> {

    @Override
    public Date convert(String source) {
        Date parse = null;
        if(source==null){
            throw new RuntimeException("请你传入参数;");
        }
        DateFormat df =  new SimpleDateFormat("yyyy-MM-dd");
        try {
            parse = df.parse(source);
        } catch (ParseException e) {
           throw new RuntimeException("类型装换失败");
        }

        return parse;
    }
}

springMVC.xml

   <!--配置自定义类型转换器-->
    <bean id="conversionServiceFactoryBean" class="org.springframework.context.support.ConversionServiceFactoryBean">
        <property name="converters">
            <set>
                <bean class="cn.itcast.utils.StringToDateConverter"></bean>
            </set>
        </property>
        
        
    </bean>

    <!--开启springmvc框架注解的支持-->
 <mvc:annotation-driven ></mvc:annotation-driven  >
    <!--conversion-service ="conversionService"这一句是为了搭配自定类型转换器的,需要写到mvc里面,但是写了就会启动失败-->



</beans>

六常用注解:

  1. @ RequestParam

    1. 提交的参数名,和去映射的方法的形参名不一样的时候;可以给形参前面加注解;
    2. 属性值name=“提交的参数名”;
  2. @RequestBody

    1. get没有
    2. 用于获取请求头的内容;直接得到是键值对结构的数据;
    3. 给方法的形参前加注解;表示这个形参就代表的请求体内容,输入这个形参就行
    4. 异步请求 用的多
  3. @PathVaribale

    1. 基于RESTful风格;

    2.   @RequestMapping("/testServlet/{sid}")
           public String  testServlet(@PathVariable(name = "sid") String  id){
               System.out.println(id);
               return "success";
           }
      

4 @HiddentHttpMenthodFillter过滤器

​ 切换get—post之间切换

5:@RequestHeader

​ 映射的方法(控制器方法)的形参.: 输出请求头

6:@CookieValue

​ value = “jSESSIONID”

得到cookie的值;

7**@ModuleAttribute**

  1. 有返回值的方法:可以放在方法上;使得不少控制器方法先执行;同一类的另一个有这个注解的方法执行;
    1. 常用于表单提交的时候,三个内容,一个内容不写,扔使用数据库原来的值,此时可以继续使用哪个值的方法执行(怎么继续,可以让他去数据库查询);
  2. 无返回值的方法;
    1. ​ 需要提供一个map的集合;然后让控制器方法从map中去,(1)此时需要这个注解要修饰这个方法的形参,(2)并且还要写到无返回值的这个方法的上面;

8@SessionAtrribute;

  1. 作用:用于共享变量之间;在Seession

    1.  @Controller
       @RequestMapping("/param")
       @SessionAttributes(value = {"msg"})
       public class ParamController {
      

      对于在request域中的,可以通过HttpServlet获取。也可以通过Model接口和她的实现类实现;

      对于在Session域中这个注解;

    ${requestScope}
    
    ${sessionScope}
    

SpringMVC第二天

一响应结果和视图:

返回值类型

1void默认返回值;

2 jquery +jsonAjax的异步传送的;

​ 导入jar包和jquery的js;

 <dependency>
      <groupId>com.fasterxml.jackson.core</groupId>
      <artifactId>jackson-annotations</artifactId>
      <version>2.13.0-rc1</version>
    </dependency>


    <dependency>

      <groupId>com.fasterxml.jackson.core</groupId>
      <artifactId>jackson-databind</artifactId>
      <version>2.13.0-rc1</version>
    </dependency>
    <dependency>
      <!--jackson的一些jar包-->

      <groupId>com.fasterxml.jackson.core</groupId>
      <artifactId>jackson-core</artifactId>
      <version>2.13.0-rc1</version>
    </dependency>

二:MVC实现文件上传

(1):第三方组件Com实现文件上传;两个jar包: commons-io 和commons-fileupload

2:相对于平常,取消 了解析(判断为空,设置文件夹,)


<form action="/user/hello" method="post" enctype="multipart/form-data">
    选择:<input type="file" name="upload"> </br>
    <input type="submit" value="上传">
</form>

3:配置文件解析器xml:解析器的名字id是规定的,不能随意写;

 
    <!--文件上传的解析器对象-->
    <bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
       <!--10MB的大小-->
        <property name="maxUploadSize" value="103535353510241024"></property>

4

   @RequestMapping(path = "/hello")
    public String sayHello(HttpServletRequest  request ,MultipartFile upload ) throws IOException {
        System.out.println("Hello StringMVC");
        //DiskFileItemFactory  f = new Disk
        //上传文件;
        //位置
        String path = request.getSession().getServletContext().getRealPath("/updaloads/");
        File file = new File(path);
        //判断是否有
        if(!file.exists()){
            file.mkdirs();
        }   
        //改上传的文件的名字
        String originalFilename = upload.getOriginalFilename();
        //随机名字+
        String uuid = UUID.randomUUID().toString().replace("-","");

        originalFilename= uuid+"-" +originalFilename;
        //SpringMVC的传送文件的方法
        upload.transferTo(new File(path,originalFilename));
        return "success";
    }

维克多,艾米丽,斯皮尔伯格导演的—幸福的终点站

(2)文件上传跨服务器的方式: 客服端—>应用服务器—存储到---->图片服务器

1:两个jar包:jsery的两个;

三: 异常处理技术:

自定义的异常类:

package cn.itcast.utils;

public class SysException  extends Exception{
    private String message;

    public SysException(String message, String message1) {
        super(message);
        this.message = message1;
    }

    public SysException(String s) {
        this.message =s;
    }

    @Override
    public String  getMessage() {
        return message;
    }

    @Override
    public String toString() {
        return "SysException{" +
                "message='" + message + '\'' +
                '}';
    }

    public void setMessage(String message) {
        this.message = message;
    }
}

异常处理器

package cn.itcast.utils;

import org.springframework.web.servlet.HandlerExceptionResolver;
import org.springframework.web.servlet.ModelAndView;

import javax.net.ssl.HandshakeCompletedEvent;
import javax.net.ssl.HandshakeCompletedListener;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.sound.midi.SysexMessage;

/*
* 异常处理器
* */
public class SysExceptionResolver implements HandlerExceptionResolver {

    @Override
    public ModelAndView resolveException(
            HttpServletRequest httpServletRequest, HttpServletResponse 
            httpServletResponse, Object o, 
            Exception e) {
       SysException ee=  null;
        if (e instanceof SysException ){
             
           ee = (SysException)e;
        }else {
            ee = new SysException("维护");
            
        }
        ModelAndView mv = new ModelAndView();
        mv.addObject( "errorMsg",e.getMessage());
        mv.setViewName("error");
        return mv;
        
    }
}

配置异常处理器:

<!--配置异常处理器-->
 <bean id="sys" class="cn.itcast.utils.SysExceptionResolver"></bean>

四拦截器的作用 :

类似过滤器;但是拦截器是SpringMVC特有的,只有MVC才有;(放行)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值