求助:spring3 mvc 页面跳转之后js定位错误

zzylmt 2012-09-18 09:52:57
web.xml上的配置是这样的
<servlet>
<servlet-name>spring</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>spring</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>


并且我处理静态资源的配置也写好了。在我的首页上面js,css这些东西也正常的。

但是当我有下面这样一个跳转时就出问题了。
@RequestMapping("/subclass/{fid}")
public ModelAndView subclass(HttpServletRequest request,
HttpServletResponse response, @PathVariable int fid) {
ModelAndView view = new ModelAndView();
try {

view.setViewName("/subclass");
subclassinfo = bdo_goodsclassdaoimpl.mainclassinfo(fid);
} catch (Exception e) {
e.printStackTrace();
}
return view;
}


程序提示我找不到/mymobile/subclass/js/jquery/jquery.min.js

明显多了个subclass,这是requestmapping的名字。正常的话应该是/mymobile/js/jquery/jquery.min.js。求大家看看要怎么才能正常定位到这些东西上。
...全文
600 20 打赏 收藏 转发到动态 举报
写回复
用AI写文章
20 条回复
切换为时间正序
请发表友善的回复…
发表回复
知识储存 2014-05-13
  • 打赏
  • 举报
回复
我的问题解决了,被spring把js拦截了。希望以后的朋友不用花那么多时间,我找这个找了2天
知识储存 2014-05-13
  • 打赏
  • 举报
回复
楼主,求解答啊。我最近也遇到了,把servlet删了,直接访问index.jsp可以,加上servlet就是不行啊
kenhins 2014-01-22
  • 打赏
  • 举报
回复
楼主你的问题解决了吗?
向上一区 2012-10-23
  • 打赏
  • 举报
回复
【又因为你在config文件中没有定义:/mymobile/subclass/js=mapping。。。(不过我定义了,还是不可以)
】原来我定义错了。这里定义的时候不能有webappcontext,所以就是
<mvc:resources location="/subclass/js/" mapping="/js/**"/>就可以了了。

我本地测试过了。
但是这种方法不好,如果以后一个类的请求/user,/XX,/AA,这样就要定义很多个了。
向上一区 2012-10-23
  • 打赏
  • 举报
回复
[Quote=引用 14 楼 的回复:]

引用 13 楼 的回复:

算了 我再白话一次

用户请求 http://localhost/mymobile/subclass/123 ;注意现在的当前目录是 /mymobile/subclass

action 让 这个请求 显示 根项目的subclasss 这个文件

由于当前http请求的目录是/mymobile/subclass,但却显示了/mymoblie下面的文件……
[/Quote]
说的很对。
这个问题,我也遇到过。请求url是/webappcontext/subclass/XXX,这个时候页面时找到,但是页面引用的js,css等的url是/webappcontext/subclass/+页面的src路径=/mymobile/subclass/js/jquery/jquery.min.js
又因为你在config文件中没有定义:/mymobile/subclass/js=mapping。。。(不过我定义了,还是不可以)
只定义了<mvc:resources location="/js/" mapping="/js/**"/> 所以自然找不到资源文件。

解决方法1:写一个url mapping,@RequestMapping("/{fid}")
但是这样就限定了开发者要求了。

解决方法1:<mvc:resources location="/js/" mapping="/js/**"/>不变,但是jsp文件的引用js可能需要修改,这个有待调查。
jackzhangyi 2012-09-18
  • 打赏
  • 举报
回复
唉,楼主好好理解下别人回复的含义~
zzylmt 2012-09-18
  • 打赏
  • 举报
回复
[Quote=引用 13 楼 的回复:]

算了 我再白话一次

用户请求 http://localhost/mymobile/subclass/123 ;注意现在的当前目录是 /mymobile/subclass

action 让 这个请求 显示 根项目的subclasss 这个文件

由于当前http请求的目录是/mymobile/subclass,但却显示了/mymoblie下面的文件

