欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

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

程序员文章站 2023-12-27 09:05:57
...

最近在学习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遇到的一些问题(待解决)

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,输入路径地址,得到预期的表单界面

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

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

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

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

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

SpringMvc遇到的一些问题(待解决)对的,就是和js文件在同一级目录下的不同文件夹里

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

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

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

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

回头看eclipse的控制台

SpringMvc遇到的一些问题(待解决)看起来很眼熟的错误,是静态资源访问不到的问题

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

上一篇:

下一篇: