springMVC笔记整理

springMVC简介

配置文件方式搭建环境

运行过程源码跟踪

注解方式搭建环境

基本数据类型和对象类型作为参数

复杂数参数和restfu风格参数

跳转方式

@ResponseBody

jsp9大内置对象和4个作用域

作用域传值的四个方式

文件的上传和下载

带有头像的注册

自定义拦截器

练习登录

springMVC运行原理

springMVC简介:

SpringMVC重要组件:

DispatcherServlet:前段控制器,接受所有请求,过滤jsp;【必须进行配置使得xml文件生效】

HandlerMapping:解析请求格式,判断希望调用那个方法;【必须进行配置】

HandlerAdapter:负责调用具体的方法;【走默认,不必在xml中进行配置】

进行页面跳转

  req.getRequestDispatcher("index.jsp").forward(req, resp);

ViewResovler:视图解析器,解析结果,准备跳转到具体的物理视图。

springMVC笔记整理_第1张图片

 

使用纯配置文件搭建springMVC环境:

Web.xml无法打包的jar包。即使打包到jar包中也无效。Tomcat在加载项目的时候必须到web-info中查找web.xml,其他任何路径无效,jar包中的东西都在隐藏的classes文件中,所以必须自己配置。

  1. 导入jar包

  springMVC笔记整理_第2张图片

  1. 配置web.xml

  springMVC笔记整理_第3张图片

视图解析器:

springMVC笔记整理_第4张图片

 

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

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

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

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

    http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" version="3.0">

  <display-name>springmvc01display-name>

  <welcome-file-list>

    <welcome-file>index.htmlwelcome-file>

    <welcome-file>index.htmwelcome-file>

    <welcome-file>index.jspwelcome-file>

    <welcome-file>default.htmlwelcome-file>

    <welcome-file>default.htmwelcome-file>

    <welcome-file>default.jspwelcome-file>

  welcome-file-list>

  <servlet>

    <servlet-name>springmvcservlet-name>

    <servlet-class>org.springframework.web.servlet.DispatcherServletservlet-class>

   

   

    <init-param>

       <param-name>contextConfigLocationparam-name>

       <param-value>classpath:springmvc.xmlparam-value>

    init-param>

   

    <load-on-startup>1load-on-startup>

   

  servlet>

  <servlet-mapping>

    <servlet-name>springmvcservlet-name>

    <url-pattern>/url-pattern>

  servlet-mapping>

web-app>

 

 

package com.pshdhx.test;

 

import org.springframework.context.ApplicationContext;

import org.springframework.web.servlet.HandlerAdapter;

import org.springframework.web.servlet.HandlerMapping;

import org.springframework.web.servlet.ViewResolver;

 

public class Test {

    public static void main(String[] args) {

       ApplicationContext ac = null;   //加载dispatcherServlet就创建了ApplicationContext的接口-ConfigurableApplicationContext的容器。加载xml文件

       HandlerMapping hm = null;   //urlMapping

       HandlerAdapter ha = null;   //走方法中的语句

       ViewResolver rs = null;     //走解析路径

      

    }

}

 

package com.pshdhx.controller;

 

import javax.servlet.http.HttpServletRequest;

import javax.servlet.http.HttpServletResponse;

 

import org.springframework.web.servlet.ModelAndView;

import org.springframework.web.servlet.mvc.Controller;

 

public class DemoController implements Controller {

 

    @Override

    public ModelAndView handleRequest(HttpServletRequest arg0, HttpServletResponse arg1) throws Exception {

       System.out.println("执行了控制器DemoController"); //走默认适配器

       ModelAndView mv = new ModelAndView("main");   //走默认视图解析器

       return mv;

    }

 

}

 

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: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

        http://www.springframework.org/schema/context/spring-context.xsd">

    <bean id="demo123" class="com.pshdhx.controller.DemoController">bean>

    <bean class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">

      

       <property name="urlMap">

           <map>

             

              <entry key="demo" value-ref="demo123">entry>

           map>

       property>

    bean>

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

       <property name="prefix" value="/">property>   

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

    bean>   

beans>

springMVC运行过程源码跟踪:

springMVC笔记整理_第5张图片

父类的父类往上找:

  springMVC笔记整理_第6张图片

WebApplication是spring容器

springMVC笔记整理_第7张图片

springMVC笔记整理_第8张图片

说明了springspringmvc是父子容器

  Springmvc能够调用spring容器中的方法。

  springMVC笔记整理_第9张图片

 

springMVC笔记整理_第10张图片

因为service是在spring容器中,所以在controller中允许注入service方法

springMVC笔记整理_第11张图片

请求方法,放行请求

springMVC笔记整理_第12张图片

springMVC笔记整理_第13张图片

 

 

 

 

 

