springmvc使用注解进行开发

DispatcherServlet.properties

在这里插入图片描述
在这里插入图片描述

前端控制器从DispatcherServlet.properties中加载处理映射器、适配器、视图解析器等组件,如果不在springmvc.xml中配置,使用默认加载的。

springmvc注解开发

实际企业开发中使用springmvc注解进行开发

jar包的依赖

<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 https://maven.apache.org/xsd/maven-4.0.0.xsd">
	<modelVersion>4.0.0</modelVersion>
	<groupId>cn.company</groupId>
	<artifactId>springdemo2</artifactId>
	<version>0.0.1-SNAPSHOT</version>
	<packaging>war</packaging>
	<dependencies>
		<!--junit单元测试 -->
		<dependency>
			<groupId>junit</groupId>
			<artifactId>junit</artifactId>
			<version>4.12</version>
			<scope>test</scope>
		</dependency>
		<!-- springmvc -->
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-webmvc</artifactId>
			<version>5.2.4.RELEASE</version>
		</dependency>
		<!-- servlet的jar包依赖,
		<scope>provided</scope>
		表示编译时有效,不会打包发布到Tomcat中 
		-->
		<dependency>
			<groupId>javax.servlet</groupId>
			<artifactId>javax.servlet-api</artifactId>
			<version>4.0.1</version>
			<scope>provided</scope>
		</dependency>
		<!-- jsp的jar包依赖 -->
		<dependency>
			<groupId>javax.servlet.jsp</groupId>
			<artifactId>javax.servlet.jsp-api</artifactId>
			<version>2.3.3</version>
			<scope>provided</scope>
		</dependency>
		<!-- jstl表达式 -->
		<!-- https://mvnrepository.com/artifact/jstl/jstl -->
		<dependency>
			<groupId>jstl</groupId>
			<artifactId>jstl</artifactId>
			<version>1.2</version>
		</dependency>
	</dependencies>
	<!-- 添加tomcat插件 -->
	<build>
		<plugins>
			<plugin>
				<groupId>org.apache.tomcat.maven</groupId>
				<artifactId>tomcat7-maven-plugin</artifactId>
				<version>2.2</version>
				<configuration>
					<port>8080</port>
					<hostName>localhost</hostName>
					<uriEncoding>UTF-8</uriEncoding>
				</configuration>
			</plugin>
		</plugins>
	</build>
</project>

配置DispatcherServlet

