SpringMVC入门程序-以注解方式

avatar 2017年08月16日12:30:42 1 2377 views
博主分享免费Java教学视频,B站账号:Java刘哥 ,长期提供技术问题解决、项目定制:本站商品点此
本文将以注解的方式完成一个SpringMVC的入门程序,为什么不用 xml 方式,因为 xml 方式比较繁琐,没有 注解 方式来得简单,所以推荐注解方式。

一、开发准备


1、准备 jar 包
  • 本程序因为没有 涉及到数据库,所有数据都是存在对象中。所以不需要 mysql-jdbc 驱动包
  • 因为我们的程序需要写jsp代码,这里我们需要 jstl.jar和一个 standard.jar
  • 日志包也是需要的
  • 需要导入spring的jar包,单纯的入门springmvc的话不需要导入所有的spring jar包,但是核心包和spring-web/spring-webmvc是一定要导入的,考虑到后面还会和mybatis整合,所以也导入了持久操作的包和aop的包,总共如下:






二、文件结构




resource   自己手动创的Source Folder,用于存放配置文件


----spring 存放spring的配置文件

src 源代码

----com.liuyanzhao.ssm 存放ssm的源代码

web web目录

----WEB-INF web文件

--------jsp 存放jsp文件

------------items 存放items相关的jsp文件

--------lib 存放jar包

--------web.xml web配置文件

最终,整个程序的必备文件如下




三、代码实现


1、springmvc.xml
  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <beans xmlns="http://www.springframework.org/schema/beans"
  3.        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  4.        xmlns:context="http://www.springframework.org/schema/context"
  5.        xmlns:aop="http://www.springframework.org/schema/aop"
  6.        xmlns:tx="http://www.springframework.org/schema/tx" xmlns:mvc="http://www.springframework.org/schema/cache"
  7.        xsi:schemaLocation="http://www.springframework.org/schema/beans
  8.     http://www.springframework.org/schema/beans/spring-beans.xsd
  9.     http://www.springframework.org/schema/context
  10.     http://www.springframework.org/schema/context/spring-context.xsd
  11.     http://www.springframework.org/schema/aop
  12.     http://www.springframework.org/schema/aop/spring-aop.xsd
  13.     http://www.springframework.org/schema/tx
  14.     http://www.springframework.org/schema/tx/spring-tx.xsd http://www.springframework.org/schema/cache http://www.springframework.org/schema/cache/spring-cache.xsd">
  15.     <!--对于注解的Handler可以单个设置
  16.         实际开发中建议使用组件扫描
  17.     -->
  18.     <!-- <bean class="com.liuyanzhao.ssm.controller.ItemsController"/>-->
  19.     <!--可以扫描controller,service,...
  20.         这里让扫描controller,指定controller的包
  21.     -->
  22.     <context:component-scan base-package="com.liuyanzhao.ssm.controller"></context:component-scan>
  23.     <!-- 配置注解映射器
  24.         将bean的name作为url进行查找,需要进行配置Handler时指定beanname(就是url)
  25.     -->
  26.     <bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping"/>
  27.     <!--配置注解适配器
  28.         所有的处理器适配器都实现 HandlerAdapter接口
  29.     -->
  30.    <bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter"/>
  31.     <!--使用mvc:annotation-driven可以代替代替上面的注解映射器和注解适配器
  32.         mvc:annotation-driven默认加载了很多参数的绑定方法,比如json的转换解析器就默认加载了
  33.         实际开发使用 mvc:annotation-driven
  34.     -->
  35.     <!--<mvc:annotation-driven />-->
  36.     <!--视图解析器
  37.         解析jsp解析,默认使用jstl标签,classpath下得有jstl的包
  38.     -->
  39.     <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
  40.         <!--配置前缀和后缀,也可以不指定-->
  41.         <property name="prefix" value="/WEB-INF/jsp/"/>
  42.         <property name="suffix" value=".jsp"/>
  43.     </bean>
  44. </beans>

注意:

(1) 组件扫描

在xml配置了这个标签后, Use-default-filter此时为true,spring可以自动去扫描base-package下面或者子包下面的Java文件,如果扫描到有@Component @Controller@Service等这些注解的类,则把这些类注册为bean


(2) 处理器适配器和映射器


在spring3.1之前使用:
注解映射器:org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerMapping

注解适配器:org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter

在spring3.1之后使用:
注解映射器:org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping

注解适配器:org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter



(3) mvc:annotation-driven 的使用

如何我们添加一句 <mvc:annotation-driven /> 则,可以替代 注解映射器和注解适配器的那两行代码,同时,这个标签默认加载更多方法,在开发中比较实用。

注意:我在测试的时候出了500错误,百度了一下,一个博主说jdk1.8太高,用不了。应该使用jdk1.7,醉了,暂时不管啦。



(4) 视图解析器

视图解析器的前后缀添加,方便我们控制器中路径可以少写一点,方便而且减少错误。

当然,也不是必须要添加。





