SpringMVC配置式开发
1. SpringMVC运行原理(执行过程)
2. 需求
用户提交一个请求, 服务端处理器接收到请求后, 给出一条信息,在相应页面中显示该条信息
3. 开发步骤
(1) 导入jar包
导入18个jar包
com.springsource.com.mchange.v2.c3p0-0.9.1.2.jar
com.springsource.org.aopalliance-1.0.0.jar
com.springsource.org.apache.commons.logging-1.1.1.jar
com.springsource.org.apache.log4j-1.2.15.jar
com.springsource.org.aspectj.weaver-1.6.8.RELEASE.jar
junit-4.9.jar
mysql-connector-java-5.1.30.jar
spring-aop-4.1.6.RELEASE.jar
spring-aspects-4.1.6.RELEASE.jar
spring-beans-4.1.6.RELEASE.jar
spring-context-4.1.6.RELEASE.jar
spring-context-support-4.1.6.RELEASE.jar
spring-core-4.1.6.RELEASE.jar
spring-expression-4.1.6.RELEASE.jar
spring-jdbc-4.1.6.RELEASE.jar
spring-tx-4.1.6.RELEASE.jar
spring-web-4.1.6.RELEASE.jar
spring-webmvc-4.1.6.RELEASE.jar
(2) 配置web. xml, 注册SpringMVC前端控制器(中央调度器)
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
<!-- 注册springmvc前端控制器(中央调度器) -->
<servlet>
<servlet-name>springmvc</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<!-- 指定springmvc配置文件的路径以及名称 -->
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:springmvc.xml</param-value>
</init-param>
</servlet>
<servlet-mapping>
<servlet-name>springmvc</servlet-name>
<url-pattern>*.do</url-pattern>
</servlet-mapping>
(3) 编写SpringMVC后端控制器
public class MyController implements Controller {
@Override
public ModelAndView handleRequest(HttpServletRequest request, HttpServletResponse response) throws Exception {
ModelAndView mv = new ModelAndView();
System.out.println("进入到后端控制器方法!");
mv.addObject("msg", "Hello SpringMVC!");
mv.setViewName("/jsp/welcome.jsp");
return mv;
}
}
(4) 编写springmvc配置文件, 注册后端控制器( 注意id写法格式)
新建一个springmvc.xml
<bean id="/my.do" class="com.mypack.handlers.MyController"></bean>
(5) 编写跳转资源页面
编写welcome.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
...
<body>
${msg}
</body>
...
控制类代码:
public class MyController implements Controller {
@Override
public ModelAndView handleRequest(HttpServletRequest request, HttpServletResponse response) throws Exception {
ModelAndView mv = new ModelAndView();
System.out.println("进入到后端控制器方法!");
mv.addObject("msg", "Hello SpringMVC!");
mv.setViewName("/jsp/welcome.jsp");
return mv;
}
}
4. web. xml中urlpattern配置问题
(1) 配置/和/*的区别
<url-pattern>/*</url-pattern>: 这种形式将会覆盖所有其它的servlet。不管你发出了什么样的请求,最终都会在这个servlet中结束。因此,对于servlet来说,这是一个很糟糕的URL模式。通常来讲,你只会想要在一个Filter中使用这种模式。它可以通过调用doFilter()方法来使请求继续。
<url-pattern>/</url-pattern>: 这种形式不会覆盖任何其它的servlet。它仅仅替换了servlet容器中内建的默认servlet。这种形式通常只用来请求静态资源(CSS/JS/image等)和展示目录的列表。
(2) 静态资源无法访问解决方案( 三种)
1) 第一种:web.xml配一个servlet-mapping,名字叫default
<servlet-mapping>
<servlet-name>default</servlet-name>
<url-pattern>*.png</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>default</servlet-name>
<url-pattern>*.js</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>default</servlet-name>
<url-pattern>*.css</url-pattern>
</servlet-mapping>
2) 第二种:springmvc.xml中,mvc标签增加一个默认的servlet处理器标签
<mvc:default-servlet-handler/>
3) 第三种:springmvc.xml中,mvc标签resources属性images下的所有资源,都会进行映射
<mvc:resources location="/images/" mapping="/images/**"></mvc:resources>