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但参数传不进后台),故此记录,以待日后改进
推荐阅读
-
mysql安装遇到的一些问题
-
SpringMvc遇到的一些问题(待解决)
-
Tensorflow 在c++上的编译和遇到的一些问题
-
修复 Django migration 时遇到的问题解决
-
不知大家遇到过这种问题么,一个层宽度设为100%,并设置背景图片,在浏览器中浏览,缩小窗口到滚动条出现,然后拖动滚动条到右侧,右侧的区域变成空白,怎么解决?_html/css_WEB-ITnose
-
php以CGI 模式安装时可能遇到的攻击及解决办法
-
SSM以流的形式实现单个文件下载时遇到文件名带中文时变成下划线解决办法
-
######ssh:Junit遇到initializationError(知识点:Junit测试3要素:public、void、无参)==解决:检查所有方法的注解。是否添加正确
-
PHP使用Session遇到的一个Permission denied Notice解决办法
-
微信支付之扫码支付开发:我遇到的坑及解决办法(附:Ecshop 微信支付插件),ecshop