sevlet页面跳转:1)重定向 response.sendRedirect("/a.jsp");跨服务器,浏览器地址变化,
实际是两次httprequest,第一次请求返回302状态码,第二次请求不带有第一次请求的参数,因此刷新不会重复提交数据。
2)转发 RequestDispatcher dispatcher = request.getRequestDispatcher("/a.jsp");
dispatcher.forward(request, response);本web应用,浏览器地址不变,只有一次httprequest,刷新会重复提交数据
//不要让浏览器开辟缓存
response.setHeader("Cache-Control","no-cache");
response.setHeader("Cache-Control","no-store");
//程序立即过期
response.setDateHeader("Expires",0);
//不要让浏览其缓存程序
response.setHeader("Pragma","no-cache");
srping 注解方式注入:配置文件添加命名空间:xmlns:context=""
再添加配置:<context:annotation-config/>
@Autowired 和 @Resource 可以加在属性或其setter方法上,set、get方法非必须
区别:
Autowire,spring提供,默认按类型装配,指定required属性为false时,找不到将为null,支持接口
Resource,jdk6提供,默认按属性名装配,未指定name属性时,找不到再按属性类型装配,指定name后找不到将为null
自定义注解:
@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.FIELD, ElementType.METHOD})
public @interface MyResource {
public String name() default "";
}
setter.isAnnotationPresent(MyResource.class);
setter.getAnnotation(MyResource.class);
getPropertyType().isAssignableFrom(clazz);
field.setAccessable(true);
field.set(bean, value);