SpringMVC框架(一)

Spring为视图层提供的基于MVC设计理念的Web框架,是目前最主流的MVC框架之一
Spring MVC通过MVC注解,让POJO称为处理请求的控制器,而无须实现任何接口
支持REST风格的URL请求
才用了松散耦合可插拔组件结构

Spring MVC处理流程

MVC的特点
清晰的角色划分
强大而直接的配置方式
可适配、非侵入的controller
可重用的业务代码
可定制的绑定(binding)和验证(validation)
可定制的handler mapping和view resolution
灵活的model转换
可定制的本地化和主题(theme)解析

spring mvc的使用

配置web.xml文件
<servlet>
<servlet-name>mvc</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<!-- SpringMVC的上下文配置文件 -->
<param-name>contextConfigLocation</param-name>
<param-value>classpath:servlet-mvc.xml</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>mvc</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
</web-app>

配置servlet-mvc.xml文件

<!-- 配置springmvc自动扫描的包 -->
<context:component-scan base-package="com.jredu.controller">
<!-- 可以配置过滤不需要的文件或需要的文件 -->
</context:component-scan>
<!-- 设置视图解析器 -->
<bean
class="org.springframework.web.servlet.view.InternalResourceViewResolver"
p:prefix="/WEB-INF/pages/"
p:suffix=".jsp"/>
<mvc:default-servlet-handler />
<mvc:annotation-driven>
</mvc:annotation-driven>
</beans>

Spring MVC的使用

例:
package com.jredu.controller;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;

@Controller
@RequestMapping("/hello")
public class HelloController {
@RequestMapping("/hello1.action")
public String hello1() {
return "hello";
}
/**
* method:限制访问的方式(方法)
* @return
*/
@RequestMapping(value="/hello2.action",method={RequestMethod.GET,RequestMethod.POST})
public String hello2() {
return "hello";
}
/**
* params:限制必须按照设置传参才可以访问
* @return
*/
@RequestMapping(value="/hello3.action",params={"uname","pwd"})
public String hello3() {
return "hello";
}
@RequestMapping(value="/hello4.action",headers={"Cookie"})
public String hello4() {
return "hello";
}
/**
* ?匹配任意一个字符
* @return
*/
@RequestMapping("/h?")
public String hello5() {
return "hello";
}
/**
* *匹配任意多个字符
* @return
*/
@RequestMapping("/a*")
public String hello6() {
return "hello";
}
/**
* **匹配任意多重路径
*/
@RequestMapping("/a/**/hello7.action")
public String hello7(){
return "hello";
}
/**
* 支持占位符URL映射
* 通过@PathVariable可以将URL中占位符参数
* 绑定到控制器的处理方法中的参数中。
* @param pwd
* @param uname
* @return
*/
@RequestMapping("/hello8.action/{uname}/{pwd}")
public String hello8(@PathVariable("pwd") String pwd2,@PathVariable("uname") String uname){
System.out.println(uname);
System.out.println(pwd2);
return "hello";
}

}


spring MVC参数处理
springMVC 通过分析处理方法签名,将HTTP请求信息自动绑定到处理方法的参数中
如:

@RequestHeader:将请求头中的属性值绑定到处理方法的参数中
如:

参数传递例:
package com.jredu.controller;

import javax.servlet.http.HttpServletRequest;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.CookieValue;
import org.springframework.web.bind.annotation.RequestHeader;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;

import com.jredu.entity.User;

@Controller
@RequestMapping("/param")
public class ParamController {
/**
* 获取前台传递的参数
* @param uname
* @param pwd
* @return
*/
@RequestMapping(value="/p1",method={RequestMethod.GET})
public String param1(String uname,String pwd) {
//接受参数
//调用业务层
//调用dao ....
if("admin".equals(uname)&&"123".equals(pwd)) {
//登录成功
System.out.println("登录成功");
} else {
//登录失败
System.out.println("登录失败");
}
System.out.println("uname="+uname+",pwd="+pwd);
return "hello";
}
/**
* 要求必须传递@RequestParam所规定的参数
* required=false取消限制
* @param a
* @param b
* @return
*/
@RequestMapping("/p2")
public String param2(@RequestParam("uname")String a,@RequestParam(value="pwd",required=false)String b){
if("admin".equals(a)&&"123".equals(b)) {
//登录成功
System.out.println("登录成功");
} else {
//登录失败
System.out.println("登录失败");
}
System.out.println("uname="+a+",pwd="+b);
return "hello";
}
@RequestMapping("/p3")
public String param3(@RequestHeader("Cookie")String cookie) {
System.out.println("cookie:"+cookie);
return "hello";
}
@RequestMapping("/p4")
public String param4(@CookieValue("a")String sessionid) {
System.out.println(sessionid);
return "hello";
}
@RequestMapping("/p5")
public String param5(User user) {
//new User()
//set+Uname
System.out.println(user);
return "hello";
}

}
SpringMVC参数处理

例:
package com.jredu.controller;

import java.io.IOException;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;

import com.jredu.entity.User;

@Controller
@RequestMapping("/servlet")
/**
* request,response,session可以直接使用
* 如果涉及到页面跳转,尽量不要使用request,response
* 如果使用了request,response进行页面跳转,
* 不再使用视图解析器去匹配页面了(需要根据当前控制器的路径去写)
* 方法带返回值String要在控制器当中做页面的跳转(普通的控制器)
* 方法不带返回值:
* 1.通过request或者response这两个对象去做跳转
* 2.通过OutputStream或Writer直接在页面显示内容(前台是ajax访问获取数据)
* @author Administrator
*
*/
public class ServletController {

@RequestMapping("/s1")
public String s1(HttpServletRequest request) {
System.out.println(request.getParameter("uname"));
System.out.println(request.getParameter("pwd"));
request.setAttribute("sex", "man");
return "hello2";
}
/**
* HttpServletResponse作为参数后
* 方法返回值可以是void
* 如果没有HttpServletResponse,
* 返回值一定不能是void
* @param response
* @throws IOException
*/
@RequestMapping("/s2")
public void s2(HttpServletResponse response) throws IOException {
response.sendRedirect("../test.jsp");
}
@RequestMapping("/s3")
public void s3(HttpServletRequest request,HttpServletResponse response) throws ServletException, IOException {
request.getRequestDispatcher("../test.jsp").forward(request, response);
}
/**
* 把对象保存在session中
* @param session
* @param user
* @return
*/
@RequestMapping("/s4")
public String s4(HttpSession session,User user) {
session.setAttribute("user", user);
return "hello3";
}
}

Spring MVC参数处理
使用POJO,springMVC会将请求参数和POJO中的属性进行匹配,自动填充属性,并支持级联


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值