javax.servlet servlet-api 2.5 javax.servlet.jsp jsp-api 2.2
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaeehttp://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd" version="4.0"> springmvc org.springframework.web.servlet.DispatcherServlet contextConfigLocation classpath:springmvc-servlet.xml 1 springmvc /
contextConfigLocation
classpath:springmvc-servlet.xml
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
//注意:这里我们先导入Controller接口public class HelloController implements Controller { //ModelAndView 模型和视图 ModelAndView mv = new ModelAndView(); //封装对象,放在ModelAndView中。Model mv.addObject("msg","HelloSpringMVC!"); //封装要跳转的视图,放在ModelAndView中 mv.setViewName("hello"); //: /WEB-INF/jsp/hello.jsp return mv; }}
<%@ page cOntentType="text/html;charset=UTF-8" language="java" %> ${msg}
完整的项目结构如下:
新建一个Moudle,springmvc-03-hello-annotation 。添加web支持!
确定导入了SpringMVC 的依赖
javax.servlet.jsp jsp-api 2.2 javax.servlet jstl 1.2
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd" version="4.0"> SpringMVC org.springframework.web.servlet.DispatcherServlet contextConfigLocation classpath:springmvc-servlet.xml 1 SpringMVC /
/ 和 /* 的区别: / url-pattern > 不会匹配到.jsp, 只针对我们编写的请求; 即:.jsp 不会进入spring的 DispatcherServlet类 。 /* url-pattern > 会匹配 *.jsp会出现返回 jsp视图 时再次进入spring的DispatcherServlet 类,导致找不到对应的controller所以>报404错。
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:cOntext="http://www.springframework.org/schema/context" xmlns:mvc="http://www.springframework.org/schema/mvc" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context https://www.springframework.org/schema/context/spring-context.xsd http://www.springframework.org/schema/mvc https://www.springframework.org/schema/mvc/spring-mvc.xsd"> id="internalResourceViewResolver">
在视图解析器中我们把所有的视图都存放在/WEB-INF/目录下,这样可以保证视图安全,因为这个目录下的文件,客户端不能直接访问。
@Controller@RequestMapping("/HelloController")public class HelloController { @RequestMapping("/hello") public String hello(Model model) { //向模型中添加属性msg与值,可以在JSP页面中取出并渲染 model.addAttribute("msg", "hello, SpringMVCAnnotation"); return "hello"; // 会被视图解析器处理 WEB-INF/jsp/hello.jsp }}
@Controller是为了让Spring IOC容器初始化时自动扫描到; @RequestMapping是为了映射请求路径,这里因为类与方法上都有映射所以访问时应该是/HelloController/hello; 方法中声明Model类型的参数是为了把Action中的数据带到视图中; 方法返回的结果是视图的名称hello,加上配置文件中的前后缀变成WEB-INF/jsp/hello.jsp
在WEB-INF/ jsp目录中创建hello.jsp,视图可以直接取出并展示从Controller带回的信息; 可以通过EL表示取出Model中存放的值,或者对象.
完整的项目结构:
这一部分是大家经常犯错误的地方,为什么一个项目部署了但总是访问不了,看看路径是不是对了。
我的访问路径是http://localhost:8080/springmvc/HelloController/hello
对于前半部分http://localhost:8080很好理解。
springmvc是因为在打war包的时候加的。
/HelloController/hello是因为在HelloController类中写的。