首页 技术 正文
技术 2022年11月14日
0 收藏 509 点赞 5,139 浏览 4831 个字

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参数,在方法中就可以直接使用,可以猜测这个参数的实参是由框架传递过来的。

运行结果如下

SSM学习(三)–集成spring mvc

第二个问题我们需要关心的是,如何把响应到浏览器端,作如下验证。

@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;
}

我的本意是将”这是一个响应,我要将它打印在浏览器上”当成浏览器响应,展示在网页上。但是运行的结果是:

SSM学习(三)–集成spring mvc

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

SSM学习(三)–集成spring mvc

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=恶魔白酒

显示结果如下:

SSM学习(三)–集成spring mvc

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运行,神奇的发现可以运行了。这里我至今没搞懂。

结果如下:

SSM学习(三)–集成spring mvc

下一篇文章我们做一下提交表单,修改数据,结合spring mvc完成一个简单的增删改查demo.

相关推荐
python开发_常用的python模块及安装方法
adodb:我们领导推荐的数据库连接组件bsddb3:BerkeleyDB的连接组件Cheetah-1.0:我比较喜欢这个版本的cheeta…
日期:2022-11-24 点赞:878 阅读:9,489
Educational Codeforces Round 11 C. Hard Process 二分
C. Hard Process题目连接:http://www.codeforces.com/contest/660/problem/CDes…
日期:2022-11-24 点赞:807 阅读:5,904
下载Ubuntn 17.04 内核源代码
zengkefu@server1:/usr/src$ uname -aLinux server1 4.10.0-19-generic #21…
日期:2022-11-24 点赞:569 阅读:6,737
可用Active Desktop Calendar V7.86 注册码序列号
可用Active Desktop Calendar V7.86 注册码序列号Name: www.greendown.cn Code: &nb…
日期:2022-11-24 点赞:733 阅读:6,490
Android调用系统相机、自定义相机、处理大图片
Android调用系统相机和自定义相机实例本博文主要是介绍了android上使用相机进行拍照并显示的两种方式,并且由于涉及到要把拍到的照片显…
日期:2022-11-24 点赞:512 阅读:8,128
Struts的使用
一、Struts2的获取  Struts的官方网站为:http://struts.apache.org/  下载完Struts2的jar包,…
日期:2022-11-24 点赞:671 阅读:5,291