L1301 SpringMVC体系结构和处理请求控制器

L130101X1 

1、新建web项目工程名字为L130101X1SpringMVC,创建的时候使用next选择上web.xml的创建,将相关的jar文件拷贝到WEB-INF下的bin目录,jar文件明细如下:

wpsB6EB.tmp

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[]

wpsB73A.tmp

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.jspwpsB73B.tmp

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值参数需要与方法中的参数保持一致

8、如果改成post方法,访问则出错,如果有两个方法,每个方法前面的@RequestMapping(value="/welcome",method=RequestMethod.GET,params="username")中的method不一样则同样满足全局唯一性

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

L120104X2 测试model 使用key值测试

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

猜你喜欢

转载自www.cnblogs.com/pere/p/11824222.html