基于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提交表单错误:document.form.submit() is not a function
今天在写JS时,遇上这么个错误:"document.form.submit() is not a function",经过一番搜索,最终找到了修复方法. 这个错误一般是由于表单&l ...
- 英伟达CUVID硬解,并通过FFmpeg读取文件
虽然FFmpeg本身有cuvid硬解,但是找不到什么好的资料,英伟达的SDK比较容易懂,参考FFmpeg源码,将NVIDIA VIDEO CODEC SDK的数据获取改为FFmpeg获取,弥补原生SD ...
- Web移动端的常用组件库
normalize http://necolas.github.io/normalize.css/ 最受欢迎的css reset 保留有用的默认值,这个区别于其他的CSS resets 标准化大范围的 ...
- 《HelloGitHub》第12期
<HelloGitHub>第12期 兴趣是最好的老师,<HelloGitHub>就是帮你找到兴趣! 简介 最开始我只是想把自己在浏览 GitHub 过程中,发现的有意思.高质量 ...
- CodeFirst的一些操作!!
CodeFirst的一些操作!! 转载 2016-08-05 21:03:32 1 首先是codefirst怎么做,这个首先肯定要引入EntityFramework,然后在model中创建实体类,例如 ...
- Java面试指导
Java面试指导 想要成为合格的Java程序员或工程师到底需要具备哪些专业技能,面试者在面试之前到底需要准备哪些东西呢?本文陈列的这些内容既可以作为个人简历中的内容,也可以作为面试的时候跟面试官聊 ...
- 老李分享:《Linux Shell脚本攻略》 要点(二)
老李分享:<Linux Shell脚本攻略> 要点(二) poptest是国内唯一一家培养测试开发工程师的培训机构,以学员能胜任自动化测试,性能测试,测试工具开发等工作为目标.如果对课 ...
- CSS3-渐变背景色
线性渐变背景色: <style> .linear { width:130px; height:130px; border:2px solid black; padding: 10px; b ...
- Python标准模块--importlib
作者:zhbzz2007 出处:http://www.cnblogs.com/zhbzz2007 欢迎转载,也请保留这段声明.谢谢! 1 模块简介 Python提供了importlib包作为标准库的一 ...
- C语言中关于三目运算符的注意事项
C语言中常见的条件运算符?:在运算符优先级中排行13.部分时候可以代替if--else语句,使代码更加简洁.但是更容易隐含一些不易觉察的错误. 最近接了一个项目,本来通信协议部分很简单,自己的STM3 ...