所以整个请求看起来就是 访……
[/Quote]
真对不住你,还是没明白要怎么做……
cscript 2012-09-18
  • 打赏
  • 举报
回复
算了 我再白话一次

用户请求 http://localhost/mymobile/subclass/123 ;注意现在的当前目录是 /mymobile/subclass

action 让 这个请求 显示 根项目的subclasss 这个文件

由于当前http请求的目录是/mymobile/subclass,但却显示了/mymoblie下面的文件

所以整个请求看起来就是 访问了 http://localhost/mymobile/subclass/subclass.jsp (别给我说你的subclass.jsp又在根目录有没有在subclass目录下,好好看看服务器跳转的知识吧)

既然访问了http://localhost/mymobile/subclass/subclass.jsp(看起来)

那这个页面的js加载方式也是相对当前目录,也就是 mymobile/subclass

所以最后导致js加载成了 /mymobile/subclass/js/jquery/jquery.min.js

套用7楼我说的一句话 导入的js是相对当前请求的路径的,而不是相对于你在服务器文件的放置目录的

不是说你两个文件都放在根目录,就可以访问,当在服务器内部跳转 这个路径就发生了微妙变化了,

表达得不是很清楚,我的沟通能力还需要加强啊,你自己慢慢体会吧
cscript 2012-09-18
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 的回复:]

引用 9 楼 的回复:

HTML code
<%
String basepath = request.getContextPath()+"/";
%>
<script type="text/javascript" src="<%=basepath%>/mymobile/js/jquery/jquery.min.js"></script>

老兄,你没搞清楚我情况哦 T_T
……
[/Quote]

我靠 我不是在7楼说了 为什么会访问/mymobile/subclass/js/jquery/jquery.min.js而不是/mymobile/js/jquery/jquery.min.js

仔细看看 7楼 如果你还没看懂是什么原因的话

我“。。。”
zzylmt 2012-09-18
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 的回复:]

HTML code
<%
String basepath = request.getContextPath()+"/";
%>
<script type="text/javascript" src="<%=basepath%>/mymobile/js/jquery/jquery.min.js"></script>
[/Quote]
老兄,你没搞清楚我情况哦 T_T
我这麻烦不是绝对路径的什么问题,而是我不知道为什么程序会去访问/mymobile/subclass/js/jquery/jquery.min.js而不是/mymobile/js/jquery/jquery.min.js
cscript 2012-09-18
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 的回复:]

引用 7 楼 的回复:

哦 不好意思 漏看这里了

@RequestMapping("/subclass/{fid}")

也就说 你现在的请求路径 是 /mymobile/subclass/ 下 显示的页面

而页面上的导入的js <script src="js/jquery/jquery.min.js"></script>

是相对当期目录 也就是 /mymobile……
[/Quote]

js 用绝对路径哈

<script src="/mymobile/js/jquery/jquery.min.js"></script>

你实在要用相对路径也行(如果后期没有其他请求转到这个文件的话也没多大问题)

<script src="../js/jquery/jquery.min.js"></script>

综上,绝对路径最靠谱
Cactus_hxk 2012-09-18
  • 打赏
  • 举报
回复
<% 
String basepath = request.getContextPath()+"/";
%>
<script type="text/javascript" src="<%=basepath%>/mymobile/js/jquery/jquery.min.js"></script>
zzylmt 2012-09-18
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 的回复:]

哦 不好意思 漏看这里了

@RequestMapping("/subclass/{fid}")

也就说 你现在的请求路径 是 /mymobile/subclass/ 下 显示的页面

而页面上的导入的js <script src="js/jquery/jquery.min.js"></script>

是相对当期目录 也就是 /mymobile/subclass/ 所以 浏览……
[/Quote]

我就是想知道怎么才能让它访问/mymobile/js/jquery/jquery.min.js
cscript 2012-09-18
  • 打赏
  • 举报
回复
哦 不好意思 漏看这里了

@RequestMapping("/subclass/{fid}")

