Spring MVC
1.结构最清晰的MVC Model2实现
2.Controller
3.ModelAndView

1.HTTP请求 SpringMVC核心是前端控制器DispatcherServlet 在web.xml <servlet-name>-servlet.xml配置

2.HandlerMapping:通过配置去找Handler(Controller)

3.Handler:处理器 调用service方法进行业务处理

4.返回数据ModelAndView(增删改查)逻辑视图名 并不是真正的视图对象

5.ViewResolver :视图解析器 DispatcherServlet借助视图解析器把逻辑视图名解析成真正的视图对象。

6.获得model数据模型放到View视图中(JSP/JSTL/PDF...)

7.HTTP响应给客户端(用户)

springMVC在web.xml配置
<servlet>
<servlet-name>springMVC</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<load-on-startup>1</load-on-startup><!--优先启动 -->
</servlet>

<servlet-mapping>
<servlet-name>springMVC</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>

springMVC-servlet.xml核心配置文件/WEB-INF/springMVC-servlet.xml
<!-- 通过bean的name,完成url映射 -->
<bean name="/springMVC.html" class="cn.bdqn.controller.HelloController"/>
name是用户请求的url 通过class找到controller controller返回modelandwiew 通过视图解析器解析返回view视图给用户。

<!-- 视图解析器 -->
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix" value="/WEB-INF/jsp/"/>
<property name="suffix" value=".jsp"/>
</bean>
我要放到resource里面 在web.xml 配置
<servlet>
<servlet-name>springMVC</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:springMVC-servlet.xml</param-value>
</init-param>
<load-on-startup>1</load-on-startup><!--优先启动 -->
</servlet>

<servlet-mapping>
<servlet-name>springMVC</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>

注解的方式:DefaultAnnotationHandlerMapping

<!--使用annotation方式,完成映射-->
<!--使用annotation方式,完成映射-->
<!--让spring扫描包下的所有的类,让标注spring注解的类生效 -->
<context:component-scan base-package="cn.bdqn.controller"></context:component-scan>
<mvc:annotation-driven/>
通过@RequestMapping(value = "/hello")
通过@RequestMapping的value匹配用户请求的url找到controller类的xxx方法 再执行

@Controller
public class WelcomController {
// 通过@RequestMapping的value匹配用户请求的url找到controller类的hello()方法 再执行
@RequestMapping(value = "/hello")
public String hello() {
System.out.println("hello spring!!!");
return "hello";// 逻辑视图名
}
}
视图解析器:
1.将逻辑视图的名字与JSP等视图技术进行匹配
2.InternalResourceViewResolver
在web应用程序的War文件中查找视图模板,视图模板的路径根据加完前缀和后缀的逻辑视图名称来确定
prefix
suffix
<!-- 视图解析器 -->
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix" value="/WEB-INF/jsp/"/>
<property name="suffix" value=".jsp"/>
</bean>
参数的传递-1
1.@RequestParam
2.直接通过函数参数传值

@RequestMapping(value = "/hello")
public String hello(@RequestParam(value = "username") String username) {
System.out.println("hello spring!!! username----->>>" + username);
return "hello01";// 逻辑视图名
}
@RequestParam(value = "username")请求中的参数必须写

@RequestMapping(value = "/hello")
public String hello(String name) {
System.out.println("hello spring!!! name----->>>" + name);
return "hello01";// 逻辑视图名
}
通过url传来的参数 在后台直接能取到。但是参数名必须与方法传递的参数名一致 否则获取不到

@RequestMapping(value = "/hello")
// 通过model.addAttribute("username",name)放进作用域。通过EL表达式取出数据
public String hello(String name, Model model) {
model.addAttribute("username", name);
System.out.println("hello spring!!! name----->>>" + name);
return "hello01";// 逻辑视图名
}

@RequestMapping(value = "/hello")
// 通过model.addAttribute("username",name)放进作用域。通过EL表达式取出数据
public ModelAndView hello(String name) {
System.out.println(name);
ModelAndView model = new ModelAndView();
model.setViewName("hello01");// 逻辑 视图名
model.addObject("username", name);
return model;
}

@RequestMapping(value = "/hello")
// 通过model.addAttribute("username",name)放进作用域。通过EL表达式取出数据
public ModelAndView hello(String name) {
System.out.println(name);
ModelAndView model = new ModelAndView();
model.setViewName("hello01");// 逻辑 视图名
model.addObject(name);// 在前台取值${string} 就是取到value的数据类型
return model;
}

@RequestMapping(value = "/hello")
// 通过model.addAttribute("username",name)放进作用域。通过EL表达式取出数据
public String hello(String name, Map<String, Object> model) {
System.out.println(name);
model.put("name", name);// 在前台取值${string} 就是取到value的数据类型
return "hello01";
}

