基于Struts2的SpringMVC入门
1.SpringMVC概述
(1)SpringMVC为表现层提供基础的基于MVC设计理念的优秀Web框架,
(2)SpringMVC通过一套mvc的注解,让POJO成为处理请求的控制器,而无需任何接口
(3)采用了松散耦合可插拔组件结构,比其他框架更具扩展性和灵活性
(4)Spring MVC 是一个web框架是mvc中的c,springmvc 处理请求的是控制器。
2.简单的SpringMVC程序
(1)搭建springmvc框架,配置基本夹包31个jar包,复制springmvc的入口,
(2) spring的入口是一个servlet,这个servlet被称为分发器。在web.xml写入
配置入口
<servlet-name>SpringMVC</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<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的文件
<servlet-mapping>
<servlet-name>SpringMVC</servlet-name>
<!-- 此处可以可以配置成*.do,对应struts的后缀习惯 -->
<url-pattern>*.do</url-pattern>
</servlet-mapping>
(3)创建SpringMVC配置文件,spring-servlet.xml
配置代码
<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:mvc="http://www.springframework.org/schema/mvc"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.2.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-3.2.xsd
http://www.springframework.org/schema/mvc
http://www.springframework.org/schema/mvc/spring-mvc-3.2.xsd"> </beans>
处理器所在包
<context:component-scan base-package="com.haina"/>
视图解析器
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix" value="/WEB-INF/jsp/" ></property>
<property name="suffix" value=".jsp" ></property>
</bean>
配置拦截器
<mvc:interceptors>
<!-- 这个拦截器会拦截所有请求 -->
<bean id="id" class="com.haina.mvc2.controller.FirstIntercepter"></bean>
<!-- 拦截包含ma的所有 -->
<mvc:interceptor>
<mvc:mapping path="/ma/*"/>
<bean id="second" class="com.haina.mvc2.controller.SecondIntercepter"></bean>
</mvc:interceptor>
<mvc:interceptor>
<!-- 包括所有 -->
<mvc:mapping path="/*/*"/>
<!-- 不包括mv下的所有 -->
<mvc:exclude-mapping path="/mv/*"/>
<bean id="third" class="com.haina.mvc2.controller.ThirdIntercepter"></bean>
</mvc:interceptor>
</mvc:interceptors>
(4)创建控制器
创建一个com.haina.controller包
新建一个Controller类
添加@Controller注解。这个类就变成了一个处理器
package com.haina.controller; 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.bind.annotation.RequestParam; @Controller
@RequestMapping("/user") //相当于struts2中的namespace
public class UserController {
@RequestMapping("/helloword") //相当于action的name属性值
//此时的这个helloword这个方法处理的请求是
//http://localhost:8080/项目名/user/helloword.do
public String helloword(){
//spring开发需要写的代码和jsp,不用配类似于struts.xml的配置文件
//返回webContent 下面的hello.jsp给用户,其中的/表示webConen
//jsp需要保存的web-INF下,通过代码访问,这样浏览器就没有办法直接访问
System.out.println("123");
return "hello"; } }
在web-INF下新建一个hello.jsp文件即可显示登陆成功
3.SpringMVC常用注解详解
(1)@PathVariable:通过@PathVariable可以将URL中的占位符参数绑定到控制器处理方法的入参中:
URL中的{XXX}占位符可以通过@PathVariable("xxx")绑定到操作方法中
//http://localhost:8080/mvc2/mvc2/pathTest/1/19/ruanjian
@RequestMapping("/pathTest/{id}/{age}/{classes}")
public String pathTest(@PathVariable(value="id")int id,
@PathVariable(value="age")int age,@PathVariable(value="classes")
String classes1)
{
System.out.println(classes1);
System.out.println(id);
System.out.println(age);
return "success"; }
(2)希望在多个请求之间共用某个模型属性数据用@SessionAttributes,
//把模型中的user1,user2和所有Users对象session中
@SessionAttributes(types={User.class},value={"user1","user2"})
public class SessionTestController {
@RequestMapping("/s1")
public ModelAndView test(HttpSession session)//这个session对象直接用
{
//ModelAndView模型和视图,可以new,“success”只是视图的名字
//视图就是jsp的名字
ModelAndView mv=new ModelAndView("success");
Object o=session.getAttribute("user1");
System.out.println(o);
o=session.getAttribute("user2");
System.out.println(o);
o = session.getAttribute("s");
System.out.println(o);
o = session.getAttribute("s1");
System.out.println(o);
if(o==null){
//同包下不需要导包,java.long下不需要导报。
System.out.println("第一次请求s1此时没有session值,为null");
Users user =new Users(1,"gll","123");
mv.addObject("user1",user);//自动绑定到session中,key为user
mv.addObject("user2",user);
mv.addObject("s",user);
mv.addObject("s1",user);//把对象加入模型,模型中的数据都是key = value形式
}else{
System.out.println("第二次请求s1,此时session中有值"+session.getAttribute("s"));
System.out.println("用户信息"+session.getAttribute("user"));
}
return mv; }
(3)@CookieValue:从客户端获取值,只能用在方法上
@RequestMapping("/c1")
public String testCookie(@CookieValue(value="username",required=false)String name,HttpServletResponse reponse)
{
if(name==null){
System.out.println("cookie为空");
Cookie cookie=new Cookie("username","gll");
cookie.setMaxAge(14*24*60*60);
reponse.addCookie(cookie);
}else{
System.out.println("从客户端获取cookie值"+name);
} return "hello"; }
4.SpringMVC处理模型数据
(1)ModelAndView:处理方法返回值类型为ModelAndView时方法体即可通过该对象添加数据。
@RequestMapping("/mv1")
public ModelAndView test1(){
ModelAndView mv=new ModelAndView("testview");//指定视图名字
mv.addObject("mvname","mvvale");
mv.setViewName("testview");
return mv;
}
(2)Map及Model:处理方法返回时,Map中的数据会自动添加到模型中
//如果返回值是String,就必须入参是ModelMap,不能new ModelMap
@RequestMapping("/mv2")
public String test2(ModelMap mm){
mm.addAttribute("mmname","mmvalue");
return "testview";
}
(3)@SessionAttribute:将模型中的某个属性暂存到HttpSession中,以便多个请求可以共享这个属性
@SessionAttributes(types={User.class},value={"user1","user2"})
public class SessionTestController {
@RequestMapping("/s1")
public ModelAndView test(HttpSession session)//这个session对象直接用
{
//ModelAndView模型和视图,可以new,“success”只是视图的名字
//视图就是jsp的名字
ModelAndView mv=new ModelAndView("success");
Object o=session.getAttribute("user1");
System.out.println(o);
o=session.getAttribute("user2");
System.out.println(o);
o = session.getAttribute("s");
System.out.println(o);
o = session.getAttribute("s1");
System.out.println(o);
if(o==null){
//同包下不需要导包,java.long下不需要导报。
System.out.println("第一次请求s1此时没有session值,为null");
Users user =new Users(1,"gll","123");
mv.addObject("user1",user);//自动绑定到session中,key为user
mv.addObject("user2",user);
mv.addObject("s",user);
mv.addObject("s1",user);//把对象加入模型,模型中的数据都是key = value形式
}else{
System.out.println("第二次请求s1,此时session中有值"+session.getAttribute("s"));
System.out.println("用户信息"+session.getAttribute("user"));
}
return mv; }
(4)@ModelAttribute:方法入参标注该注解后,入参的对象就会放到数据模型
@ModelAttribute("user")
//map.put("user",u )
public Users getUser(@RequestParam(value="id",required=false) Integer id,Model model){
System.out.println("我是一个加了@ModelAttribute方法");
Users u=null;
model.addAttribute("id",0);
if(id==null){
model.addAttribute("id",0);
u=new Users(1,"gll","123");
}
else{
u=new Users();
}
return u;
}
基于Struts2的SpringMVC入门的更多相关文章
- SpringMVC札集(03)——基于注解的SpringMVC入门完整详细示例
自定义View系列教程00–推翻自己和过往,重学自定义View 自定义View系列教程01–常用工具介绍 自定义View系列教程02–onMeasure源码详尽分析 自定义View系列教程03–onL ...
- SpringMVC入门(基于注解方式实现)
---------------------siwuxie095 SpringMVC 入门(基于注解方式实现) SpringMVC ...
- SpringMVC入门(基于XML方式实现)
----------------------siwuxie095 SpringMVC 入门(基于 XML 方式实现) (一)搭建 SpringMVC 环境 1.先下载相关库文件,下载链接: (1)ht ...
- SpringMVC入门就这么简单
什么是SpringMVC? SpringMVC是Spring家族的一员,Spring是将现在开发中流行的组件进行组合而成的一个框架!它用在基于MVC的表现层开发,类似于struts2框架 为什么要使用 ...
- springMVC入门(一)
1. SpringMVC入门 1.1SpringMVC是什么 Spring web mvc和Struts2都属于表现层的框架,它是Spring框架的一部分,我们可以从Spring的整体结构中看得出 ...
- SpringMVC 入门程序
SpringMVC是什么 SpringMVC 是一种基于 Java 的实现 MVC 设计模型的请求驱动类型的轻量级 Web 框架,属于 Spring FrameWork 的后续产品,已经融合在 Spr ...
- 【SpringMVC】SpringMVC 入门
SpringMVC 入门 文章源码 SpringMVC 基本概念 在 JavaEE 开发中,几乎全都是基于 B/S 架构的开发.在 B/S 架构中,系统标准的三层架构包括:表现层.业务层.持久层. 表 ...
- 【Spring】SpringMVC入门示例讲解
目录结构: // contents structure [-] SpringMVC是什么 Spring MVC的设计原理 SpringMVC入门示例 1,复制Jar包 2,Web.xml文件 3,My ...
- struts1,struts2,springMVC终极对比
最近做项目用到了struts2,之前一直是用struts1和springMVC.感觉到了struts2从很大程度上和这两个还是有很大区别的,所以今天搜集了些资料,给他们做一下对比. Struts1官方 ...
随机推荐
- 微信JS初始化--微信JS系列文章(一)
概述 微信JS的使用方法,官方文档已经描述得比较清楚了,这里我就不重复介绍了,本文意在提供现成的代码,供大家快速迭代开发,以及补充一下官方文档描述得不够清楚的地方,避免大家踩相同的坑. 微信JS初始化 ...
- 在linux下使用百度ueditor编辑器上传图片
百度ueditor编辑器虽然强大,但是也有不足的地方.如果对ueditor流程不是很熟悉可以说走的弯路比较多,费力不讨好.下面呢,就是要解决ueditor遇到的问题. 用ueditor上传图片遇到的问 ...
- 转:java实例化对象的过程
学习JAVA这门面向对象的语言,实质就是不断地创建类,并把类实例化为对象并调用方法.对于初学JAVA的人总搞清楚对象是如何实例化的,假如类之间存在继承关系,那就更糊涂了.下面我们通过两个例题来说明对象 ...
- javascript重修之书(一):如何判断变量的数据类型
javascript重修之书(一):如何判断变量的数据类型 一:检测值类型 基本类型:(Undefined.Null.Boolean.Number和String) javascript之所以被称为一门 ...
- 自动化利器-YUM仓库搭建实战
本地YUM仓库搭建实战 YUM主要用于自动安装.升级rpm软件包,它能自动查找并解决rpm包之间的依赖关系.要成功的使用YUM工具安装更新软件或系统,就需要有一个包含各种rpm软件包的reposito ...
- 【Egret】2D 使用中的一些疑难解决技巧!
1.问题:声音在ios上无法播放 解决方法:①首先需要预加载一个声音 ②然后目前只有点击之后才能播放声音,不能默认播放 2.问题:滚动条问题 解 ...
- python+robot framework实现测报告定制化和邮件发送
前面已经介绍了python+robot framework自动化框架和基本原理的实现,详情请看 python+robot framework接口自动化测试 本章主要讲解报告已经产生那如何以自动化的方式 ...
- 4月5日--课堂笔记--JS内置对象
JavaScript 4.5 一. JS内置对象 1.数组Array a)创建语法1:var arr=new Array(参数); i. 没有参数:创建一个初始容量为0的数组 ii. ...
- 奇葩问题:同样的字符串equal为false
问题:什么情况下 "同样" 的字符串会不equal呢?例如 "a".equal("a") => false 在你看来,这可能是个 ...
- macOS平台下虚拟摄像头的研发总结
一.背景介绍 虚拟摄像头,顾名思义,就是利用软件技术虚拟出一个摄像头硬件设备供用户使用.当我们需要对视频图像进行处理再输出时,虚拟摄像头就具备非常大的价值了.关于如何在Windwos上实现一个虚拟设备 ...