办法:这是我在spring-servlet.xml文件里使用<mvc>开头的标签时,忘记引入了命名空间。在xml的beans里面加入如下代码即可
xmlns:mvc="http://www.springframework.org/schema/mvc"
http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc.xsd
静态文件访问,主要是让DispatcherServlet不拦截以下静态资源
<mvc:annotation-driven />
<mvc:resources location="/image/" mapping="/image/**"/>
<mvc:resources location="/css/" mapping="/css/**"/>
<mvc:resources location="/js/" mapping="/js/**"/>
<!-- 启动扫描所有的controller -->
<context:component-scan base-package="com.peidw.web"/>
<mvc:annotation-driven/>
<!-- 对特册顷定路径拦截-->
<mvc:interceptors>
<mvc:interceptor>
<mvc:mapping path="/user/MyHome"/>
<mvc:mapping path="州腔陆/um/*"/>
<bean class="com.peidw.web.interceptor.MyInterceptor"></bean>
</mvc:interceptor>
</mvc:interceptors>
在java代码里实现拦截
package com.peidw.web.interceptors
import org.springframework.stereotype.Component
import org.springframework.web.servlet.HandlerInterceptor
import org.springframework.web.servlet.ModelAndView
import javax.servlet.http.HttpServletRequest
import javax.servlet.http.HttpServletResponse
import org.apache.log4j.*
/**
* Created by peidw on 2015/3/6.
*/
@Component
public class HelloInterceptor implements HandlerInterceptor{
private static Logger logger=Logger.getLogger(HelloInterceptor.class)
@Override
public boolean preHandle(HttpServletRequest httpServletRequest,
HttpServletResponse httpServletResponse, Object o) throws Exception {
logger.info("执行Action前先判断权限圆坦")
return true
}
@Override
public void postHandle(HttpServletRequest httpServletRequest,
HttpServletResponse httpServletResponse, Object o, ModelAndView
modelAndView) throws Exception {
logger.info("生成视图前,可以改model和视图")
}
@Override
public void afterCompletion(HttpServletRequest httpServletRequest,
HttpServletResponse httpServletResponse, Object o, Exception e) throws
Exception {
logger.info("生成视图前,可以改model和视图")
}
}
package com.peidw.web
import com.peidw.web.interceptors.HelloInterceptor
import org.springframework.context.annotation.Configuration
import org.springframework.web.servlet.config.annotation.EnableWebMvc
import org.springframework.web.servlet.config.annotation.InterceptorRegistry
import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter
/**
* Created by peidw on 2015/3/6.
*/
@Configuration
@EnableWebMvc
public class WebApplicationConfig extends WebMvcConfigurerAdapter {
@Override
public void addInterceptors(InterceptorRegistry registry) {
registry.addInterceptor(new HelloInterceptor()).addPathPatterns("/hello")
}
}
<!-- 全局拦截 -->
<mvc:interceptors>
<bean class="com.peidw.web.interceptor.MyInterceptor"></bean>
</mvc:interceptors>
一些常用注解
@Autowired和@Qualifier 自动注入[根据类型注入]
@Autowired 可以对成员变量、方法以及构造函数进行注释,
@Qualifier 的标注对象是成员变量、方法入参、构造函数入参。
ps:两者结合使用相当于@Resourcede效果。
@Resource 自动注入[根据名称注入],可写参数name=""
@Controller 表示控制器
@Service表示业务处理层[一般在serviceImpl]
@Repository 表示持久层[一般在daoImpl]
@Component 当你的类不清楚是哪一层的时候使用该注解
@ResponseBody 异步返回数据类型为json
@RequestMapping 路径,请求类型等设置
@InitBinder 数据绑定
@RequestBody、@ModeleAttributes、@SessionAttributes等
实际开发静态漏腊碰资源 html、js、图片 肯定是放在各自文件夹下面的
参考链接
demo地址
demo 地址
可以访问:
http://localhost:8080/JS/1.js
http://localhost:8080/Image/1.png
http://localhost:8080/JS/1.html
3、 1.js 1.png 1.html 和 2.js 一样直接访问
设置 spring.web.resources.static-locations
3.1 、 http://localhost:8080/1.js 、 http://localhost:8080/1.png 、 http://localhost:8080/1.html 可以直接访问了
demo地址
这样的配置,可以说最简单且粗暴,但是灵活性差一点点:
URL响应地址只能为一项,也就是spring.mvc.static-path-pattern配置只能写一项。
这意味着,按我上文设置了/SystemData/ 为URL匹配,就不能设置第二个/resources/ 这样的配置为第二静态目录。
写一个配置类,实现静态资源的文件夹方法很多。比如:
继承于WebMvcConfigurationSupport父类,并实现addResourceHandlers方法。
引用WebMvcConfigurer接返谈口,并实现addInterceptors方法
现在我们就来配置。 最终效果很简单,我想要的效果(两组同时):
浏览器输入: http://localhost:8080/SystemData/UserData/Avatar/1.png
可以直接访问局渣项目文件下的:/SystemData/UserData/Avatar/1.png,
浏览器输入: http://localhost:8080/Test/UserData/Avatar/2.png
可以直接访问项目文件下的:/Test/UserData/Avatar/2.png,
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)