Spring MVC使用详解 环境搭建 XML配置

Spring MVC的优点

清晰地角色划分,灵活的配置功能,提供了大量的控制器接口和实现类,Spring提供了Web应用开发的一整套流程,不仅仅是MVC,他们之间可以很方便的结合一起。

Getting Started

1、目录

在这里插入图片描述
1.1、关于目录和文件
handler:处理器,用来处理请求和返回视图,可以认为等同于Servlet。
spring-mvc.xml:spring-mvc的核心配置
view:WEB-INF/view/的目录下用来放jsp

2、写一个handler类

Controller将本handler类纳入容器
RequestMapping设定类和方法的访问路径

@Controller  //纳入容器
@RequestMapping("/user") //此handler的访问路径
public class UserHandler {
	@RequestMapping("/login")//此方法的访问路径
	public String login() {
		System.out.println("login被调用了");
		//返回名为“hello”的视图文件
		return "hello";
	}
}

解读: 在这里,当用户访问http://localhost:8080/项目名/user/login 时,会调用UserHandler类的login方法,然后返回WEB-INF/view/文件夹下的hello.jsp文件。

为什么会这样呢?我们可以在下面xml中找到答案。

3、配置spring-mvc.xml
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:context="http://www.springframework.org/schema/context"
    xmlns:aop="http://www.springframework.org/schema/aop"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://www.springframework.org/schema/beans https://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/aop https://www.springframework.org/schema/aop/spring-aop.xsd">
    <!-- 开启基本注解 :识别 Controller,Service,Repository,Component,Autowired,Resource,Qulifer -->
	<context:component-scan base-package="com.mvc"></context:component-scan>
	 <!-- 开启处理器映射器注解:识别 @RequestMapping,对该注解标注的类和方法做映射。-->
  <bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping"></bean>
  <!-- 开启处理器适配器注解: 当有请求过来,dispatcherServlet找到该请求所映射到的处理器方法,该bean对象负责执行方法。封装参数 -->
  <bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter"></bean>
  <!-- 开启视图解析器:当处理器方法执行完成后,配置一个视图路径地址 -->
  <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
   <!-- 视图文件前缀名(路径) -->
  	<property name="prefix" value="/WEB-INF/view/"></property>
  	<!-- 视图文件后缀名 -->
  	<property name="suffix" value=".jsp"></property>
  </bean>   
</beans>

3.1、标签头是固定套路

3.2、开启了纳入容器、依赖注入这些基本的注解,同时指定了"com.mvc"包,这些包下的文件可省略路径名。

	<context:component-scan base-package="com.mvc"></context:component-scan>

3.3、这三条spring mvc固定的套路,了解这些类的作用,平时复制即可,太长记不住。
prefix前缀名 视图文件(此处为jsp文件)的从web文件根目录开始的路径。
suffix后缀名 视图文件的的后缀名,此demo中为jsp

  <bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping"></bean>
  <bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter"></bean>
  <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
  	<property name="prefix" value="/WEB-INF/view/"></property>
  	<property name="suffix" value=".jsp"></property>
  </bean>   
4、在web.xml中配置前端核心DispatcherServlet

spring-mvc.xml是配置好了,但仍没有加载。在这里我们通过把spring-mvc.xml的路径赋值给dispatcherServletcontextConfigLocation属性来执行加载。

  <servlet>
  	<!--核心servlet-->
  	<servlet-name>dispatcherServlet</servlet-name>
  	<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
  	<!--配置spring-mvc.xml的路径-->
  	<init-param>
  		<param-name>contextConfigLocation</param-name>
  		<param-value>classpath:spring-mvc.xml</param-value>
  	</init-param>
  	<load-on-startup>1</load-on-startup><!--设置启动顺序-->
  </servlet>
 
  <servlet-mapping>
  		<servlet-name>dispatcherServlet</servlet-name>
  		<url-pattern>/</url-pattern> <!--url使用通配符-->
  </servlet-mapping>
5、访问handler下的方法

启动tomcat
访问http://localhost:8080/项目名/user/login

