springMVC
1.springMVC原理和servlet是一样的,都是在web.xml里面配置servlet,不同的是springMVC会把请求映射成对应的Controller,通过RequestMapping来映射。原理图如下:
2.创建一个springMVC例子
(1)需要的jar包
spring-aop.jar
spring-beans.jar
spring-context.jar
spring-core.jar
spring-expression.jar
spring-web.jar
spring-webmvc.jar
(2)
在web.xml里面配置DispatcherServlet,用于映射前端发送的请求。
DispatcherServlet是前端控制器,配置在web.xml中,拦截匹配的请求,匹配规则自己定义。把拦截到的请求
根据相应的规则分发到目标Controller里对应的RequestMapping来处理,是配置SpringMVC的第一步。
<servlet> <servlet-name>dispatcherServlet</servlet-name> <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> <!--配置DispatcherServlet初始化参数,配置springMVC配置文件的位置和名称--> <init-param> <param-name>contextConfigLocation</param-name> <!-- <param-value>classpath:springmvc.xml</param-value> --> <param-value>/WEB-INF/springmvc.xml</param-value> </init-param> <!--servlet在web容器加载时创建,而非在第一次访问时才创建,servelt默认不加载,只有在第一次访问时才加载--> <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <servlet-name>dispatcherServlet</servlet-name> <!--对所有后缀是.json的请求进行拦截,匹配--> <url-pattern>*.json</url-pattern> </servlet-mapping>
(2)创建第一步中的springmvc.xml配置文件
<!--配置自动扫描的包--> <context:component-scan base-package="com.springmvc"/> <!--配置视图解析器,把handler的返回值,转换为实际的物理视图, 即RequestMapping对应的方法,有一个返回值,要根据对应的返回值,跳转到不同的页面 --> <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"> <!-- 要跳转页面的前缀,即页面所在的路径 --> <property name="prefix" value="/view/" /> <!-- 要跳转页面的后缀名--> <property name="suffix" value=".html" /> </bean>
(3)创建handler类TestHandler
@Controller public class TestHandler { /** * 0、前端控制器DispatcherServlet收到请求,发给和url相匹配的RequestMapping * * 1、使用@RequestMapping映射前端请求的url * * 2、返回时会通过视图解析器,解析为实际的物理视图 * 对于视图解析器InternalResourceViewResolver会做如下解析 * 通过 prefix + returnVal + suffix 得到实际的物理视图,然后做请求转发 * */ @RequestMapping(value={"/helloworld.json"},method={RequestMethod.GET}) public String sayHello(){ return "success"; } }
(4)页面访问index.html
<a href="helloworld.json">helloworld</a>
仔细看一下TestHandler类,里面有许多springMVC控制器使用的细节。包括参数的传递。
(5)其他:
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>Insert title here</title> </head> <body> <a href="testCookie.json">testCookie</a> <a href="/test/helloworld.json">helloworld</a> <form action="testRequestHeader.json" method="post"> <input type="submit" value="SUBMIT" /> </form> <br> <form action="test/testPojo.json" method="post"> name:<input type="text" name="username" /> <br> password:<input type="password" name="passwd" /> <br> age:<input type="text" name="age" /> <br> province:<input type="text" name="address.province" /> <br> city:<input type="text" name="address.city" /> <br> <input type="submit" value="提交" /> </form> <a href="test/testServletApi.json">testServletApijson</a> </body> </html>