参数的传递-2
通过Map<Spring,Object>
Model
controller是单例的。

REST风格 并不是rest技术
1.Representational State Transfer表达性状态转移
2.传统的查、改、删的URL与REST风格的增删改URL对比
/userview.action?id=12 VS /user/12
/userdelete.action?id=12 vs /user/12/delete
/userdelete.action?id=12 vs /user/12/update
3.请求方式
GET 读取数据 查询
POST 添加 提交
DELETE 删除
PUT 修改
他强调的是一个资源可以对应多种视图

创建POJO-User类
HashMap
@RequestMapping(value="/userlist",method=RequestMethod.GET)

@Controller
@RequestMapping(value = "/user")
public class UserController {

private static Map<String, Object> map = new HashMap<String, Object>();

// 通过静态代码块赋值
static {
map.put("1", new User(1, "张三", "123456", "bdan@123.com"));
map.put("2", new User(2, "李四", "123456", "bdan@456.com"));
map.put("3", new User(3, "王五", "123456", "bdan@789.com"));
}

@RequestMapping(value = "/list",method = RequestMethod.GET)
public String list(Model model) {
model.addAttribute("map", map);
return "user/userlist";
}
}

用户列表:<br>
<c:forEach var="ul" items="${map }">
id:${ul.value.id }------
userName:${ul.value.userName }------
password:${ul.value.password }------
email:${ul.value.email }<br>
</c:forEach>

@RequestMapping(value = "/list",method = RequestMethod.GET)
public String userList(HttpServletRequest request) {
List<User> list = new ArrayList<User>();
list.add(new User(1, "张三", "123456", "bdan@123.com"));
list.add(new User(2, "李四", "123456", "bdan@456.com"));
list.add(new User(3, "王五", "123456", "bdan@789.com"));
request.setAttribute("list", list);
return "user/userlist";

}

用户列表:<br>
<c:forEach var="user" items="${list }">
id:${user.id }------
userName:${user.userName }------
password:${user.password }------
email:${user.email }<br>
</c:forEach>

model的作用域是个request级别

异常处理

JSR303 是一套JavaBean参数校验的标准,它定义了很多常用的校验注解,我们可以直接将这些注解加在我们JavaBean的属性上面,就可以在需要校验的时候进行校验了。注解如下:
@NotNull 注解元素必须是非空
@Null 注解元素必须是空
@Digits 验证数字构成是否合法
@Future 验证是否在当前系统时间之后
@Past 验证是否在当前系统时间之前
@Max 验证值是否小于等于最大指定整数值
@Min 验证值是否大于等于最小指定整数值
@Pattern 验证字符串是否匹配指定的正则表达式
@Size 验证元素大小是否在指定范围内
@DecimalMax 验证值是否小于等于最大指定小数值
@DecimalMin 验证值是否大于等于最小指定小数值
@AssertTrue 被注释的元素必须为true
@AssertFalse 被注释的元素必须为false
Hibernate validator 在JSR303的基础上对校验注解进行了扩展,扩展注解如下:
@Email 被注释的元素必须是电子邮箱地址
@Length 被注释的字符串的大小必须在指定的范围内
@NotEmpty 被注释的字符串的必须非空
@Range 被注释的元素必须在合适的范围内

<!-- 处理字符编码filter -->
<filter>
<filter-name>encodingFilter</filter-name>
<filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>UTF-8</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>encodingFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>

@RequestMapping(value = "/addSave", method = RequestMethod.POST)
public String addSave(@Validated User user, BindingResult bindingResult) {
if (bindingResult.hasErrors()) {
return "user/add";// 如果用户输入不正确 就会返回add 重新输入
}
map.put(user.getId() + "", user);
return "redirect:/user/list";
}

/**
* REST风格
* @param id
* @param model
* @return
*/
@RequestMapping(value = "/view/{id}", method = RequestMethod.GET)
public String view(@PathVariable String id, Model model) {
System.out.println(id);
model.addAttribute("user", map.get(id));
return "user/view";
}

/**
* 先回显 在修改
* @param id
* @param user
* @return
*/
@RequestMapping(value = "/{id}/update", method = RequestMethod.GET)
public String update(@PathVariable String id, Model model) {
model.addAttribute(map.get(id));
return "user/update";
}

/**
* 修改@PathVariable REST风格获取参数 {id}入参的形式
* @param id
* @param user
* @param bindingResult
* @return
*/
@RequestMapping(value = "/{id}/update", method = RequestMethod.POST)
public String update(@PathVariable String id, @Validated User user,
BindingResult bindingResult) {
if (bindingResult.hasErrors()) {
return "user/update";
}
map.put(user.getId() + "", user);
return "redirect:/user/list";
}

