Spring-mvc 简介 构建 转发重定向 视图解释器

spring mvc 简介

Spring Web MVC是一种基于Java的实现了Web MVC设计模式的请求驱动类型的轻量级Web框架,
即使用了MVC架构模式的思想,将web层进行职责解耦,基于请求驱动指的就是使用请求-响应模型,框架的目的就是帮助我们简化开发,
Spring Web MVC也是要简化我们日常Web开发的。

spring mvc 的构建

  1. 新建一个web maven工程

  2. 在pom.xml加如下配置

    <dependencies>
    	<!-- 引入web工程所需的依赖 -->
    	<dependency>
    		<groupId>javax.servlet</groupId>
    		<artifactId>javax.servlet-api</artifactId>
    		<version>3.1.0</version>
    		<scope>provided</scope>
    	</dependency>
    	<dependency>
    		<groupId>javax.servlet.jsp</groupId>
    		<artifactId>jsp-api</artifactId>
    		<version>2.2</version>
    		<scope>provided</scope>
    	</dependency>
    	<!-- 添加JSTL标签库 -->
    	<dependency>
    		<groupId>javax.servlet</groupId>
    		<artifactId>jstl</artifactId>
    		<version>1.2</version>
    	</dependency>
    	<dependency>
    		<groupId>taglibs</groupId>
    		<artifactId>standard</artifactId>
    		<version>1.1.2</version>
    	</dependency>
    	<!-- 整合SpringMVC会自动引入其他所需的spring核心依赖 -->
    	<dependency>
    		<groupId>org.springframework</groupId>
    		<artifactId>spring-webmvc</artifactId>
    		<version>4.3.7.RELEASE</version>
    	</dependency>
    	
    </dependencies>
    <build>
    	<plugins>
    		<plugin>
    			<artifactId>maven-compiler-plugin</artifactId>
    			<configuration>
    				<source>1.8</source>
    				<target>1.8</target>
    				<encoding>UTF-8</encoding>
    			</configuration>
    		</plugin>
    	</plugins>
    </build>
    
  3. 把web.xml改为如下配置

    <?xml version="1.0" encoding="UTF-8"?>
    <web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    	xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee
    		 http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
    	version="3.1">
    
    	<!--字符集过滤器 -->
    	<filter>
    		<filter-name>Encoding</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>
    	</filter>
    	<filter-mapping>
    		<filter-name>Encoding</filter-name>
    		<url-pattern>/*</url-pattern>
    	</filter-mapping>
    
    
    	<!-- spring核心控制器 -->
    	<servlet>
    		<servlet-name>springmvc</servlet-name>
    		<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    		<!-- contextConfigLocation配置springmvc加载的配置文件(配置处理器映射器、适配器等等) 如果不配置contextConfigLocation,默认加载的是/WEB-INF/servlet名称-serlvet.xml(springmvc-servlet.xml) -->
    		<init-param>
    			<param-name>contextConfigLocation</param-name>
    			<param-value>classpath:springmvc.xml</param-value>
    		</init-param>
    	</servlet>
    
    	<servlet-mapping>
    		<servlet-name>springmvc</servlet-name>
    		<!-- 第一种:*.do/action,访问以.action结尾 由DispatcherServlet进行解析 第二种:/,所以访问的地址都由DispatcherServlet进行解析,对于静态文件的解析需要配置不让DispatcherServlet进行解析 
    			使用此种方式可以实现 RESTful风格的url  -->
    		<url-pattern>*.do</url-pattern>
    	</servlet-mapping>
    </web-app>
    
  4. 加入springmvc配置文件

    <?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:p="http://www.springframework.org/schema/p" 
    	xmlns:context="http://www.springframework.org/schema/context" 
    	xmlns:util="http://www.springframework.org/schema/util" 
    	xsi:schemaLocation="http://www.springframework.org/schema/beans 
    		http://www.springframework.org/schema/beans/spring-beans-4.1.xsd
    	http://www.springframework.org/schema/context 
    	http://www.springframework.org/schema/context/spring-context-4.3.xsd
    	http://www.springframework.org/schema/util 
    	http://www.springframework.org/schema/util/spring-util-4.3.xsd">
    
    	<!-- 处理器映射器 将bean的name作为url进行查找 ,需要在配置Handler时指定beanname(就是url) 所有的映射器都实现 HandlerMapping接口。 -->
    	<bean class="org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping" />
    </beans>
    
  5. 新建一个Contrller类并且实现Controller接口,用于接受请求

  6. 加入spring 容器里面

  7. 写测试代码

spring mvc 转发重定向

  • 转发:forward:xxx
  • 重定向:redirect:xxx

视图解释器

配置以后返回内容可以精简,在spring mvc 配置文件里面加

<!-- 视图 解释器 -->
<bean id="viewResolver"
	class="org.springframework.web.servlet.view.InternalResourceViewResolver">
	<property name="viewClass">
		<value>org.springframework.web.servlet.view.JstlView</value>
	</property>
		<!--前缀 -->
	<property name="prefix">
		<value>/</value>
	</property>
		<!--后缀 -->
	<property name="suffix">
		<value>.jsp</value>
	</property>
</bean>

新建maven项目,添加依赖和构建:

<project xmlns="http://maven.apache.org/POM/4.0.0"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
	<modelVersion>4.0.0</modelVersion>
	<groupId>com.liuxi</groupId>
	<artifactId>day-68-spring-mvc</artifactId>
	<version>0.0.1-SNAPSHOT</version>

	<dependencies>
		<!-- 引入web工程所需的依赖 -->
		<dependency>
			<groupId>javax.servlet</groupId>
			<artifactId>javax.servlet-api</artifactId>
			<version>3.1.0</version>
			<scope>provided</scope>
		</dependency>
		<dependency>
			<groupId>javax.servlet.jsp</groupId>
			<artifactId>jsp-api</artifactId>
			<version>2.2</version>
			<scope>provided</scope>
		</dependency>
		<!-- 添加JSTL标签库 -->
		<dependency>
			<groupId>javax.servlet</groupId>
			<artifactId>jstl</artifactId>
			<version>1.2</version>
		</dependency>
		<dependency>
		<!-- 标签库 -->
			<groupId>taglibs</groupId>
			<artifactId>standard</artifactId>
			<version>1.1.2</version>
		</dependency>
		<!-- 整合SpringMVC会自动引入其他所需的spring核心依赖 -->
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-webmvc</artifactId> <!-- spring-webmvc 整合包 -->
			<version>4.3.7.RELEASE</version>
		</dependency>

	</dependencies>
	<build>
		<plugins>
			<plugin>
				<artifactId>maven-compiler-plugin</artifactId>
				<configuration>
					<source>1.8</source>
					<target>1.8</target>
					<encoding>UTF-8</encoding>
				</configuration>
			</plugin>
		</plugins>
	</build>
</project>

web.xml配置:

<!--字符集过滤器 -->
	<filter>
		<filter-name>Encoding</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>
	</filter>
	<filter-mapping>
		<filter-name>Encoding</filter-name>
		<url-pattern>/*</url-pattern>
	</filter-mapping>


	<!-- spring核心控制器 -->
	<servlet>
		<servlet-name>springmvc</servlet-name>
		<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
		<!-- contextConfigLocation配置springmvc加载的配置文件(配置处理器映射器、适配器等等) 如果不配置contextConfigLocation,默认加载的是/WEB-INF/servlet名称-serlvet.xml(springmvc-servlet.xml) -->
		<init-param>
			<param-name>contextConfigLocation</param-name> <!-- spring的配置文件 -->
			<param-value>classpath:springmvc-annotation.xml</param-value>
		</init-param>
	</servlet>

	<servlet-mapping>
		<servlet-name>springmvc</servlet-name>
		<!-- 第一种:*.do/action,访问以.action结尾 由DispatcherServlet进行解析 第二种:/,所以访问的地址都由DispatcherServlet进行解析,对于静态文件的解析需要配置不让DispatcherServlet进行解析 
			使用此种方式可以实现 RESTful风格的url -->
		<url-pattern>*.do</url-pattern>
	</servlet-mapping>

新建bean xml config文件:

	<!-- 处理器映射器 将bean的name作为url进行查找 ,需要在配置Handler时指定beanname(就是url) 所有的映射器都实现 
		HandlerMapping接口。 -->
	<bean
		class="org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping" />


	<!-- <bean id="/aaa" class="com.liuxi.controller.FirstController"></bean> -->

第一个控制器: 通过直接访问 项目名/aaa.do

package com.liuxi.controller;

import javax.servlet.http.HttpServletRequest;

import org.springframework.web.servlet.HandlerExecutionChain;
import org.springframework.web.servlet.HandlerMapping;

public class FirstController implements HandlerMapping {

	@Override
	public HandlerExecutionChain getHandler(HttpServletRequest reqt) throws Exception {
		System.out.println("我是第一个控制器1");
		// TODO Auto-generated method stub
		return null;
	}

}

第二个控制器,bean添加:

	<bean id="/aaa.do" class="com.liuxi.controller.SecondController"></bean>

通过aaa.do访问到

package com.liuxi.controller;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.mvc.Controller;

public class SecondController implements Controller {

	@Override
	public ModelAndView handleRequest(HttpServletRequest request, HttpServletResponse response) throws Exception {
		// TODO Auto-generated method stub
		System.out.println("我是第二个控制器");

		ModelAndView andView = new ModelAndView("second");
		andView.addObject("aaa", "wo是aaa222");
		request.setAttribute("bbb", "我是bbb");

		return andView;
	}

}

第三个控制器,bean添加:

	<bean id="/ccc.do" class="com.liuxi.controller.ThridController"></bean>

重定向到aaa.do:

package com.liuxi.controller;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.mvc.Controller;

public class ThridController implements Controller {

	@Override
	public ModelAndView handleRequest(HttpServletRequest request, HttpServletResponse response) throws Exception {
		System.out.println("我是thridController");

		ModelAndView andView = new ModelAndView("redirect:/aaa.do");
		return andView;
	}

}

ModelAndView andView = new ModelAndView(“redirect:/aaa.do”); 双引号内的 写成/WEB-INF/aaa.jsp是直接转发到指定页面。
也可以直接通过req.xxx.forward()

Bean添加视图解释器:

	<!-- 视图 解释器 -->
	<bean id="viewResolver"
		class="org.springframework.web.servlet.view.InternalResourceViewResolver">
		<property name="viewClass">
			<value>org.springframework.web.servlet.view.JstlView</value>
		</property>
		<!--前缀 -->
		<property name="prefix">
			<value>/WEB-INF/</value>
		</property>
		<!--后缀 -->
		<property name="suffix">
			<value>.jsp</value>
		</property>
	</bean>

ModelAndView andView = new ModelAndView(“redirect:/aaa.jsp”); 中的可以简略写为字符串 aaa

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值