也就说 你现在的请求路径 是 /mymobile/subclass/ 下 显示的页面

而页面上的导入的js <script src="js/jquery/jquery.min.js"></script>

是相对当期目录 也就是 /mymobile/subclass/ 所以 浏览器确实找不到

也就说 这里导入的js是相对当前请求的路径的,而不是相对于你在服务器文件的放置目录的

所以你最好在 页面导入js时写绝对路径吧

zzylmt 2012-09-18
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 的回复:]

引用 2 楼 的回复:

引用 1 楼 的回复:

把 view.setViewName("/subclass");

改成

view.setViewName("subclass"); 试试

没用。我subclass.jsp刚好在根目录下~~


没用? 你有这样改过试试吗? 看你的代码 视图名只需要 subclass 就行了 不需要写成 /subclass 啊……
[/Quote]
不要这么怀疑好不好,真试过了。
js就是这样写的啊~~~
<script src="js/jquery/jquery.min.js"></script>
cscript 2012-09-18
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 的回复:]

引用 1 楼 的回复:

把 view.setViewName("/subclass");

改成

view.setViewName("subclass"); 试试

没用。我subclass.jsp刚好在根目录下~~
[/Quote]

没用? 你有这样改过试试吗? 看你的代码 视图名只需要 subclass 就行了 不需要写成 /subclass 啊

然后你的 subclass.jsp 里面 导入js的代码怎么写的
zzylmt 2012-09-18
  • 打赏
  • 举报
回复
spring-sevlet.xml
<?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:p="http://www.springframework.org/schema/p"
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-3.0.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-3.0.xsd
http://www.springframework.org/schema/mvc
http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd">

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



<!-- ①:对web包中的所有类进行扫描,以完成Bean创建和自动依赖注入的功能 -->
<context:component-scan base-package="com" />
<context:property-placeholder location="/WEB-INF/jdbc.properties" />
<!-- spring的默认实现,不配置也一样 -->
<bean class="org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerMapping" />

<!-- ②:启动Spring MVC的注解功能,完成请求和注解POJO的映射 -->
<bean class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter" />

<!-- ③:对模型视图名称的解析,即在模型视图名称添加前后缀 -->
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"
p:prefix="/" p:suffix=".jsp" />

<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource" destroy-method="close"
p:driverClass="${app.jdbc.driverClassName}"
p:jdbcUrl="${app.jdbc.url}"
p:user="${app.jdbc.username}"
p:password="${app.jdbc.password}"
p:acquireIncrement="5"
p:idleConnectionTestPeriod="60"
p:maxPoolSize="100"
p:maxStatements="50"
p:minPoolSize="10" />

<bean id="jdbctemplate" class="org.springframework.jdbc.core.JdbcTemplate">
<property name="dataSource" ref="dataSource" />
</bean>

<!-- 总错误处理-->
<bean id="exceptionResolver" class="org.springframework.web.servlet.handler.SimpleMappingExceptionResolver">
<property name="defaultErrorView">
<value>/error</value>
</property>
<property name="defaultStatusCode">
<value>500</value>
</property>
<property name="warnLogCategory">
<value>org.springframework.web.servlet.handler.SimpleMappingExceptionResolver</value>
</property>
</bean>
</beans>
cscript 2012-09-18
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 的回复:]

引用 1 楼 的回复:

把 view.setViewName("/subclass");

改成

view.setViewName("subclass"); 试试

没用。我subclass.jsp刚好在根目录下~~
[/Quote]

那直接把你的mapping 配置 post上来吧
zzylmt 2012-09-18
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 的回复:]

把 view.setViewName("/subclass");

改成

view.setViewName("subclass"); 试试
[/Quote]
没用。我subclass.jsp刚好在根目录下~~
cscript 2012-09-18
  • 打赏
  • 举报
回复
把 view.setViewName("/subclass");

改成

view.setViewName("subclass"); 试试

67,513

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