@RequestMapping(value = "/{id}/delete", method = RequestMethod.GET)
public String detele(@PathVariable String id) {
map.remove(id);// 删除
return "redirect:/user/list";
}
1.异常处理
1.局部异常处理:@ExceptionHandler
2.全局异常处理:SimpleMappingExceptionResolver
2.使用Servlet API对象作为入参
1.HttpSession
2.HttpServletRequest
3.HttpServletResponse
map<key,value>

hash表的结构
1 map<object,object>
map key="t01" value的内存地址

转载于:https://www.cnblogs.com/Interface123/p/7285441.html

springmvc整理相关推荐

  1. SpringMVC学习笔记整理

    SpringMVC学习笔记 以下是我整理的SpringMVC学习笔记: 导入jar包 一:springmvc工作流程. ①.     servlet容器初始化一个request请求 ②.     Di ...

  2. springboot springmvc mybatis_12道重点的Spring Boot面试题,帮你整理好了!

    今天跟大家分享下SpringBoot常见面试题的知识. 最新2020整理收集的一些面试题(都整理成文档),有很多干货,包含mysql,netty,spring,线程,spring cloud等详细讲解 ...

  3. jsp springmvc 视图解析器_Java面试题整理——SpringMVC

    SpringMVC 1.什么是SpringMVC Spring MVC是一个MVC的开源框架,Spring MVC = Struts2+spring,Spring MVC就相当于是Struts2加上S ...

  4. springmvc学习资料整理

    springmvc接口开发返回XML/JSON数据 1.SpringMVC返回json数据的三种方式:http://blog.csdn.net/shan9liang/article/details/4 ...

  5. SpringMVC详细执行流程整理

    架构流程 1. 用户发送请求至前端控制器DispatcherServlet 2. DispatcherServlet收到请求调用HandlerMapping处理器映射器. 3. 处理器映射器根据请求u ...

  6. springMVC面试问题整理一

    2019独角兽企业重金招聘Python工程师标准>>> 一:springMVC方面的 1;如何搭建springMVC框架 1):下载spring源包 spring-framework ...

  7. springMVC 面试题整理

    1. springMVC怎么样把某个请求映射到特定的方法上面? 答:直接在方法上面加上注解@RequestMapping,并且在这个注解里面写上要拦截的路径. 2. @RequestMapping注解 ...

  8. SpringMVC个人理解(downpour 的SpringMVC深度探险的个人整理)

    2019独角兽企业重金招聘Python工程师标准>>> 从servlet开始讲起,之后以DispatcherServlet为主线展开. SpringMVC是建立在Servlet基础上 ...

  9. springMVC拦截器使用场景,使用步骤(摘录整理)

    拦截器是指通过统一拦截从浏览器发往服务器的请求来完成功能的增强 使用场景:解决请求的共性问题(乱码问题.权限验证问题) 拦截器的基本工作原理 1.SpringMVC可以通过配置过滤器来解决乱码问题 2 ...

最新文章

  1. MySQL内存预估_mysql时该如何估算内存的消耗,公式如何计算?
  2. annie安装教程与Access is denied解决方法
  3. 为什么 Redis 单线程能支撑高并发?
  4. tensorflow 实现逻辑回归——原以为TensorFlow不擅长做线性回归或者逻辑回归,原来是这么简单哇!...
  5. 阿里研究员谷朴:警惕软件复杂度困局
  6. SDWebImage源码阅读(三)UIImage+GIF
  7. linux里如何创建c文件夹,使用c语言在Linux中的/ tmp文件夹中创建文本文件
  8. Mac eclipse找不到source的解决办法
  9. LWCOPY为前端代码提供复制功能的插件
  10. 输入你的密码来连接到_手机怎样连接WiFi?详细步骤,教你操作
  11. WebService学习总结(2)——WebService是什么?
  12. 天首发展,音飞储存要起飞
  13. 何川L3管理课_模块1_定目标
  14. QQ是怎样实现好友桌面快捷方式的?
  15. java非静态内部类子类的调用_Java嵌套类和内部类详解
  16. 解决CSDN免登陆复制问题
  17. sql删除表中各类重复数据
  18. 计算机一级中的高级筛选怎么做,详解Excel的高级筛选
  19. numpy浅拷贝与深拷贝
  20. BT搜索引擎TorrentSpy被迫永久关闭

热门文章

  1. 洛谷P1852 奇怪的字符串
  2. ReactNative 问题集合
  3. 二路单调自增子序列模型【acdream 1216】
  4. 网站服务器上加入三层开发的网站错误解决
  5. poj3264Balanced Lineup(RMQ)
  6. [转]Android截屏及图片解析
  7. java httpclient form_Java后台使用httpclient入门HttpPost请求(form表单提交,File文件上传和传输Json数据)...
  8. 交换机设备登录账号权限1_计算机网络管理员考试试题和答案
  9. Linux内核套接字(Socket)的设计与实现
  10. JDK1.8 IdentityHashMap