2、ItemsController.java
  1. package com.liuyanzhao.ssm.controller;
  2. import com.liuyanzhao.ssm.po.Items;
  3. import org.springframework.stereotype.Controller;
  4. import org.springframework.web.bind.annotation.RequestMapping;
  5. import org.springframework.web.servlet.ModelAndView;
  6. import java.util.ArrayList;
  7. import java.util.List;
  8. /**
  9.  * 注解开发Handler
  10.  * Created by 言曌 on 2017/8/15.
  11.  */
  12. //使用Controller注解表示它是一个控制器
  13. @Controller
  14. public class ItemsController {
  15.     //商品查询列表
  16.     //@RequestMapping实现对queryItems方法和url进行映射,一个方法对应一个url
  17.     //一般建议将url和方法名一致,也可以不同,访问时要加.action后缀
  18.     @RequestMapping("/queryItems")
  19.     public ModelAndView queryItems() {
  20.         //调用service查找数据库,查询商品列表,这里使用静态数据模拟
  21.         List<Items> itemsList = new ArrayList<Items>();
  22.         //向list中填充数据
  23.         Items items_1 = new Items();
  24.         items_1.setName("华硕笔记本");
  25.         items_1.setPrice(5000f);
  26.         items_1.setDetail("华硕坠机堡垒,I5-4200H");
  27.         Items items_2 = new Items();
  28.         items_2.setName("战国策");
  29.         items_2.setPrice(19.8f);
  30.         items_2.setDetail("刘向著,江西教育出版社出品");
  31.         itemsList.add(items_1);
  32.         itemsList.add(items_2);
  33.         //返回ModelAndView
  34.         ModelAndView modelAndView = new ModelAndView();
  35.         //相当于request里的setAttribute,在jsp页面中通过itemsList取数据
  36.         modelAndView.addObject("itemsList",itemsList);
  37.         //指定视图
  38.         //modelAndView.setViewName("/WEB-INF/jsp/items/itemsList.jsp");
  39.         //上边的路径,如果在视图解析器中配置了jsp路径的前缀和后缀,修改为
  40.         modelAndView.setViewName("items/itemsList");
  41.         return modelAndView;
  42.     }
  43.     //其他方法
  44. }

注意:

(1) 类上加 @Controller

(2)方法上加  @RequestMapping("/queryItems") ,其中 /queryItems 是这个方法的路径,因为我们在 web.xml 里设置了 <url-pattern>*.action</url-pattern> ,所以我们还要在后面加上 .action 后缀。

该方法的完整路径应该是:http://localhost:8080/springmvc/queryItems.action

对了,那个 queryItems 的名称是自定义的,一般以方法名比较好管理

(3) 这里的ModelAndView 方法,在 IDEA 下我们可以通过 Ctrl+ Shift +I 快捷键查看它的定义

(4) 前面介绍了视图解析器里添加了前后缀,所以我们这里路径可以少写一点。



3、Items.java    商品的持久类
  1. package com.liuyanzhao.ssm.po;
  2. import java.util.Date;
  3. /**
  4.  * 商品的持久类
  5.  */
  6. public class Items {
  7.     private int id;
  8.     private String name;
  9.     private double price;
  10.     private String detail;
  11.     private String pic;
  12.     public int getId() {
  13.         return id;
  14.     }
  15.     public void setId(int id) {
  16.         this.id = id;
  17.     }
  18.     public String getName() {
  19.         return name;
  20.     }
  21.     public void setName(String name) {
  22.         this.name = name;
  23.     }
  24.     public double getPrice() {
  25.         return price;
  26.     }
  27.     public void setPrice(double price) {
  28.         this.price = price;
  29.     }
  30.     public String getDetail() {
  31.         return detail;
  32.     }
  33.     public void setDetail(String detail) {
  34.         this.detail = detail;
  35.     }
  36.     public String getPic() {
  37.         return pic;
  38.     }
  39.     public void setPic(String pic) {
  40.         this.pic = pic;
  41.     }
  42. }



4、itemsList.jsp  视图文件
  1. <%@ page language="java" contentType="text/html; charset=UTF-8"
  2.          pageEncoding="UTF-8"%>
  3. <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
  4. <%@ taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix="fmt"%>
  5. <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
  6. <html>
  7. <head>
  8.     <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
  9.     <title>查询商品列表</title>
  10. </head>
  11. <body>
  12.     商品列表:
  13.     <table width="100%" border=1>
  14.         <tr>
  15.             <td>商品名称</td>
  16.             <td>商品价格</td>
  17.             <td>商品描述</td>
  18.         </tr>
  19.         <c:forEach items="${itemsList }" var="item">
  20.             <tr>
  21.                 <td>${item.name }</td>
  22.                 <td>${item.price }</td>
  23.                 <td>${item.detail }</td>
  24.         </c:forEach>
  25.     </table>
  26. </body>
  27. </html>

注意:

(1) 我们需要导入 jstl 包才能使用 <c:forEach> 标签



5、web.xml
  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
  3.          xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  4.          xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
  5.          version="3.1">
  6.     <!--springmvc前端控制器-->
  7.     <servlet>
  8.         <servlet-name>springmvc</servlet-name>
  9.         <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
  10.         <!--contextConfigLocation配置springmvc加载的配置文件(配置处理器映射器,适配器等等-->
  11.         <init-param>
  12.             <param-name>contextConfigLocation</param-name>
  13.             <param-value>classpath:spring/springmvc.xml</param-value>
  14.         </init-param>
  15.     </servlet>
  16.     <servlet-mapping>
  17.         <servlet-name>springmvc</servlet-name>
  18.         <url-pattern>*.action</url-pattern>
  19.     </servlet-mapping>
  20. </web-app>



最后,启动 Tomcat,在浏览器输入 http://localhost:8080/springmvc/queryItems.action

即可看到下图





至此,我们SpringMVC入门程序完成



本文链接:https://liuyanzhao.com/5918.html
  • 微信
  • 交流学习,资料分享
  • weinxin
  • 个人淘宝
  • 店铺名:言曌博客咨询部

  • (部分商品未及时上架淘宝)
avatar

发表评论

avatar 登录者:匿名
匿名评论,评论回复后会有邮件通知

  

已通过评论:0   待审核评论数:0