SpringMVC找不到路径是配置文件哪里的问题

SpringMVC找不到路径是配置文件哪里的问题,第1张

java spring配置文件的约束文件dtd可以通过手动下载spring开源包,在spring开源包中可以直接找到约束的dtd文件。 java spring配置文件的约束文件dtd如果是在联网的情况下,那么Myeclipse会自动联网来寻找到

引用css的

<link rel="stylesheet" href="${ctx}/resources/css/data-list-cdcss" />

<link rel="stylesheet" href="${ctx}/resources/css/base-less-cdcss" />

引用js的

<script type="text/javascript" src="${ctx}/resources/js/configjs"></script>

<script type="text/javascript" src=">

Model 模型层 (javaBean组件 = 领域模型(javaBean) + 业务层 + 持久层)

View 视图层( html、jsp…)

Controller 控制层(委托模型层进行数据处理)

springmvc是一个web层mvc框架,类似struts2。

springmvc是spring的部分,其实就是spring在原有基础上,又提供了web应用的mvc模块。

实现机制:

struts2是基于过滤器实现的。

springmvc是基于servlet实现的。

运行速度:

因为过滤器底层是servlet,所以springmvc的运行速度会稍微比structs2快。

struts2是多例的

springmvc单例的

参数封装:

struts2参数封装是基于属性进行封装。

springmvc是基于方法封装。颗粒度更细。

⑴ 用户发送请求至DispatcherServlet。

⑵ DispatcherServlet收到请求调用HandlerMapping查询具体的Handler。

⑶ HandlerMapping找到具体的处理器(具体配置的是哪个处理器的实现类),生成处理器对象及处理器拦截器(HandlerExcutorChain包含了Handler以及拦截器集合)返回给DispatcherServlet。

⑷ DispatcherServlet接收到HandlerMapping返回的HandlerExcutorChain后,调用HandlerAdapter请求执行具体的Handler(Controller)。

⑸ HandlerAdapter经过适配调用具体的Handler(Controller即后端控制器)。

⑹ Controller执行完成返回ModelAndView(其中包含逻辑视图和数据)给HandlerAdaptor。

⑺ HandlerAdaptor再将ModelAndView返回给DispatcherServlet。

⑻ DispatcherServlet请求视图解析器ViewReslover解析ModelAndView。

⑼ ViewReslover解析后返回具体View(物理视图)到DispatcherServlet。

⑽ DispatcherServlet请求渲染视图(即将模型数据填充至视图中) 根据View进行渲染视图。

⑾ 将渲染后的视图返回给DispatcherServlet。

⑿ DispatcherServlet将响应结果返回给用户。

(1)前端控制器DispatcherServlet(配置即可)

功能:中央处理器,接收请求,自己不做任何处理,而是将请求发送给其他组件进行处理。DispatcherServlet 是整个流程的控制中心。

(2)处理器映射器HandlerMapping(配置即可)

功能:根据DispatcherServlet发送的url请求路径查找Handler

常见的处理器映射器:BeanNameUrlHandlerMapping,SimpleUrlHandlerMapping,

ControllerClassNameHandlerMapping,DefaultAnnotationHandlerMapping(不建议使用)

(3)处理器适配器HandlerAdapter(配置即可)

功能:按照特定规则(HandlerAdapter要求的规则)去执行Handler。

通过HandlerAdapter对处理器进行执行,这是适配器模式的应用,通过扩展多个适配器对更多类型的处理器进行执行。

常见的处理器适配器:>

spring 跟struts2一样,只要是参数跟javaben设置的一样,无论是post,还是get都能获取到参数。

//添加 *** 作

@RequestMapping("/add")//跳转路径

