springmvc 执行原理
页面发送请求,控制器根据请求找到相应的映射(方法),执行功能后,根据返回结果,经过视图解析器处理,跳转到相应页面,呈现处理结果。
环境搭建步骤
1、导入相关 jar 包
百度云自取 搭建springmvc需要的jar包
2、在 web.xml 中配置 dispatchServlet
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5"
xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
<!-- 配置 DispatcherServlet -->
<servlet>
<servlet-name>springDispatcherServlet</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:springmvc.xml</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>springDispatcherServlet</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
</web-app>
3、编写 springmvc.xml 文件,配置 视图解析器
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://www.springframework.org/schema/beans"
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-4.0.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.0.xsd
http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-4.0.xsd ">
<!-- 自动扫描 -->
<context:component-scan base-package="com.xiao.leave"></context:component-scan>
<!-- 配置视图解析器 -->
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix" value="/view/"></property>
<property name="suffix" value=".jsp"/>
</bean>
</beans>
4、编写控制器和相关页面
import java.util.Arrays;
import java.util.Date;
import java.util.Map;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.SessionAttributes;
import org.springframework.web.servlet.ModelAndView;
import com.xiao.leave.entities.Students;
@SessionAttributes(value={"stu"},types={String.class})
@Controller
@RequestMapping("/login")
public class LonginAction {
private static final String SUCCESS = "success";
@RequestMapping("/testSessionAttribute")
public String testSessionAttribute(Map<String, Object> map){
Students stu = new Students("xiao", 24, "123456");
map.put("stu", stu);
map.put("addr", "北京");
return SUCCESS;
}
@RequestMapping("/testModelAndView")
public ModelAndView testModelAndView(){
String viewName = SUCCESS;
ModelAndView modelandview = new ModelAndView(viewName);
modelandview.addObject("time",new Date());
return modelandview;
}
@RequestMapping("/testMap")
public String testMap(Map<String, Object> map){
map.put("names", Arrays.asList("tom", "mike", "lily"));
System.out.println(map.getClass().getName());
return SUCCESS;
}
@RequestMapping("/testPojo")
public String testPojo(Students stu){
System.out.println("Student:" + stu);
return SUCCESS;
}
@RequestMapping("testRequestParam")
public String testRequestParam(@RequestParam(value="username") String un,
@RequestParam(value="age",required=false,defaultValue="0") int age){
/**
* RequestParam 映射请求参数
* value:请求参数的参数名
*/
System.out.println("testRequestParam: username = " + un + ", age = " + age);
return SUCCESS;
}
@RequestMapping("/testPathVariable/{id}")
public String testPathVariable(@PathVariable("id")Integer id){
//PathVariable 可以映射 url 中占位符到目标方法的参数中
System.out.println("testPathVariable ==" + id);
return SUCCESS;
}
@RequestMapping("testAntPath/*/aa")
public String testAntPath(){
// * 匹配任意个字符,? 匹配一个字符,** 匹配多层路径
System.out.println("testAntPath");
return SUCCESS;
}
@RequestMapping(value="/testparaAndMethod", params={"username","age!=10"}, method=RequestMethod.POST)
public String testparaAndMethod(){
/**
* value表示请求路径的映射
* params表示传入的参数;!=表示有该参数,但是不等于某值,
* method表示请求方式
*/
System.out.println("testparaAndMethod");
return SUCCESS;
}
@RequestMapping("/helloworld")
public String helloworld(){
System.out.println("helloworld");
return SUCCESS;
}
}
success.jsp
<body>
<h2>恭喜!登录成功</h2>
<h4>names: ${requestScope.names} </h4>
<h4>time: ${requestScope.time} </h4>
<h4>request stu: ${requestScope.stu} </h4>
<h4>session stu: ${sessionScope.stu} </h4>
<h4>request addr: ${requestScope.addr} </h4>
<h4>session addr: ${sessionScope.addr} </h4>
</body>
login.jsp
<body>
<a href="login/testSessionAttribute">testSessionAttribute</a><br/>
<a href="login/testModelAndView">testModelAndView</a><br/>
<a href="login/testMap">testMap</a><br/>
<form action="login/testPojo">
姓名:<input type="text" name="sname"><br/>
年龄:<input type="text" name="sage"><br/>
手机:<input type="text" name="stel"><br/>
省份:<input type="text" name="saddr.province"><br/>
城市:<input type="text" name="saddr.city"><br/>
<input type="submit" value="提交">
</form>
<a href="login/testRequestParam?username=xiao&age=24">testRequestParam</a><br>
<a href="login/testPathVariable/1">testPathVariable</a><br/>
<a href="login/testAntPath/hello/aa">testAntPath</a><br/>
<form action="login/testparaAndMethod?username=xiao&age=11" method="post">
<input type="submit" value="登录"/>
</form>
<a href="login/helloworld">hello world</a><br/>
</body>
</html>
点击 login.jsp 中的链接,能成功跳转到 success.jsp 页面,则说明环境搭建成功!(testPojo 需要写一个 pojo,加入get set toString 方法)
以上为自己看相关教程后自己的理解,如果不妥之处,请指正