网页显示了hello.jsp的内容
这些文字我预先写在了hello.jsp中
在这里插入图片描述
控制台输出
在这里插入图片描述
Getting Started里我们完成了一个demo,达成了通过url访问handler中方法的目的。
在理解这个demo的基础上,我们再来实现更多的功能。

Spring MVC功能详解

为了更好的演示接下来的功能,我们在demo中加入一个实体,一个service。
User 实体类

public class User {
	//用户id  用户名 性别true、false
	private Integer uid;
	private String uname;
	private boolean gender;
	//还有get set方法
}

service接口及其实现类

public interface IUserService {
		void login(Integer uid,String uname,boolean gender);
		void update(User user);
}
@Service  //纳入容器
public class UserServiceImpl implements IUserService {
	@Override
	public void login(Integer uid, String uname, boolean gender) {
		System.out.println("service的login输出:"+uid+" "+uname+" "+gender);
	}
	@Override
	public void update(User user) {
		System.out.println("serviced的update输出:"+user);
	}
}

添加service到之前的handler类

@Controller  //纳入容器
@RequestMapping("/user") //访问路径
public class UserHandler {
	@Autowired //依赖注入  ( UserHandler持有一个IUserService )
	private IUserService ser;
	
	@RequestMapping("login")
	public String login(Integer uid,String uname,boolean gender) {
		System.out.println("handler的login被调用了");
		ser.login(uid, uname, gender);
		return "hello";
	}
	@RequestMapping("update")
	public String update(User user) {
		System.out.println("handler的update被调用了");
		ser.update(user);
		return "hello";
	}
}
1、获取页面提交的的表单元素

接收页面表单元素,要什么参数加对应的形参,要求形参名与表单元素名相同,类型会自动转型。
形参也可以是对象,会根据实体对象的属性自动获取参数。

演示
这里就不做表单了,直接使用url拼接。
如图,我们使用get方式,向handler提交了uid=123&uname=Tom&gender=false
在这里插入图片描述
控制台输出

在这里插入图片描述
那么使用User对象作为形参的update()方法呢?
使用get方式提交
会根据实体对象的属性自动获取参数。

在这里插入图片描述
控制台输出
在这里插入图片描述
这里漏了写toString,没有展示user的属性值,懒得补了。

2、回传数据到页面

