SSM学习(三)--集成spring mvc
spirng mvc是一个mvc框架,与struts2类似,都是基于Servlet封装而成的框架,所以要了解spring mvc或者struts2比需先了解Servlet,本篇我们先把spring mvc集成进来,做一个简单的demo。
1.在com.m_gecko.controller包下新建一个java类,命名为GeckoController。
既然是Servlet,我们首先关心的一个问题是,如何传参,即如何取到从浏览器端发送过来的参数。先看如下代码:
package com.m_gecko.controller; import javax.servlet.http.HttpServletRequest; import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.servlet.ModelAndView; @Controller
public class GeckoController {
@RequestMapping("/getReq")
public ModelAndView getReq(HttpServletRequest req){
String gecko=req.getParameter("gecko");
System.out.println(gecko);
return null;
} }
运行之后在浏览器端输入:http://192.168.1.185:8080/m_gecko/getReq?gecko=豹纹守宫
关于annotation注解的相关知识这里就不做讲解,可以看到我们直接在这个方法的参数列表中填入了HttpServletRequest参数,在方法中就可以直接使用,可以猜测这个参数的实参是由框架传递过来的。
运行结果如下

第二个问题我们需要关心的是,如何把响应到浏览器端,作如下验证。
@RequestMapping("/setRes")
public ModelAndView setRes(HttpServletResponse res){
String str="这是一个响应,我要将它打印在浏览器上";
PrintWriter writer=null;
try {
writer=res.getWriter();
writer.print(str);
writer.flush();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}finally{
if (writer != null)
writer.close();
}
return null;
}
我的本意是将"这是一个响应,我要将它打印在浏览器上"当成浏览器响应,展示在网页上。但是运行的结果是:

加入一行代码 res.setHeader("Content-type", "text/html;charset=UTF-8");得到我们想要的效果。

2.新建一个jsp页面,在web-inf下新建一个名为jsp的文件夹,在jsp文件夹下再建一个gecko的文件夹,然后新建一个goPage.jsp页面,页面代码如下。
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
这是第一个jsp页面
<br>
<h1>${geckoName}</h1>
</body>
</html>
再编写一个新的controller方法,如下。
@RequestMapping("/goPage")
public ModelAndView goPage(String geckoName){
ModelAndView mv=new ModelAndView();
mv.getModel().put("geckoName", geckoName);
mv.setViewName("gecko/GoPage");
return mv;
}
这里注意 mv.getModel().put("geckoName", geckoName);这句代码,它相当于Servlet中的request.setAttribute("geckoName", geckoName);在一个request中传递共享参数。而该方法的形参直接传递了一个String类型的参数,相当于Servlet中request.getParameter("geckoName")。可以发现spring mvc为我们封装得很好。而且因为一个方法对应一个请求,而请求中的数据都通过形参传递过来,不像struts2的有些数据是当成类的成员变量存在的,不同请求如果共用一个action对象,则有可能会出现线程安全的问题,所以struts2采用每一个请求实例化一个新的action对象来解决这个问题。这也势必对内存回收造成影响。
spring mvc只会产生一个controller类的实例对象,每次请求对应于该对象的一个方法,因为方法中的变量属于局部变量,所以不会出现共享的问题。
在浏览器输入http://192.168.1.185:8080/m_gecko/goPage?geckoName=恶魔白酒
显示结果如下:

3.以上只是spring mvc的一些最基本的操作,接下来我们做一个功能,就是显示t_gecko表中的数据。
1)首先我们需要引入service类,加入如下代码:
@Resource(name="geckoService")
private GeckoService geckoService;
2)创建geckoList方法
代码如下:
@RequestMapping("geckoList")
public ModelAndView geckoList() throws Exception{
ModelAndView mv=new ModelAndView();
List<TGecko>geckoList=geckoService.getGeckoList();
mv.getModel().put("geckoList", geckoList);
mv.setViewName("gecko/GeckoList");
return mv;
}
编写jsp代码
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme() + "://"
+ request.getServerName() + ":" + request.getServerPort()
+ path + "/";
%>
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>守宫列表</title>
</head>
<body>
<table>
<tr>
<td>编号</td>
<td>名称</td>
<td>创建时间</td>
</tr>
<c:choose>
<c:when test="${not empty geckoList }">
<c:forEach items="${geckoList }" var="gecko" varStatus="vs">
<tr>
<td>${gecko.geckoId}</td>
<td>${gecko.geckoName}</td>
<td><fmt:formatDate type="both" dateStyle="medium"
timeStyle="medium" value="${gecko.createTime}" /></td>
</tr>
</c:forEach>
</c:when>
<c:otherwise>
没有相关数据
</c:otherwise>
</c:choose> </table> </body>
</html>
此处用到了jstl的相关知识,需要在maven配置文件中引入以下包。
<!-- jsp标签 -->
<dependency>
<groupId>javax.servlet.jsp.jstl</groupId>
<artifactId>jstl-api</artifactId>
<version>1.2</version>
<exclusions>
<exclusion>
<groupId>javax.servlet</groupId>
<artifactId>servlet-api</artifactId>
</exclusion>
<exclusion>
<groupId>javax.servlet.jsp</groupId>
<artifactId>jsp-api</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.glassfish.web</groupId>
<artifactId>jstl-impl</artifactId>
<version>1.2</version>
<exclusions>
<exclusion>
<groupId>javax.servlet</groupId>
<artifactId>servlet-api</artifactId>
</exclusion>
<exclusion>
<groupId>javax.servlet.jsp</groupId>
<artifactId>jsp-api</artifactId>
</exclusion>
<exclusion>
<groupId>javax.servlet.jsp.jstl</groupId>
<artifactId>jstl-api</artifactId>
</exclusion>
</exclusions>
</dependency>
在这边我被坑了很久,起因是引入包之后一直提示The absolute uri: http://java.sun.com/jsp/jstl/core cannot be resolved in either web.xml or the jar files deployed with this application这个错误,网上找了半天,用尽各种方法也没有奏效。
最后把build path中的server改成tomcat7,才解决问题。
于是猜测可能是tomcat8中的某些jar包版本太高,导致无法适配jstl的包,然后我又重新更改成tomcat8运行,神奇的发现可以运行了。这里我至今没搞懂。
结果如下:

