spring-MVC小结

常见名词

`名词
Filter过滤器
Listener监听器
Interceptor拦截器
Dispatcher控制器Dispatcher Servlet前端控制器
Handler处理器Handler Adapter处理器适配器
Resolver解析器View Resolver视图解析器
redirect重定向
Component组件
Required必须的
Repository仓库
Variable变量Path Variable可变参数
Param参数RequestParam请求参数
Mapping映射Request Mapping请求映射

spring-mvc

Spring注解

IOC
注解说明
@Component使用在类上用于实例化Bean
@Controller使用在web层类上用于实例化Bean
@Service使用在service层类上用于实例化Bean
@Repository使用在dao层类上用于实例化Bean
@Autowired使用在字段上用于根据类型依赖注入
@Value注入普通属性
新注解说明(常用于测试类)
@Configuration用于指定当前类是一个 Spring 配置类(可以加载spring配置文件)
@Bean使用在方法上,标注将该方法的返回值存储到 Spring 容器中
@PropertySource用于加载.properties 文件中的配置
@Import用于导入其他配置类
@ComponentScan和<context:component-scan base-package=“com.itheima”/>一样
@Runwith替换原来的运行期 ( 测试时加上 )
aop
AOP 名词相关概念
Target代理的目标对象
Proxy代理类
Pointcut切入点 (被增强的方法)
Advice通知 (封装增强业务逻辑的方法)
Aspect切面 (切入点和通知的结合)
Weaving织入 (将切点与通知结合的过程)
Target target = new Target(); //创建目标对象
//创建代理对象
TargetInterface proxy = (TargetInterface) Proxy.newProxyInstance(target.getClass()
.getClassLoader(),target.getClass().getInterfaces(),new InvocationHandler() {
            @Override
            public Object invoke(Object proxy, Method method, Object[] args) 
            throws Throwable {
                System.out.println("前置增强代码...");
                Object invoke = method.invoke(target, args);
                System.out.println("后置增强代码...");
                return invoke;
            }
        }
);
public class CglibTest {
    @Test
    public void test01() {
        // 1: 创建增强
        Enhancer e = new Enhancer();
        // 2: 设置父类
        e.setSuperclass(Aa.class);
        // 3: 设置回调
        e.setCallback(new InvocationHandler() {
            @Override
            public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
                new Ccc().before();
                Object invoke = method.invoke(new Aaa(), args);
                return invoke;
            }
        });
        // 4: 创建代理对象
        Aa aa = (Aa) e.create();
        aa.save();
    }
}

<!--配置目标类-->
<bean id="target" class="com.itheima.aop.Target"></bean>
<!--配置切面类-->
<bean id="myAspect" class="com.itheima.aop.MyAspect"></bean>

<aop:config>
    <!--引用myAspect的Bean为切面对象-->
    <aop:aspect ref="myAspect">
        <!--配置Target的method方法执行时要进行myAspect的before方法前置增强-->
        <aop:before method="(通知方法名称)" pointcut="execution(切面表达式)"></aop:before>
    </aop:aspect>
</aop:config>

<!--切点表达式的写法:-->
<execution([修饰符] 返回值类型 包名.类名.方法名(参数))>
<!--前置通知-->
    <aop:before>>method="(通知方法名称)" pointcut="exexcution(切面表达式)"</aop:before>
<!--后置通知--><aop:after-returming>
<!--环绕通知--><aop:around>
<!--异常抛出通知--><aop:throwing>
<!--最终通知--><aop:after>
@Around("advice()")
public void around(ProceedingJoinPoint pjp) throws Throwable {
				System.out.println("循环前.......");
				Object p = pjp.proceed();
				System.out.println("循环后........");
		}

LICENSE

WEB.XML配置

处理中文乱过滤器
<filter>
  <filter-name>encodingFilter</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>encodingFilter</filter-name>
  <url-pattern>/*</url-pattern>
</filter-mapping>
配置监听器
<!--配置监听器-->
<listener>
  <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<!--加载application文件-->
<context-param>
  <param-name>contextConfigLocation</param-name>
  <param-value>classpath:applicationContext.xml</param-value>
</context-param>
配置控制器
<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:spring-mvc.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>

Spring配置

Spring.xml配置
<context:component-scan base-package="com.itheima.controller"/>
<mvc:annotation-driven/> 后边可以有参数
<bean id="conversionService" 			        class="org.springframework.context.support.ConversionServiceFactoryBean">
    <property name="converters">
        <list>
            <bean class="com.itheima.converter.DateConverter"></bean>
        </list>
    </property>
</bean>
public class DateConverter implements Converter<String, Date> {
    public Date convert(String dateStr) {
        //将日期字符串转换成日期对象 返回
        SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
        Date date = null;
        try {
            date = format.parse(dateStr);
        } catch (ParseException e) {
            e.printStackTrace();
        }
        return date;
    }
}
<mvc:default-servlet-handler/>
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
  <property name="prefix" value="/pages/"/>	 前缀
  <property name="suffix" value=".jsp"/>	 后缀
</bean>
<context:property-placeholder location="classpath:druid.properties"/>
<import resource="applicationContext-xxx.xml"/>

Controller注解

请求

@RequestMapping(

​ value=“映射url路径”, 于指定请求的UR

​ mathod=“RequestMethod.GET(POST…)” 用于指定请求的方式

​ params 请求参数的key和value必须和配置的一模一样 )

@RequestHeader(“Host”) String host, 获取请求头数据

@RequestParam(value=“xxx”,required=false)false表示可以不携带xxx,默认true

@ 将值和url绑定,使用{xxx}进行占位符

数据请求方式

参数例子
基本类型public void save(String username,int age)
POJOpublic void save11(User user)
数组类型public void save11(String[] strs)
集合public void save11(List userlist)
相应

@RsponseBody页面跳转

Model注解
Service在service层配置
Repository在dao层配置
Autowired注入Bean

数据源基础配置

properties文件
db.driverClassName=com.mysql.jdbc.Driver
db.urlName=jdbc:mysql://127.0.0.1:3306/spring
db.username=root
db.password=root

文件上传

单文件

poom文件

<!--文件上传坐标-->
<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.6</version>
</dependency>

前台代码

<form action="${pageContext.request.contextPath}/user/quick23" method="post" enctype="multipart/form-data">
        名称<input type="text" name="username"><br/>
        文件1<input type="file" name="uploadFile"><br/>
        文件2<input type="file" name="uploadFile"><br/>
        <input type="submit" value="提交">
    </form>

spring-mvc.xml

<!--配置文件上传解析器-->
    <bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
        <property name="defaultEncoding" value="UTF-8"/>
        <property name="maxUploadSize" value="500000"/>
    </bean>

后台程序

@RequestMapping(value="/quick22")
    @ResponseBody
    public void save22(String username, MultipartFile uploadFile) throws IOException {
        System.out.println(username);
        //获得上传文件的名称
        String originalFilename = uploadFile.getOriginalFilename();
        //存储位置
        uploadFile.transferTo(new File("C:\\upload\\"+originalFilename));
    }
多文件

前台代码

<form action="${pageContext.request.contextPath}/user/quick23" method="post" enctype="multipart/form-data">
        名称<input type="text" name="username"><br/>
        文件1<input type="file" name="uploadFile"><br/>
        文件2<input type="file" name="uploadFile"><br/>
        <input type="submit" value="提交">
    </form>

后台代码

@RequestMapping(value="/quick23")
    @ResponseBody
    public void save23(String username, MultipartFile[] uploadFile) throws IOException {
        System.out.println(username);
        for (MultipartFile multipartFile : uploadFile) {
            String originalFilename = multipartFile.getOriginalFilename();
            multipartFile.transferTo(new File("C:\\upload\\"+originalFilename));
        }
    }

Interceptor拦截器

java代码实现拦截器接口
public class MyInterceptor implements HandlerInterceptor {
		//在目标方法执行之前 执行
		public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws ServletException, IOException {
				System.out.println("preHandle.....");
				String param = request.getParameter("param");
				if ("yes".equals(param)){
						return true;//返回true 放行,返回false 不放行
				}else {
						response.sendRedirect("/error.jsp");
						return false;
				}
				
		}
		//在目标方法执行之后 视图对象返回之前执行
		public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) {
				modelAndView.addObject("name","hahaha");
				System.out.println("postHandle...");
		}
		//在流程都执行完毕后 执行
		public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) {
				System.out.println("afterCompletion....");
		}
}
spring-mvc中配置拦截器
<!--配置拦截器-->
<mvc:interceptors>
  <mvc:interceptor>
    <!--对哪些资源执行拦截操作-->
    <mvc:mapping path="xxx/**"/>
    <bean class="com.itheima.Interceptor.MyInterceptor"/>
  </mvc:interceptor>
</mvc:interceptors>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值