回传数据我们可以使用到Model对象(org.springframework.ui.Model
添加了Model形参,使用addAttribute方法加入数据。其余和上面的代码一样。

UserHandler.java

@Controller  //纳入容器
@RequestMapping("/user") //访问路径
public class UserHandler {
	@Autowired //依赖注入
	private IUserService ser;

	@RequestMapping("login")
	public String login(Integer uid,String uname,boolean gender,Model model) {
		//为model添加回传数据
		model.addAttribute("msg", "登录成功!");
		//其余和之前一样
		System.out.println("login被调用了");
		ser.login(uid, uname, gender);
		return "hello";
	}

hello.jsp
在jsp中使用EL调用回调数据

<body>
		user处理器的方法执行后,跳转到了hello.jsp页面
		${msg}
</body>

运行
打印了回传函数msg的值 “登录成功”
在这里插入图片描述
控制台输出和之前一样,这里就不写了。

除了使用Model对象回传参数,还可以使用ModelAndView
使用ModelAndView,方法的返回值需要是ModelAndView,要在方法体内设置视图文件。

@Controller  //纳入容器
@RequestMapping("/user") //访问路径
public class UserHandler {
	@RequestMapping("/update")
	//返回值类型设置为ModelAndView 
	public ModelAndView update() {
		//新建ModelAndView对象
		ModelAndView model=new ModelAndView();
		//设置回传参数
		model.addObject("msg", "更新成功");
		//设置视图文件
		model.setViewName("hello");
		return model;
	}
}

运行
跳转到了指定的,hello.jsp页面,显示了回传函数msg的值。
在这里插入图片描述
设置视图文件的2种方法

	//   1、创建时指定视
	ModelAndView model=new ModelAndView("hello");
	//   2、创建后指定
	ModelAndView model=new ModelAndView();
	model.setViewName("hello");
3、获取servlet核心对象

对于HttpServletRequest、HttpServletResponse,HttpSession,ServletContext对象,在处理器方法内部,需要用哪个对象,加哪个形参就好了。

这里拿HttpServletResponse举例

@Controller  //纳入容器
@RequestMapping("/user") //访问路径
public class UserHandler {
	@RequestMapping("select")
	public void select(int uid,HttpServletResponse resp) { //加了serponse的形参
		//设置编码格式
		resp.setContentType("text/html;charset=utf-8");
		try {
			PrintWriter pw=resp.getWriter();
			pw.println("查询了"+uid+"号用户的资料!");
			pw.flush();
			pw.close();
		} catch (IOException e) {
			e.printStackTrace();
		}
	}
}

运行
在这里插入图片描述
其他的servlet核心对象和这差不多,就不一一演示了。

4、handler之间的重定向

在handler中,return的值加上forward就可以重定向到其他handler。

	@RequestMapping("test1")
	public String test1() {
		System.out.println("test1运行了");
		return "forward:select";
	}
	
	@RequestMapping("test2")
	public String test2() {
		System.out.println("test2运行了");
		return "hello";
	}

运行
在这里插入图片描述
控制台输出
在这里插入图片描述

转发使用 redirect:
转发到web文件夹根目录的index.html

	@RequestMapping("test1")
	public String test1() {
		System.out.println("test1运行了");
		return "redirect:/index.html";
	}

=

5、乱码问题

在web.xml中配置过滤器,将编码格式设置为utf-8
web.xml

 <filter>
  	<filter-name>characterEncoding</filter-name>
  	<filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
  	<init-param>
  		<param-name>encoding</param-name>
  		<param-value>UTF-8</param-value>
  	</init-param>
  	<init-param>
  		<param-name>forceResponseEncoding</param-name>
  		<param-value>true</param-value>
  	</init-param>
  </filter>
  <filter-mapping>
  	<filter-name>characterEncoding</filter-name>
  	<url-pattern>/*</url-pattern>
  </filter-mapping>
6、设置请求方法get | post

@RequestMapping(params="处理器访问名",method=RequestMethod.POST|GET)
在处理器方法中如何设置客户端请求的方式,要么get要么post,或者都可以。

@RequestMapping(params="login",method=RequestMethod.POST)
	public void login(String uname,String pwd) {
		service.login(uname,pwd);
	}

7、默认值

如果形参是int,double,boolean,long等这些非String类型的,有可能出现转型异常,可以设置默认值。

@RequestParam(defaultValue="10")
value:参数名字,即入参的请求参数名字,若相同可不写。
required:是否必须,如果为true而页面没有提交将报404错误码,默认是true。
defaultValue:默认值

	public void login(@RequestParam(defaultValue="admin",required =false)String uname,@RequestParam(defaultValue="123456",required =false)String pwd) {
		ser.login(uname, pwd);
	}
*Spring MVC请求处理流程

在这里插入图片描述

*Spring MVC框架机构

在这里插入图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: Spring MVCXML 配置文件(通常命名为 springmvc.xml)用于配置 Spring MVC 应用程序的各种组件,如控制器、视图解析器、处理器映射器等。 这个配置文件通常包含以下内容: 1. <context:component-scan>标签:用于启用组件扫描,扫描应用程序中的控制器、服务层组件等。 2. <mvc:annotation-driven>标签:启用注解驱动的 Spring MVC,可以使用注解来配置控制器等组件。 3. <bean>标签:用于配置视图解析器、处理器映射器等组件。 4. <mvc:resources>标签:配置静态资源的处理。 5. <mvc:view-controller>标签:配置不需要控制器就能处理的请求。 这只是 Spring MVC XML 配置文件的一个简单概述,具体配置方式可以参考 Spring 官方文档。 ### 回答2: SpringMVC基于Spring框架,是一种基于MVC(Model-View-Controller)设计模式的Web框架。在SpringMVC应用中,springmvc.xml是重要的配置文件之一。 这个文件是用于指定Spring MVC应用程序的配置详细信息的。 1. DispatcherServlet配置 DispatcherServlet是SpringMVC框架的核心,所有的请求都会由它来处理,springmvc.xml中可以配置DispatcherServlet,指定请求映射和对应的控制器,异常处理等。 2. 视图解析器配置 决定了一个请求如何响应一个具体的视图。 在Spring MVC中,视图解析器负责将由Controller返回的逻辑视图名匹配到具体的视图页面上。 3. Handler映射器配置 Handler映射器用于映射请求URL到Handler类。 4. 拦截器配置 SpringMVC允许我们通过配置拦截器来实现某些功能的统一处理。比如身份验证、授权检查等。 5. 异常解析器配置 SpringMVC提供了一套完善的异常处理机制,我们可以通过定义一个ExceptionResolver来处理异常。 6. 标签库配置 标签库定义了一系列标签,这些标签让JSP页面更加易于编写和维护。 7. 文件上传配置 Spring MVC框架提供了一套完整的文件上传解决方案,可以通过配置multipartResolver,处理客户端发送的multipart/form-date请求。 8. 消息转换器配置 Spring MVC框架提供了一套消息转换器的机制,可以将客户端传递的数据转化为任意格式的数据,满足不同的需求。 总的来说,springmvc.xmlSpringMVC应用程序中一个很重要且必须的配置文件,并且提供了许多实用的配置信息,对于理解SpringMVC框架,搭建SpringMVC应用程序,优化应用程序都非常重要。 ### 回答3: Spring MVC 是一个基于 Spring 框架的 Web 框架,其最大特点是模块化和松散耦合。在使用 Spring MVC 进行 Web 应用程序开发时,需要按照一定规范对其进行配置。其中 springmvc.xmlSpring MVC配置文件,它负责处理 Spring MVC 相关的配置信息。 首先,springmvc.xml 配置文件要包含命名空间的申明。这个命名空间通常是 xmlns:context 和 xmlns:mvc。其中,xmlns:context 命名空间提供了一个环境,Spring 能够自动扫描组件,使其能够被自动通过依赖注入来形成一个完整的 Web 应用程序。而 xmlns:mvc 命名空间提供了 Spring MVC 应用程序必需的诸如 HandlerMapping 之类的类的支持。 接下来,在 springmvc.xml 配置文件中需要配置 Spring MVC 的核心组件 HandlerMapping,这个组件负责映射请求和Controller的方法。 HandlerMapping 中最常用的是 BeanNameUrlHandlerMapping 和 SimpleUrlHandlerMapping。其中 BeanNameUrlHandlerMapping 将会根据 bean 的名称来匹配请求访问路径,而 SimpleUrlHandlerMapping 则通过定义请求请求映射器的键值对来进行匹配。 在 HandlerMapping 的基础上,还需要配置 HandlerAdapter,该组件负责执行 Controller 方法的逻辑。Spring MVC 默认提供的 HandlerAdapter 是 SimpleControllerHandlerAdapter,当然也可以扩展此类以适应自己的需要。 在 Spring MVC 中,视图解析器负责根据请求的结果选择展示的视图。通常情况下,视图解析器会将请求转发到 jsp 文件上,然后在 jsp 文件中进行展示。而 Spring MVC 中最常用的视图解析器是 InternalResourceViewResolver。可以在配置文件中配置该视图解析器,并为其指定 jsp 文件的位置,以及是否需要向前缀和后缀中添加特定的字符串。 最后,在 Spring MVC 中,还需要配置一些参数,如路径处理设置等等。其中,最为常见的是设置 controller 扫描的包路径,通过设置 mvc:annotation-driven 或 component-scan 来实现。 总之,springmvc.xml 配置文件中包含了 Spring MVC 应用程序的核心设置,这个文件需要仔细配置,才能让 Spring MVC 应用程序正常运行。需要根据具体的需求进行配置,从而实现一个完整的 Spring MVC 应用程序。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值