下一篇文章我们做一下提交表单,修改数据,结合spring mvc完成一个简单的增删改查demo.
SSM学习(三)--集成spring mvc的更多相关文章
- 。。。在学习新框架Spring MVC的感受。。。
已经学习一遍Spring MVC了,感觉还是懵懵懂懂的,特别是重定向,路径,参数的这些问题,心好乱,不过,这,都不是问题!!! 继续努力,努力到会为止!!!加油!!!
- SSM 即所谓的 Spring MVC + Spring + MyBatis 整合开发。
SSM 即所谓的 Spring MVC + Spring + MyBatis 整合开发.是目前企业开发比较流行的架构.代替了之前的SSH(Struts + Spring + Hibernate) 计划 ...
- SpringBoot集成Spring MVC视图
SpringBoot在springmvc的视图解析器方面就默认集成了ContentNegotiatingViewResolver和BeanNameViewResolver,在视图引擎上就已经集成自动配 ...
- springboot学习章节代码-Spring MVC基础
1.项目搭建. <?xml version="1.0" encoding="UTF-8"?> <project xmlns="htt ...
- Spring学习笔记之五----Spring MVC
Spring MVC通常的执行流程是:当一个Web请求被发送给Spring MVC Application,Dispatcher Servlet接收到这个请求,通过HandlerMapping找到Co ...
- Spring学习日志之Spring MVC启动配置
对DispatcherServlet进行配置 Spring MVC的配置实际上就是对DispatcherServlet的配置 public class DispatcherServletConfig ...
- spring集成spring mvc 和hibernate详解
1.配置IOC容器 <!-- 配置IOC容器 --> <context-param> <param-name>contextConfigLocation</p ...
- spring入门(三) 使用spring mvc
1.建立project / module 新建空的project:springMvcStudy 新建module:type maven-webapp,名字mvcStudy 2.为module设置Sou ...
- spring学习三:Spring Bean 生命周期
Bean 的生命周期 理解 Spring bean 的生命周期很容易.当一个 bean 被实例化时,它可能需要执行一些初始化使它转换成可用状态.同样,当 bean 不再需要,并且从容器中移除时,可能需 ...
随机推荐
- MES制造执行系统启动篇
美国先进制造研究机构(AMR)定义了MES为:"位于上层的计划管理系统与底层的工业控制之间的面向车间层的管理信息系统",它为操作人员/管理人员提供计划的执行.跟踪以及所有资源(人. ...
- [转]SQL Server为啥使用了这么多内存?
原文地址:http://support.microsoft.com/gp/anxin_techtip6/zh-cn SQL Server为啥使用了这么多内存? SQL Server的用户,常常会发现S ...
- Altera FIFO IP核时序说明
ALTERA在LPM(library of parameterized mudules)库中提供了参数可配置的单时钟FIFO(SCFIFO)和双时钟FIFO(DCFIFO).FIFO主要应用在需要数据 ...
- python 常用库整理
python 常用库整理 GUI 图形界面 Tkinter: Tkinter wxPython:wxPython pyGTK:PyGTK pyQt:pyQt WEB框架 django:django w ...
- sort学习 - LeetCode #406 Queue Reconstruction by Height
用python实现多级排序,可以像C语言那样写个my_cmp,然后在sort的时候赋给参数cmp即可 但实际上,python处理cmp 是很慢的,因为每次比较都会调用my_cmp:而使用key和rev ...
- Python 面向对象(二) 特殊方法
一些Python特殊方法的汇总 __bases__ 类的基类,返回元祖__base__ 类的基类,也叫父类__call__ '类名()',类名加括号调用时执行的语句__class__ 对象或类 ...
- PL/SQL 游标 (实验七)
PL/SQL 游标 emp.dept 目标表结构及数据 要求 基于部门表建立游标dept_cursor1,使用记录变量接收游标数据,输出部门表信息: 显示格式: 部 门 号: XXX 部门名称: XX ...
- “战术竞技类”外挂打击已开始!揭秘腾讯We Test游戏安全服务新动作!
商业转载请联系腾讯WeTest获得授权,非商业转载请注明出处. 原文链接:http://wetest.qq.com/lab/view/353.html We Test导读 国服PUBG的游戏安全将由我 ...
- 11个优秀的Android开发开源项目
一. 一个类似微信的时光轴效果 时光轴效果 项目地址 https://github.com/ljtyzhr/TimeLine 二. 安卓选择器类库,包括日期.时间.单项.双项选择器.城市地址选择器 ...
- 【原创】python实现清理本地缓存垃圾
#coding=utf-8 import os import glob try: #利用glob模块定位需要清理垃圾的模糊路径 File_1 = glob.glob("C:\Windows\ ...