L130101X1
1、新建web项目工程名字为L130101X1SpringMVC,创建的时候使用next选择上web.xml的创建,将相关的jar文件拷贝到WEB-INF下的bin目录,jar文件明细如下:
2、在web.xml中配置相关代码
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" id="WebApp_ID" version="3.0">
<display-name>L130101X1SpringMVC</display-name>
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
<!-- 核心控制器的配置DispatchServlet -->
<servlet>
<servlet-name>springmvc</servlet-name>
<servlet-class>
org.springframework.web.servlet.DispatcherServlet
</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:springmvc-servlet.xml</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>springmvc</servlet-name>
<url-pattern>/</url-pattern>
</web-app>
3、在工程下建立source folder命名为resource,里面创建springmvc-servlet.xml配置文件,在里面配置一下代码
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:mvc="http://www.springframework.org/schema/mvc"
xmlns:p="http://www.springframework.org/schema/p"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd
http://www.springframework.org/schema/mvc
http://www.springframework.org/schema/mvc/spring-mvc.xsd">
<!-- 配置处理器映射 HandlerMapping-->
<bean name="/index.html" class="cn.smbms.controller.IndexController"></bean>
<!-- 配置视图解析器 /EWB-INF/JSP/index.jsp-->
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix" value="/WEB-INF/jsp/"/>
<property name="suffix" value=".jsp"></property>
</bean>
</beans>
4、在src下面建立包cn.smbms.controller,在包里面建立IndexController.java,里面配置以下代码
public class IndexController extends AbstractController {
protected ModelAndView handleRequestInternal(HttpServletRequest arg0,
HttpServletResponse arg1) throws Exception {
System.out.println("hello,spring mvc1!");
return new ModelAndView("index");}}
5、在项目WEB-INF下建立jsp文件夹里面建index.jsp,页面上输出
<body>welcome,spring mvc!</body>
6、在浏览器中输入
http://localhost:8080/L130101X1SpringMVC/index.html进行访问
7、运行结果:
控制台和页面均输出welcome,spring mvc!
L130102X1
处理有多个映射关系的问题
1、修改springmvc-servlet.xml配置文件
(1)注释掉<!-- <bean name="/index.html" class
="cn.smbms.controller.IndexController"></bean> -->
(2)加入代码<mvc:annotation-driven/>
2、修改IndexController.java,修改后的代码为:
@Controller
public class IndexController{
@RequestMapping("/index")
public ModelAndView index(){
System.out.println("hello spring mvc");
return new ModelAndView("index");}}
3、再去修改springmvc-servlet.xml配置文件
在<mvc:annotation-driven/>后面加上一下标签
<context:component-scan base-package="cn.smbms
.controller"></context:component-scan>
4、部署项目,在浏览器中访问
http://localhost:8080/L130101X1SpringMVC/index,结果出现
welcome,spring mvc!
4、将修改IndexController.java中代码做如下修改
@Controller
public class IndexController{
@RequestMapping("/index")
public String index(){
System.out.println("hello spring mvc");
return "index";
}
}
重新部署项目,浏览器访问出现同样的结果
L130103X1
实现参数传递
1、改造IndexController.java中代码
@Controller
public class IndexController{
private Logger logger=Logger.getLogger(IndexController.class);
@RequestMapping("/welcome")
public String welcome(@RequestParam String username){
logger.info("hello spring mvc! username:"+username);
return "index"; }}
2、将log4j.properties文件拷贝进入resource目录下
3、部署项目在浏览器中输入http://localhost:8080/L130101X1SpringMVC/welcome?username=admin
4、运行结果:
(1)浏览器中输出welcome,spring mvc!
(2)服务器中输出[INFO] 2019-11-08 10:55:30,618
cn.smbms.controller.IndexController - hello spring mvc! username:admin
5、如果直接输入http://localhost:8080/L130101X1SpringMVC/welcome将会报错,提示没有传入username
L130103X2
多个Controller.java的时候,类前使用@RequestMapping("/user")
1、在cn.smbms.controller下新建UserController.java代码为
@Controller
@RequestMapping("/user")
public class UserController{
private Logger logger=Logger.getLogger(UserController.class);
@RequestMapping("/welcome")
public String welcome(@RequestParam String username){
logger.info("hello spring mvc1! username:"+username);
return "index"; }}
2、在浏览器中输入
http://localhost:8080/L130101X1SpringMVC/user/welcome?username=admin进行访问
3、控制台结果:INFO] 2019-11-08 11:24:51,063
cn.smbms.controller.UserController - hello spring mvc1! username:admin
浏览器结果:welcome,spring mvc!
4、分析:由于@RequestMapping("")全局唯一性,在
IndexController.java中的方法前已有
@RequestMapping("/welcome"),在UserController.java中的方法前也有@RequestMapping("/welcome"),这时候访问将出现冲突错误,因此在UserController.java的类前加@RequestMapping("/user"),相当于welcome在user的下面,如果浏览器访问http://localhost:8080/L130101X1SpringMVC/welcome?username=admin控制台将输出IndexController.java的结果
L130103X3
1、从RequestMapping的源码可以看出,value为String[]
2、使用IndexController.java测试
@RequestMapping({"/index","/"})
public String index(){
logger.info("hello spring mvc");
return "index";}
3、在浏览器中国输入
http://localhost:8080/L130101X1SpringMVC/index
http://localhost:8080/L130101X1SpringMVC/
得出的结果均为index()方法的输出
5、注意需要将WebRoot下面的index.jsp名称改为其他名字否则将会首先访问这个index.jsp
L130103X4
1、IndexController.java中方法改为
@RequestMapping(value="/welcome",method=RequestMethod.GET,params="username")
public String welcome(@RequestParam String username){
logger.info("hello spring mvc! username:"+username);
return "index";
}
2、浏览器中输入网址访问
http://localhost:8080/L130101X1SpringMVC/welcome?username=admin
3、浏览器结果:welcome,spring mvc!
控制台结果: cn.smbms.controller.IndexController - hello spring mvc! username:admin
4、将浏览器的访问网址参数改为?Usercode=admin,进行访问测试
页面报错,控制台报错,控制台报错信息为:
Parameter conditions "username" not met for actual request parameters: usercode={admin}
5、对于4中的浏览器访问网址中的参数不变,改变方法中的传参 @RequestMapping(value="/welcome",method=RequestMethod.GET,params="username")
public String welcome(@RequestParam String usercode){
logger.info("hello spring mvc! usercode:"+usercode);
return "index";
}
测试结果与4一样
6、如果将方法的代码改成以下代码直接入参
@RequestMapping(value="/welcome",method=RequestMethod.GET,params="username")
public String welcome(String usercode){
logger.info("hello spring mvc! usercode:"+usercode);
return "index";
}
测试结果浏览器可以输出但是控制台的结果为:
cn.smbms.controller.IndexController - hello spring mvc! usercode:null
7、从以上测试可以看出,RequestMapping的value值参数需要与方法中的参数保持一致
L130103X5
测试required的使用,默认为true,即有参数不传参便报错
1、方法代码改为:
@RequestMapping(value="/welcome",method=RequestMethod.GET,params="username")
public String welcome(@RequestParam(value="username",required=false) String username){
logger.info("hello spring mvc! username:"+username);
return "index";
}
2、浏览器带参数名访问
http://localhost:8080/L130101X1SpringMVC/welcome?username=admin
浏览器结果:正常
控制台结果: hello spring mvc! username:admin
3、浏览器去掉参数名访问
http://localhost:8080/L130101X1SpringMVC/welcome
浏览器结果:400错误
控制台结果:Parameter conditions "username" not met for actual request parameters
原因是因为@RequestMapping中有参数,但是访问的时候没有给他
4、将@RequestMapping中的参数username去掉后访问
@RequestMapping(value="/welcome",method=RequestMethod.GET)
http://localhost:8080/L130101X1SpringMVC/welcome
浏览器结果:正常
控制台结果: hello spring mvc! username:null
L120104X1 测试ModelAndView
1、IndexController.java方法代码改为
@RequestMapping({"/index1","/"})
public ModelAndView index(String username){
ModelAndView mView=new ModelAndView();
mView.addObject("username",username);
mView.setViewName("index");;
logger.info("hello spring mvc");
return mView;
}
2、将index.jsp中<body>加入
<h1>welcome,springMVC!</h1>
<h1>username--------> ${username}</h1>
3、浏览器访问
http://localhost:8080/L130101X1SpringMVC/index1?username=admin
5、浏览器结果:
welcome,springMVC!
username--------> admin
1、IndexController.java方法代码改为
@RequestMapping({"/index2"})
public String index2(String username,Model model){
model.addAttribute("username", username);
return "index";
}
2、index.jsp中代码不变
3、浏览器访问
http://localhost:8080/L130101X1SpringMVC/index2?username=admin123
4、浏览器结果:
welcome,springMVC!
username--------> admin123
L120104X3 测试model 不使用key值测试
1、IndexController.java方法代码改为
@RequestMapping({"/index2"})
public String index2(String username,Model model){
model.addAttribute("username", username);
model.addAttribute(username);
return "index";
}
2、index.jsp中代码
<h1>welcome,springMVC!</h1>
<h1>username--------> ${username}</h1>
<h1>username--------> ${string}</h1>
3、浏览器访问
http://localhost:8080/L130101X1SpringMVC/index2?username=admin123
4、浏览器结果:
welcome,springMVC!
username--------> admin123
username--------> admin123
5、注意: ${string}中的string的首字母s为小写
L120104X4 测试model 使用user类进行传递参数 不使用key值测试
1、IndexController.java方法代码改为
@RequestMapping({"/index2"})
public String index2(String username,Model model){
model.addAttribute("username", username);
model.addAttribute(username);
User user=new User();
user.setUserName(username);
model.addAttribute(user);
return "index";
}
2、将index.jsp中<body>代码
<h1>welcome,springMVC!</h1>
<h1>username--------> ${username}</h1>
<h1>username--------> ${string}</h1>
<h1>username--------> ${user.userName}</h1>
3、浏览器访问
http://localhost:8080/L130101X1SpringMVC/index2?username=admin123
4、浏览器结果:
welcome,springMVC!
username--------> admin123
username--------> admin123
username--------> admin123
L120104X5 测试model 使用user类进行传递参数 使用key值测试
1、将L120104X3 的IndexController.java方法代码中加上
model.addAttribute("currentUser", user);
2、将index.jsp中<body>代码中加上
<h1>username currentUser-------->
${currentUser.userName}</h1>
3、浏览器访问
http://localhost:8080/L130101X1SpringMVC/index2?username=admin123
4、浏览器结果:
username currentUser--------> admin123
L120104X6 测试map
1、IndexController.java方法代码
@RequestMapping({"/index3"})
public String index3(String username,Map<String,Object> model){
model.put("username", username);
return "index";
}
2、将index.jsp中<body>代码中加上
<h1>username map--------> ${username}</h1>
3、浏览器访问
http://localhost:8080/L130101X1SpringMVC/index2?username=admin123
4、浏览器结果:
username map--------> admin123