SpringMVC项目配置步骤
(1)add Framework support… 选中web项目
(2)配置tomcat服务器,添加一个artifact
(3)WEB-INF下新建lib目录放入相关jar包
(4)加载jar包:Project Structure -> Libraries -> 加一个lib选中项目目录下对应lib位置(记得选中对应项目)
(5)在src下粘贴springmvc.xml文件,修改其中需要扫描的包(属性base-package)
(6)在web -> WEB-INF下的web.xml中使用alt+enter处理报错位置
部分用法 & 小知识总结
(1)使用时先新建一个XXXController类,然后在类前加上@Controller注解
(2)@RequestMapping注解可以让前台访问时能找到对应类和方法
(3)方法前可以通过加上在RequestMapping(value = “/insert”, method = RequestMethod.POST)注解中的method参数,来限制 方法可以接收的请求类型,如果不写,默认get和post请求都可以接收
(4)页面上的属性要和类里面的一致才可以使用
(5)访问完希望到一个页面展示,如果没有任何操作会报404错误
(6)要返回json格式数据,先导入3个jar包(保证3个jar包加载上),在方法前加上注解@ResponseBody,如果不需要就不要写
(7)SpringMVC中重定向的写法:return “redirect:/student/selectAll.action”(注意这里不用写项目名是因为SpringMVC帮我们简化了写法,而不是重定向本身不需要)
(8)SpringMVC中转发到一个页面展示:return “/student_info.jsp”(转发本身就不需要项目名)
(9)@RequestParam(value = “page”, required = true, defaultValue = “5”)注解的三个参数(里面所有的设置是用于后台中的一个参数):value用于前后台参数名的适配(当前台传过来的参数名和后台不一样时,可以设置value的值为前台的参数名,可以让前台的该参数名的参数适配后台的对应参数),required用于设置是否必须要传递该参数(如果设置该值为true,若前台没有传递过来这个参数,就会出现400错误),defaultValue用于设置参数的缺省值,如果前台没有传递该参数,那么会把该值赋给后台对应参数。
(10)405错误:找到了,但是不支持的请求(限制了接收的请求是post或者get之后,如果发送另一种请求则会出现这样的错误)
(11)400错误:错误的请求(少了参数)
另一种前台向后台参数传递的写法(参数作为路径传递):
// 另一种传参数的写法
// /SpringMVC/student/deleteById1/12.action
@RequestMapping("/deleteById1/{id}")
// 参数作为路径传递需要加上下面的注解
public String deleteById1(@PathVariable("id") Integer id) {
System.out.println("StudentController.deleteById1");
System.out.println("id: " + id);
return "redirect:/student/selectAll.action";
}
视图解析器:使用SpringMVC转发到页面展示等,让我们写转发路径时更简单一些
相当于自动加上对应的前缀和后缀,但是注意因为已经自动加上了,所以如果我们不去掉已有的对应前缀和后缀就会访问出错,需要配置springmvc.xml文件。springmvc.xml中的配置:
<!--视图解析器-->
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<!-- 路径前缀 -->
<property name="prefix" value="/jsp/"/>
<!-- 路径后缀 -->
<property name="suffix" value=".jsp"></property>
</bean>
拦截器的使用
相当于之前的filter,用法有所不同:新建MyInterceptor类implements实现HandlerInterceptor接口,重写其中的preHandle、postHandle和afterCompletion方法。相当于把原来filter中doFilter方法之前和之后的操作分开成了两个方法preHandle和postHandle,preHandle是在访问到后台之前的一些限制条件(方法返回值为boolean类型变量,true则继续访问,false则停止继续访问),postHandle是返回的过程中的操作。简单示例:
public class MyInterceptor1 implements HandlerInterceptor {
@Override
public boolean preHandle(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o) throws Exception {
System.out.println("MyInterceptor1.preHandle");
// true继续访问,false不继续执行
return true;
}
@Override
public void postHandle(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o, ModelAndView modelAndView) throws Exception {
System.out.println("MyInterceptor1.postHandle");
}
@Override
public void afterCompletion(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o, Exception e) throws Exception {
}
}
springmvc.xml文件中需要加上的配置:
<!-- 配置拦截器 -->
<mvc:interceptors>
<mvc:interceptor>
<mvc:mapping path="/**"/>
<!--路径需要修改-->
<bean class="mvc.interceptor.MyInterceptor1"/>
</mvc:interceptor>
<mvc:interceptor>
<mvc:mapping path="/**"/>
<bean class="mvc.interceptor.MyInterceptor2"/>
</mvc:interceptor>
</mvc:interceptors>