springMVC注解方式环境搭建:

  1. 扫描注解
  2. 用到mvc命名空间,并且注解驱动
  3. 写控制器类

 

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:context="http://www.springframework.org/schema/context"

     xmlns:mvc="http://www.springframework.org/schema/mvc"

    xsi:schemaLocation="http://www.springframework.org/schema/beans

        http://www.springframework.org/schema/beans/spring-beans.xsd

        http://www.springframework.org/schema/context

        http://www.springframework.org/schema/context/spring-context.xsd

        http://www.springframework.org/schema/mvc

        http://www.springframework.org/schema/mvc/spring-mvc.xsd">

       

    <context:component-scan base-package="com.pshdhx.controller">context:component-scan>

      

    <mvc:annotation-driven>mvc:annotation-driven>

      

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

beans>

package com.pshdhx.controller;

 

import org.springframework.stereotype.Controller;

import org.springframework.web.bind.annotation.RequestMapping;

 

@Controller   //把这个类交给容器去管理

public class DemoController {

    @RequestMapping("demo")  //使用注解  ==控制器逻辑名

    public String demo(){

       System.out.println("执行demo");

       return "main.jsp";

    }

}

 

 

基本数据类型和对象类型作为参数:

  1. 复制的web项目改名修改后也不能运行,得修改.setting,之间建立项目较好
  2. 在web.xml修改编码

  springMVC笔记整理_第14张图片

 

    <filter>

       <filter-name>encodingfilter-name>

       <filter-class>org.springframework.web.filter.CharacterEncodingFilterfilter-class>

       <init-param>

           <param-name>encodingparam-name>

           <param-value>UTF8param-value>

       init-param>

    filter>

    <filter-mapping>

       <filter-name>encodingfilter-name>

       <url-pattern>/*url-pattern>

    filter-mapping>

springMVC笔记整理_第15张图片

  1. 控制传递值

 

package com.pshdhx.controller;

 

import javax.servlet.http.HttpServletRequest;

 

import org.springframework.stereotype.Controller;

import org.springframework.web.bind.annotation.RequestMapping;

 

@Controller

public class DemoController03 {

    @RequestMapping("demo03")

    public String controller(String username,int age,HttpServletRequest req){

       System.out.println("执行demo03");

       System.out.println(""+username+"***"+age+"通过action的value到控制器方法的参数,控制jsp页面传值到控制器");

       req.setAttribute("demo03", "测试从java控制器传值到jsp页面");

       return "main.jsp";

    }

}

<%@ page language="java" contentType="text/html; charset=UTF-8"

    pageEncoding="UTF-8"%>

DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">

<html>

<head>

<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">

<title>Insert title heretitle>

head>

<body>

main.jsp

${demo03 }

body>

html>

<%@ page language="java" contentType="text/html; charset=UTF-8"

    pageEncoding="UTF-8"%>

DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">

<html>

<head>

<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">

<title>Insert title heretitle>

head>

<body>

    <form action="demo03" method="post">

       <input type="text" name="username"><br>

       <input type="text" name="age"><br>

       <input type="submit" value="提交"><br>

    form>

body>

html>

 

  1. demo默认是单例的single,线程不安全
  2. 使用别名。

springMVC笔记整理_第16张图片

如果没有参数,报错500,不能正常跳转

但是如果int变为Integer,则能够正常跳转

Int默认值:

 

 

springMVC笔记整理_第17张图片

springMVC笔记整理_第18张图片

springMVC笔记整理_第19张图片

 

springMVC笔记整理_第20张图片

 

复杂参数和restfu风格参数:

springMVC笔记整理_第21张图片

springMVC笔记整理_第22张图片

 

 

跳转方式:

  1. 默认的方式是请求转发
  2. 重定向

  添加redirect路径:

  添加forward路径:

  springMVC笔记整理_第23张图片

 

 

自定义视图解析器:

表示前边的demo中不需要/了

Redirect和forward表示直接跳转到文件,而不是在某个路径下的文件。

springMVC笔记整理_第24张图片

不加forward:表示查找demo11的jsp页面 404

加上forward:可以找到demo11的控制器 success

 

 

@ResponseBody:

springMVC笔记整理_第25张图片

springMVC笔记整理_第26张图片

 

springMVC笔记整理_第27张图片

springMVC笔记整理_第28张图片

 

加上responseBody后,不管返回值是什么,恒不跳转。在页面输出返回值。

responseBody以jackson形式底层实现,需要引入上面三个包。

springMVC笔记整理_第29张图片

设置响应头contentType的形式。

springMVC笔记整理_第30张图片

能力提升-树形菜单的显示-jquery:

springMVC笔记整理_第31张图片

  1. 导入jar包
  2. 配置web.xml
  1. 上下文参数spring
  2. 监听器:
  3. 前端控制器servlet
  4. 字符编码过滤器

springMVC笔记整理_第32张图片

springMVC笔记整理_第33张图片

 

springMVC笔记整理_第34张图片

springMVC笔记整理_第35张图片

springMVC笔记整理_第36张图片

springMVC笔记整理_第37张图片

 

springMVC笔记整理_第38张图片

springMVC笔记整理_第39张图片

springMVC笔记整理_第40张图片

springMVC笔记整理_第41张图片

springMVC笔记整理_第42张图片

springMVC笔记整理_第43张图片

能打开就打开,打不开就下载

springMVC笔记整理_第44张图片

 

 

 

Jsp9大内置对象和4个作用域:

springMVC笔记整理_第45张图片

Classpath:被编译到了这里

springMVC笔记整理_第46张图片

springMVC笔记整理_第47张图片springMVC笔记整理_第48张图片springMVC笔记整理_第49张图片

 

springMVC笔记整理_第50张图片

springMVC笔记整理_第51张图片

springMVC笔记整理_第52张图片

 

 

作用域传值的4个方式;

package com.pshdhx.controller;

import javax.servlet.ServletContext;

/**

 * 测试内置对象作用域

 */

import javax.servlet.http.HttpServletRequest;

import javax.servlet.http.HttpSession;

 

import org.springframework.stereotype.Controller;

import org.springframework.web.bind.annotation.RequestMapping;

 

@Controller

public class DemoController {

    @RequestMapping("demo1")

    public String demo1(HttpServletRequest req,HttpSession sessionParam){

       //测试request的作用域

       req.setAttribute("req", "req的值");

      

       //测试sessionsessionParam

       HttpSession session = req.getSession();

       session.setAttribute("session", "session的值");

       sessionParam.setAttribute("sessionParam", "sessionParam的值");

      

      

       //application 但是直接定义servletcontext的参数不行:是一个接口,不允许实例化和注入。

       ServletContext application = req.getServletContext();

       application.setAttribute("application", "application的值");

      

       return "/index.jsp";

    }

}

 

<%@ page language="java" contentType="text/html; charset=UTF-8"

    pageEncoding="UTF-8"%>

DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">

<html>

<head>

<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">

<title>Insert title heretitle>

head>

<body>

request:${requestScope.req }<br>

session:${sessionScope.session }<br>

sessionParam:${sessionScope.sessionParam }<br>

application:${applicationScope.application }

 

body>

html>

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

<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" version="3.0">

  <display-name>springmvc01display-name>

  <welcome-file-list>

    <welcome-file>index.htmlwelcome-file>

    <welcome-file>index.htmwelcome-file>

    <welcome-file>index.jspwelcome-file>

    <welcome-file>default.htmlwelcome-file>

    <welcome-file>default.htmwelcome-file>

    <welcome-file>default.jspwelcome-file>

  welcome-file-list>

 

  <servlet>

    <servlet-name>springmvcservlet-name>

    <servlet-class>org.springframework.web.servlet.DispatcherServletservlet-class>

    <init-param>

      <param-name>contextConfigLocationparam-name>

      <param-value>classpath:springmvc.xmlparam-value>

    init-param>

    <load-on-startup>1load-on-startup>

  servlet>

  <servlet-mapping>

    <servlet-name>springmvcservlet-name>

    <url-pattern>/url-pattern>

  servlet-mapping>

 

    <filter>

       <filter-name>encodingfilter-name>

       <filter-class>org.springframework.web.filter.CharacterEncodingFilterfilter-class>

       <init-param>

           <param-name>encodingparam-name>

           <param-value>UTF8param-value>

       init-param>

    filter>

    <filter-mapping>

       <filter-name>encodingfilter-name>

       <url-pattern>/*url-pattern>

    filter-mapping>

web-app>

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:context="http://www.springframework.org/schema/context"

     xmlns:mvc="http://www.springframework.org/schema/mvc"

    xsi:schemaLocation="http://www.springframework.org/schema/beans

        http://www.springframework.org/schema/beans/spring-beans.xsd

        http://www.springframework.org/schema/context

        http://www.springframework.org/schema/context/spring-context.xsd

        http://www.springframework.org/schema/mvc

        http://www.springframework.org/schema/mvc/spring-mvc.xsd">

       

    <context:component-scan base-package="com.pshdhx.controller">context:component-scan>

      

    <mvc:annotation-driven>mvc:annotation-driven>

      

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

beans>

springMVC笔记整理_第53张图片

springMVC笔记整理_第54张图片

springMVC笔记整理_第55张图片

springMVC笔记整理_第56张图片

springMVC笔记整理_第57张图片

 

 

文件下载:

若果是rar的话,直接下载,但是txt是直接打开。

springMVC笔记整理_第58张图片

springMVC笔记整理_第59张图片

springMVC笔记整理_第60张图片

 

 

文件上传:

springMVC笔记整理_第61张图片

 

springMVC笔记整理_第62张图片

springMVC笔记整理_第63张图片

springMVC笔记整理_第64张图片

springMVC笔记整理_第65张图片

 

 

 

package com.pshdhx.controller;

 

import java.io.File;

import java.io.IOException;

import java.util.UUID;

 

import org.apache.commons.io.FileUtils;

import org.springframework.stereotype.Controller;

import org.springframework.web.bind.annotation.RequestMapping;

import org.springframework.web.multipart.MultipartFile;

 

/**

 * 测试文件上传需要引入commoms-fileload和commons-io两个jar包

 * 并且form标签中要 :enctype="multipart/form-data" type="file"

 * @author Administrator

 *

 */