在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_2_5.xsd"
	version="2.5">
	<display-name>springdemo2</display-name>
	<!--springmvc前端控制器 -->
	<servlet>
		<servlet-name>springmvc</servlet-name>
		<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
		<!--contextConfigLocation:配置springmvc加载的配置文件(配置映射器处理器,适配器,视图解析器,控制器 等等。
		如果不配置contextConfigLocation,默认加载的是/WEB-INF/servlet名称-servlet.xml 
			(springmvc-servlet.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>
	<!-- 第一种:*.do,访问以.do结尾由DispatcherServlet进行解析;
	 第二种:/,所有访问的地址都由于DispatcherServlet进行解析,对于静态文件的解析需要配置, 
		不让 DispatcherServlet进行解析,此种方式可以实现RestFul风格的Url -->
	<servlet-mapping>
		<servlet-name>springmvc</servlet-name>
		<url-pattern>/</url-pattern>
	</servlet-mapping>
</web-app>

配置注解映射器和适配器

在spring3.1之前使用org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerMapping注解映射器。
在spring3.1之后使用org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping注解映射器。
在spring3.1之前使用org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter注解适配器。
在spring3.1之后使用org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter注解适配器。

在这里插入图片描述

<!-- 使用 mvc:annotation-driven代替上边注解映射器和注解适配器配置
	mvc:annotation-driven默认加载很多的参数绑定方法,
	比如json转换解析器就默认加载了,如果使用mvc:annotation-driven不用配置上边的RequestMappingHandlerMapping和RequestMappingHandlerAdapter
	实际开发时使用mvc:annotation-driven
	 -->
	<!-- <mvc:annotation-driven></mvc:annotation-driven> -->

Handler处理器

  1. 在springmvc的配置文件spring-mvc.xml中配置组件扫描
<!-- 组件扫描,指定 Controller所在的包-->
	<context:component-scan base-package="cn.itcast.ssm.controller"/>
  1. 开发Handler也就是Controller
package cn.itcast.ssm.controller;

import java.util.ArrayList;
import java.util.List;

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

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.servlet.ModelAndView;

import cn.itcast.ssm.po.Items;
/**
 * 
 * @author 86182
 *
 */
@Controller
public class ItemController{
	/*
	 * @Controller指定这是一个Handler(处理器)
	 *@RequestMapping: 标记请求 URL 
	 */
	@RequestMapping("/hello")
	public ModelAndView handleRequest(HttpServletRequest request, HttpServletResponse response) throws Exception {
		// 调用service查找 数据库,查询商品列表,这里使用静态数据模拟
		List<Items> items = new ArrayList<Items>();
		// 向list中填充静态数据
		Items items_1 = new Items();
		items_1.setName("联想笔记本");
		items_1.setPrice(6000f);
		items_1.setDetail("ThinkPad T430联想笔记本电脑!");

		Items items_2 = new Items();
		items_2.setName("苹果手机");
		items_2.setPrice(5000f);
		items_2.setDetail("iphone6苹果手机!");
		items.add(items_1);
		items.add(items_2);
		/*
		 * ModelAndView有两个常用的构造器
		 * ModelAndView(String viewName)
		 * ModelAndView(String viewName,Map data)
		 * 注:
		 * 		viewName:视图名
		 * 		data: 数据
		 */
		//返回ModelAndView
		ModelAndView modelAndView=new ModelAndView();
		//相当于request的setAttribute,在jsp页面中通过items获取数据
		modelAndView.addObject("items",items);
		//指定视图
		modelAndView.setViewName("items/itemsList");
		return modelAndView;
	}

}

ViewResolver(视图解析器)

在springmvc的配置文件中添加如下代码:

<!--视图解析器 ,解析jsp,默认使用jstl标签,classpath下得有jstl的jar包-->
	<bean
		class="org.springframework.web.servlet.view.InternalResourceViewResolver">
		<!--jsp路径的前缀  -->
		<property name="prefix" value="/WEB-INF/jsp/" />
		<!--jsp路径的后缀  -->
		<property name="suffix" value=".jsp" />
	</bean>

itemsList.jsp页面

<%@ page contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix="fmt"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>查询商品列表</title>
</head>
<body>
	<form action="${pageContext.request.contextPath }/item/queryItem.do"
		method="post">
		<table width="100%" border="1">
			<tr>
				<td><input type="submit" value="查询"></td>
			</tr>
		</table>
		商品列表:
		<table width="100%" border="1">
			<tr>
				<td>商品名称</td>
				<td>商品价格</td>
				<td>生产日期</td>
				<td>商品描述</td>
				<td>操作</td>
			</tr>
			<c:forEach items="${items }" var="items">
				<tr>
					<td>${items.name }</td>
					<td>${items.price }</td>
					<td>
						<!-- fmt:formatDate:jstl表达式格式化日期 --> <fmt:formatDate
							value="${items.createtime }" pattern="yyyy-MM-dd HH:mm:ss" />
					</td>
					<td>${items.detail }</td>
					<td><a
						href="${pageContext.request.contextPath }/item/editItem.do?id=${items.id}">修改</a>
					</td>
				</tr>
			</c:forEach>
		</table>
	</form>
</body>
</html>

部署运行

点击项目->右键鼠标,选择Run as ,选择Maven build,弹出如下窗口,在Goals输入框中输入tomcat7:run,然后点击Apply,再点击Run

在这里插入图片描述

在这里插入图片描述

访问页面出现404,是由于在配置springmvc前端控制器访问时,DispatcherServlet拦截了所有的请求
静态资源无法直接访问,所以需要在springmvc的配置文件spring-mvc.xml中配置静态资源的访问

在这里插入图片描述

静态资源的访问

<!--mapping:映射的位置,求地址是 /static/html 这样的格式,
	对应的资源就去/static/html/ 这个目录下查找,
	location:在映射路径中**表示匹配多层路径,*表示匹配多层路径
	下面的配置,表示映射所有的请求路径时,对应的静态资源都放在根目录下面
	 -->
	<mvc:resources location="/" mapping="/**"/> 

重新访问,启动项目,效果如下

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值