JAVAEEは、フレームワーク07-SpringMVCファイルのアップロードと例外処理メカニズムを確認します

1. SpringMVCファイルのアップロード

1.1ファイルアップロードの3つの要素

  1. フォーム項目タイプ= "ファイル"を含める必要があります

  2. フォームの送信方法は投稿です

  3. フォームのenctype属性はマルチパートフォームであり、enctype = "multipart / form-data"

<h3>用户注册-文件上传</h3>
<form action="fu" method="post" enctype="multipart/form-data">
    姓名: <input type="text" name="name" /> <br/>
    年龄: <input type="text" name="age" /> <br/>
    头像: <input type="file" name="headImg" /> <br/>
    <input type="submit" value="注册">
</form>

1.2ファイルのアップロード

1.2.1依存関係を追加する

<dependency>
    <groupId>commons-fileupload</groupId>
    <artifactId>commons-fileupload</artifactId>
    <version>1.3.1</version>
</dependency>
<dependency>
    <groupId>commons-io</groupId>
    <artifactId>commons-io</artifactId>
    <version>2.3</version>
</dependency>

1.2.2構成ファイルのパーサー

注:

  1. SpringMVC.xmlでファイルパーサーを構成する

  2. ファイルパーサーのIDは「multipartResolver」である必要があります

<!--配置文件上传解析器-->
<bean id="multipartResolver"
    		class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
    <!--上传文件的编码类型-->
    <property name="defaultEncoding" value="UTF-8"/>
    <!--文件上传的总大小(10M)-->
    <property name="maxUploadSize" value="10485600"/>
    <!--单个文件的大小(5M)-->
    <property name="maxUploadSizePerFile" value="5242800"/>
</bean>

1.2.3使用

注:

1. Controllerのmethodパラメーターに、MultipartFile型のパラメーターを記述します。

2.パラメータ名は、フォームの「ファイルアップロードアイテム」の名前属性と一致している必要があります

@RequestMapping("/upload")
@ResponseBody
public void fileUpload(String name, int age, MultipartFile headImg) throws IOException {

}

1.2.4ファイルを保存する

@RequestMapping("/upload")
@ResponseBody
public void fileUpload(String name, int age, MultipartFile headImg) throws IOException {
    //获取普通项    
    System.out.println(name);
    System.out.println(age);
    
	//处理文件上传项
    //0.判断文件是否为空
    if (!headImg.isEmpty()) {
        //1.获取上传文件的文件名称
        String filename = headImg.getOriginalFilename();  //6b.jpeg
        //2.处理文件名
        filename = new Date().getTime() + "_" + filename; //1573701830347_6b.jpeg
        //3.保存该文件
        headImg.transferTo(new File("d:\\" + filename));
    }
}

1.2複数ファイルのアップロード

1.2.1フォームコード

<form action="/upload" method="post" enctype="multipart/form-data">
    姓名: <input type="text" name="name" /> <br/>
    图片1: <input type="file" name="uploadFile"><br/>
    图片2: <input type="file" name="uploadFile"><br/>
    <input type="submit" value="提交">
</form>

1.2.2バックグラウンドコード

注:

複数のファイルをアップロードするときは、MultipartFileタイプを配列に変更するだけです。

ただし、配列の名前は、フォームの「ファイルアップロードアイテム」のname属性と同じである必要があります。

@RequestMapping("/upload")
@ResponseBody
public void fileUpload(String name, MultipartFile[] uploadFile) throws IOException {
    
}

2. SpringMVCインターセプター

2.1インターセプターの概要

Spring MVCのインターセプタークラスは、サーブレットの開発におけるフィルターと同様に、プロセッサーの前処理と後処理に使用されます。

2.2インターセプターの使用

2.2.1カスタムインターセプターを作成する

クラスを定義し、HandlerInterceptorインターフェースを実装し、preHandleメソッドをオーバーライドする