@Controller

public class DemoController {

         @RequestMapping("upload")

         public String upload(MultipartFile file,String name) throws IOException{

                  String fileName = file.getOriginalFilename();

                  String suffix = fileName.substring(fileName.lastIndexOf("."));

                  //判断上传文件类型

                  if(suffix.equalsIgnoreCase(".png")){

                          String uuid = UUID.randomUUID().toString();

                          FileUtils.copyInputStreamToFile(file.getInputStream(), new File("E:/"+uuid+suffix));

                          return "/index.jsp";

                  }else{

                          return "error.jsp";

                  }

         }

}

 

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:context="http://www.springframework.org/schema/context"

     xmlns:mvc="http://www.springframework.org/schema/mvc"

    xsi:schemaLocation="http://www.springframework.org/schema/beans

        http://www.springframework.org/schema/beans/spring-beans.xsd

        http://www.springframework.org/schema/context

        http://www.springframework.org/schema/context/spring-context.xsd

        http://www.springframework.org/schema/mvc

        http://www.springframework.org/schema/mvc/spring-mvc.xsd">

       

    <context:component-scan base-package="com.pshdhx.controller">context:component-scan>

      

    <mvc:annotation-driven>mvc:annotation-driven>

      

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

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

   

   

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

       <property name="maxUploadSize" value="50">property>

    bean>

   

    <bean id="exceptionResolver" class="org.springframework.web.servlet.handler.SimpleMappingExceptionResolver">

       <property name="exceptionMappings">

           <props>

              <prop key="org.springframework.web.multipart.MaxUploadSizeExceededException">/error.jspprop>

           props>

       property>

    bean>

beans>

<%@ page language="java" contentType="text/html; charset=UTF-8"

    pageEncoding="UTF-8"%>

DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">

<html>

<head>

<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">

<title>Insert title heretitle>

head>

<body>

<form action="upload" enctype="multipart/form-data" method="post">

    姓名:<input type="text" name="name"><br>

    文件:<input type="file" name="file"><br>

    <input type="submit" value="上传">

form>

body>

html>

 

能力提升-带有头像的注册:

过程截图:

springMVC笔记整理_第66张图片

 

springMVC笔记整理_第67张图片

springMVC笔记整理_第68张图片

 

springMVC笔记整理_第69张图片

springMVC笔记整理_第70张图片

springMVC笔记整理_第71张图片

springMVC笔记整理_第72张图片

 

springMVC笔记整理_第73张图片

springMVC笔记整理_第74张图片

springMVC笔记整理_第75张图片

springMVC笔记整理_第76张图片

springMVC笔记整理_第77张图片

springMVC笔记整理_第78张图片

 

 

能力提升-下载:

springMVC笔记整理_第79张图片

 

springMVC笔记整理_第80张图片

springMVC笔记整理_第81张图片

springMVC笔记整理_第82张图片

springMVC笔记整理_第83张图片

springMVC笔记整理_第84张图片

springMVC笔记整理_第85张图片

springMVC笔记整理_第86张图片

springMVC笔记整理_第87张图片

springMVC笔记整理_第88张图片

springMVC笔记整理_第89张图片

springMVC笔记整理_第90张图片

springMVC笔记整理_第91张图片

springMVC笔记整理_第92张图片

springMVC笔记整理_第93张图片

springMVC笔记整理_第94张图片

springMVC笔记整理_第95张图片

springMVC笔记整理_第96张图片

springMVC笔记整理_第97张图片

springMVC笔记整理_第98张图片

 

 

自定义拦截器:

springMVC笔记整理_第99张图片

springMVC笔记整理_第100张图片

springMVC笔记整理_第101张图片

springMVC笔记整理_第102张图片

springMVC笔记整理_第103张图片

 

springMVC笔记整理_第104张图片

springMVC笔记整理_第105张图片

 

 

拦截器栈:

springMVC笔记整理_第106张图片

springMVC笔记整理_第107张图片

 

 

练习-登录验证:

springMVC笔记整理_第108张图片

 

Spingmvc运行原理:

springMVC笔记整理_第109张图片

 

你可能感兴趣的:(javaEE)