public String addAccount(>

之前用到的前后端分离都是通过nginx进行代理与反向代理的方式。最近在公司做一些小型的内部使用的管理系统,vue+SpringBoot,vue使用history模式,在部署的时候希望除去nginx层。即tomcat既做为rest server也作为web static server。

最简单的方式就是放入到classpath中,SpringMVC默认的几个resouce路径可以自行百度。然后流程就是:

启动成功,访问静态文件成功,但这样一个过程是有问题的,有点和前后端分离背道而驰,正所谓分久必合合久必分当前端修改一点点东西,前端需要build服务端也需要跟着restart,那我们可以选择指定静态文件的路径。于是乎各种baidu google下搜到了可以通过继承 WebMvcConfigurerAdapter 重写 addResourceHandlers 来指定静态文件路径。

第一版大概长成这个样子:

后来各种服务无响应,自信的认为是 \ 和 / 的问题,然后各种排列组合。嗯很明显失败了。。。

再后来看到配置classpath需要 classpath:/xxx 才想起来应该改成 file:/f:/static/

嗯,果然是这样,然后将路径提取到配置文件。。。嗯没什么技术含量,但是是容易忽视的小坑。。。

vue中路由模式默认是hash,但是由于使用的是history模式,所以需要SpringMVC进行配置支持,很简单将所有的静态文件404都返回indexhtml。

SpringMVC最终配置:

目前设置关闭缓存,后期添加文件hash判读。

内容很简单,没什么可总结的······当个备忘录。。。

在tomcat作为服务器的网站开发中,我们一般把静态的css,js和image资源放到网站根目录下(与WEB-INF同级目录)。我在jsp引入js等静态资源的时候需要这样:

<script type="text/javascript" src="<%=requestgetContextPath()%>/js/jqueryjs"></script>

这样写完全不会有错,但是看着总是不爽,若是用struts2的话,直接在写个BaseAction定一个变量冲到值栈中页面就很方便取到。但是现在用的是springMVC,同样也想向下面那个写怎么办呢?

<script type="text/javascript" src="${URL}/js/jqueryjs"></script>1

思路一

很简单暴力,在每个请求里面都放进去一URL变量,

String baseUrl=requestgetScheme()+"://"+requestgetServerName()+":"+requestgetServerPort() + requestgetContextPath();

requestsetAttribute("URL", baseUrl);

至于为什么是用上面的方式获取网站跟目录而不是直接用requestgetContextPath(),笔者还没深入研究。目前证实上面方式获取是没有错的,只有requestgetContextPath()有时候会获取不到,以后再深入研究下。

分析:不用多说,这样写比在页面上用requestgetContextPath()还膈应人,毫无疑问pass掉。

思路二

如果你的网站结构用的采用iframe的方式,那么可以在iframe外层界面请求的接口里加上上面代码,然后在外层iframe界面定义个变量url先获取值,在子页面就可以直接用了。

父界面:var url = “${URL}”;

子界面引用就直接用parenturl;

分析:算了,我也圆不下去了,且不说你的网站是不是所有都用了iframe,就算是,那些写也不友好,就当笔者是凑字数的吧,忽略此条。

思路三

其实就是思路一的升级版,思路一是在每个请求里面自己手动加的,那我们完全可以利用springMVC拦截器的方式,在每个请求里面放上一个网站根目录变量。下面直接贴代码了。

springMVC配置文件里面加上:

<!-- 拦截器 -->

    <mvc:interceptors>

        <mvc:interceptor>

            <mvc:mapping path="/"/>

            <bean class="comjurloninterceptorSecurityInterceptor">

            </bean>

        </mvc:interceptor>

    </mvc:interceptors>

新建一个拦截器类并获取网站根目录,然后将其放进request里面:

public class SecurityInterceptor implements HandlerInterceptor{

    @Override

    public void afterCompletion(>    }

前端引用js:

<script type="text/javascript" src="${URL}/js/jqueryjs"></script>1

@RequestMapping(value="getFile")

public ModelAndView getFile(@RequestParam(required = false) MultipartFile nativeUrl) {

Systemoutprintln("文件长度: " + nativeUrlgetSize());

Systemoutprintln("文件类型: " + nativeUrlgetContentType());

Systemoutprintln("文件名称: " + nativeUrlgetName());

Systemoutprintln("文件原名: " + nativeUrlgetOriginalFilename());

Systemoutprintln("========================================");

//如果用的是Tomcat服务器,则文件会上传到\\%TOMCAT_HOME%\\webapps\\YourWebProject\\WEB-INF\\upload\\文件夹中

String realPath = requestgetSession()getServletContext()getRealPath("/WEB-INF/upload");

//这里不必处理IO流关闭的问题,因为FileUtilscopyInputStreamToFile()方法内部会自动把用到的IO流关掉,我是看它的源码才知道的

FileUtilscopyInputStreamToFile(nativeUrlgetInputStream(), new File(realPath, nativeUrlgetOriginalFilename()));

}

springMVC中获取环境变量,环境变量配置参照上一篇 <a href='>

以上就是关于SpringMVC找不到路径是配置文件哪里的问题全部的内容,包括:SpringMVC找不到路径是配置文件哪里的问题、springmvc引入js,css等静态文件路径问题!!!、详解Spring mvc工作原理及源码分析等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/10057519.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-04
下一篇 2023-05-04

发表评论

登录后才能评论

评论列表(0条)

保存