public class MyInterceptor implements HandlerInterceptor {
    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, 		Object handler) {
        System.out.println("MyInterceptor拦截器执行了...");
        //返回true表示放行,返回false表示不放行
        return true;
    }
}

2.2.2カスタムインターセプターを設定する

springmvc構成ファイル内。インターセプターを構成します。

<!--配置拦截器-->
<mvc:interceptors>
    <mvc:interceptor>
        <!--拦截所有请求-->
        <mvc:mapping path="/**"/>   
        <!--放行"/user/login"-->
        <mvc:exclude-mapping path="/user/login"/>	
        <!--配置拦截器类-->
        <bean class="com.itheima.interceptor.LoginInterceptor"/>
    </mvc:interceptor>
</mvc:interceptors>

2.2.3注意が必要な事項

1.インターセプターのインターセプトルール(springmvcプロセスに入るリクエストの場合)。

2. HandlerInterceptorインターフェースには3つのメソッドがあります。

ターゲットメソッドが実行される前にPreHandlerが実行されます

PostHandleは、ターゲットメソッドが実行された後、ビューオブジェクトが戻る前に実行されます。

AfterCompletionは、プロセスの完了後に実行されます

3.インターセプターチェーンを形成する複数のインターセプターが存在する可能性があります。

3. SpringMVC例外処理メカニズム

3.1例外処理の考え方

Dao、システムのサービスおよびコントローラーで例外が発生すると、以下のように、Exceptionが上方にスローされ、最後に、SpringMVCフロントエンドコントローラーが例外ハンドラーに渡されて例外処理が行われます。

[外部チェーン画像の転送に失敗しました。ソースサイトに盗難防止チェーンメカ​​ニズムがある可能性があります。画像を保存して直接アップロードすることをお勧めします(img-vDB8rRTY-1585558986178)(img / 7.png)]

3.2例外処理の2つの方法

①単純な例外ハンドラSimpleMappingExceptionResolver

②独自の例外ハンドラをカスタマイズし、HandlerExceptionResolverインターフェースを実装する

A.単純な例外ハンドラー

シンプルな例外プロセッサは、springmvcによって事前に作成されたプロセッサインターフェイスであり、構成することで直接使用できます。

<!--配置简单映射异常处理器-->
<bean class="org.springframework.web.servlet.handler.SimpleMappingExceptionResolver">
    <!--默认错误视图-->
    <property name="defaultErrorView" value="forward:/error/errorMsg.jsp"/>       
    <property name="exceptionMappings">
        <map>
            <!--除零异常视图-->
            <entry key="ArithmeticException" value="forward:/error/arithmetic.jsp"/>  
            <!--类型转换异常视图-->
            <entry key="ClassCastException" value="forward:/error/classCast.jsp"/>       
        </map>
    </property>
</bean>

B.カスタム例外ハンドラー

クラスを定義し、HandlerExceptionResolverインターフェースを実装し、メソッドを書き直します

public class MyExceptionResolver implements HandlerExceptionResolver {
    @Override
    public ModelAndView resolveException(HttpServletRequest request,HttpServletResponse response, Object handler, Exception ex) {
        ModelAndView modelAndView = new ModelAndView();
        //判断出现的异常是什么异常
        if (ex instanceof ArithmeticException){
            //如果是除零异常
            //跳转到"forward:/error/arithmetic.jsp"
            modelAndView.setViewName("forward:/error/arithmetic.jsp");
        }else if (ex instanceof ClassCastException){
            //如果类型转换异常
            //跳转到"forward:/error/classCast.jspp"
            modelAndView.setViewName("forward:/error/classCast.jsp");
        }else{
            //其他异常
            //就跳转到exceptionPage页面
            modelAndView.setViewName("forward:/error/exceptionPage.jsp");
        }

        return modelAndView;
    }
}

例外ハンドラーの設定

<bean id="exceptionResolver" class="com.itheima.exception.MyExceptionResolver"/>
公開された78のオリジナル記事 30の賞賛 訪問3636

おすすめ

転載: blog.csdn.net/ZMW_IOS/article/details/105203349