SpringMvc遇到的一些问题(待解决)

最近在学习SpringMvc,正好学习到使用RESTful风格支持代码,但是在用RESTful编写一个简单的根据用户用户id查询用户名的che程序时,遇到了一个疑惑。那就是在使用mvc时web.xml配置的拦截器会自动帮我们拦截所有请求,如下的配置

 <!-- DispatcherServlet控制器 -->
  <servlet>
    <servlet-name>springmvc</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    <!-- 配置Spring MVC加载配置文件路径 --> 
    <init-param>
      <param-name>contextConfigLocation</param-name>
      <param-value>classpath:springmvc-config.xml</param-value>
<!-- 默认启动加载 -->
    </init-param>
    <load-on-startup>1</load-on-startup>
  </servlet>
<!-- 拦截所有请求 -->
  <servlet-mapping>
    <servlet-name>springmvc</servlet-name>
    <url-pattern>/</url-pattern>
  </servlet-mapping>

此时spring所有请求的URL都是在controller中使用注解@RequestMapping标明,所以这样的情况下访问静态资源是访问不到的,因此我在springmvc的配置文件中添加了资源映射文件<mvc:resources/>

我的项目目录如下

springmvc配置文件如下

	<!-- 配置控制器层包扫描 -->   
	<context:component-scan base-package="com.zsp.controller"/>
	<!-- 注解驱动 -->
	<mvc:annotation-driven/>
	<!-- 检查请求的URL是否是静态资源,并交由tomcat-Web应用服务器默认的Servlet处理 -->
	<!-- <mvc:default-servlet-handler/> -->
	<!-- 定义视图解析器 -->
	<bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
		<property name="prefix" value="/WEB-INF/jsp/"/>
		<property name="suffix" value=".jsp"/>
	</bean>
	<mvc:resources location="/js/" mapping="/js/**"/>

注解: 
mapping:映射    
location:本地资源路径,注意必须是webapp根目录下的路径。          
两个*,它表示映射resources/下所有的URL,包括子路径(即接多个/)

这是我的控制器


@Controller
public class UserController {

	/**
	 * 接受RESTful风格的请求,其接收方式为GET
	 */
	@RequestMapping(value="/user/{id}",method=RequestMethod.GET)
	@ResponseBody
	public User selectUser(@PathVariable("id") String id) {
		//查看数据接收
		System.out.println("id:"+id);
		User user = new User();
		//TODO 根据id查询用户
		if(id.equals("123")) {
			user.setUserName("周阿毛");
			user.setPassWord("666666");
		}
		//返回JSON格式的数据
		return user;
	}
}

然后前端页面是个简单的jsp页面

<%@ page language="java" contentType="text/html; charset=UTF-8"
	pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<title>RESTful测试</title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<script type="text/javascript" src="js/jquery-1.11.3.min.js"></script>
<script type="text/javascript">
function search(){
	// 获取输入的查询编号
	var id = $("#number").val();
	$.ajax({
		url : "user/"+id,
		type : "GET", 
		//定义回调响应的数据格式为JSON字符串,该属性可以省略
		dataType : "json",
		//成功响应的结果
		success : function(data){
			if(data.userName != null){	
			    alert("您查询的用户是:"+data.userName);
			}else{
			    alert("没有找到id为:"+id+"的用户!");
			}
		}
	});
}
</script>
</head>
<body>
	<form>
		编号:<input type="text" name="number" id="number"> <input
			type="button" value="搜索" onclick="search()" />
	</form>
</body>
</html>

可以看到这个代码的作用是从前端发出请求消息通过绑定机制传入请求参数到后台,并转换成方法形参传入到方法里,最后再通过@Responsebody返回return对象。

运行tomcat,输入路径地址,得到预期的表单界面

此时只有输入“123”cai才会得到在控制器定义的用户名数据,否则会弹出找不到此用户的弹窗

在这里一切都在正常运行,于是闲的没事干的我又在鼓捣了,在webapp目录下新建了个list文件夹,并将原本在webapp目录下的restful.jsp复制进了list文件夹

对的,就是和js文件在同一级目录下的不同文件夹里

然后浏览器里再用list文件夹里的restful.jsp的路径访问,能正常进入jsp页面,但无论输入什么,点击按钮都没反应

查看浏览器控制台发现报404

回头看eclipse的控制台

看起来很眼熟的错误,是静态资源访问不到的问题

但是无论是在restful.jsp文件里用绝对路径引用 js文件,还是修改资源映射文件的路径,都不能很好的解决(有时不会报404但参数传不进后台),故此记录,以待日后改进

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值