javaweb框架之springmvc
来源:互联网 发布:阿里云 香港节点 速度 编辑:程序博客网 时间:2024/06/06 05:48
1、springmvc
是一个轻量级的前端mvc框架,类似struts2,但是比stuts2使用方便,而且性能要高于struts2.
springmvc和spring是什么关系?
springmvc仅仅是spring框架下的一个web框架。可以单独使用,不依赖于spring,但是和spring集成最方便(相对struts2)
2、快速入门
2.1. xml配置
1.需要配置web.xml
<!-- DispatcherServlet:前端控制器 配置前端控制器servlet --><servlet> <servlet-name>springmvc</servlet-name> <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> <!--加载前端控制器配置文件 上下文配置位置 --> <init-param> <!--contextConfigLocation:指定springmvc配置的加载位置, 如果不指定则默认加 载WEB-INF/[DispatcherServlet的Servlet名字]-servlet.xml(例如springmvc-servlet.xml)。 --> <param-name>contextConfigLocation</param-name> <param-value>classpath*:spring-mvc.xml</param-value> </init-param> <!-- 表示随WEB服务器启动 --> <load-on-startup>1</load-on-startup></servlet><servlet-mapping> <servlet-name>springmvc</servlet-name> <!-- 可以拦截二种请求 第一种:拦截固定后缀的url,比如设置为 *.do、*.action, 例如:/user/add.action 此方法最简单,不会导致静态资源(jpg,js,css)被拦截 第二种:拦截所有 设置为/, 例如:/user/add /user/add.action,此方法可以实现REST风格的url 很多互联网类型的应用使用这种方式.但是此方法会导致静态文件(jpg,js,css)被拦截后不能正常显示.需要特殊处理 错误设置:拦截所有,设置为/*,此设置方法错误,因为请求到Action, 当action转到jsp时再次被拦截,提示不能根据jsp路径mapping成功. --> <url-pattern>/</url-pattern></servlet-mapping>
2.导包
<!-- sping web Controller层的核心包 --> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-web</artifactId> <version>4.1.6.RELEASE</version> </dependency> <!-- spring-webmvc view层的核心包 --> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-webmvc</artifactId> <version>4.1.6.RELEASE</version> </dependency> <!-- servlet 3.x --> <dependency> <groupId>javax.servlet</groupId> <artifactId>javax.servlet-api</artifactId> <version>3.1.0</version> <!-- 发布的时候,不发布servlet-api --> <scope>provided</scope> </dependency> <!-- https://mvnrepository.com/artifact/javax.servlet.jsp/jsp-api --> <dependency> <groupId>javax.servlet.jsp</groupId> <artifactId>jsp-api</artifactId> <version>2.1</version> <!-- 发布的时候,不发布jsp-api --> <scope>provided</scope> </dependency>
3.在resources下增加springmvc的配置文件spring-mvc.xml,注意名称要和web.xml加载的配置文件名称一致
<?xml version="1.1" encoding="UTF-8"?><beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.2.xsd"> <!-- 处理器映射器 --> <!-- 根据bean的name进行查找Handler处理器 将请求的url配置在bean的name中 --> <!-- 这是一个默认的映射处理器,即使不配置,那么也是默认就是这个 --> <bean class="org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping"/> <!-- HandlerAdapter适配器 --> <!-- 注意:这个适配器不是必须配置的,这是默认的、他在servlet容器已启动就被加载--> <bean class="org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter"/> <!-- 就是配置url请求的路径和对应的实现类--> <bean name="/hello" class="springmvc.HelloController"></bean></beans>
编写Controller,需要实现接口Controller
public ModelAndView handleRequest(HttpServletRequest request,
HttpServletResponse response) throws Exception {ModelAndView mv = new ModelAndView(); //这一步相当于request.setAttribute(“hello”,”hello SpirngMVC!!!”) mv.addObject("hello", "hello SpirngMVC!!!"); mv.setViewName("/WEB-INF/views/hello.jsp");return mv;
}
5.编写hello.jsp,然后进行发布测试
2.2. 注解
1、导包
2、web.xml配置DispatcherServlet
3、增加spring-mvc.xml
<!-- 自动扫描且只扫描@Controller --><context:component-scan base-package="springmvc" use-default-filters="false"> <context:include-filter type="annotation" expression="org.springframework.stereotype.Controller" /> <context:include-filter type="annotation" expression="org.springframework.web.bind.annotation.ControllerAdvice" /></context:component-scan><!-- 自动加载RequestMappingHandlerMapping和RequestMappingHandlerAdapter --><mvc:annotation-driven /><!-- 定义JSP文件的位置 --><bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"> <property name="prefix" value="/WEB-INF/views/" /> <property name="suffix" value=".jsp" /></bean>
4.编写Controller,注意:不需要实现接口Controller
@Controller@RequestMapping("/hello")public class HelloController { //Controller是单例模式 public HelloController(){ System.out.println("Spring mvc 启动时仅仅实例化一次Controller"); } @RequestMapping("/sayhello") public String hello(Model model) throws Exception { //这一步相当于request.setAttribute("hello","hello SpirngMVC!!!") model.addAttribute("hello", "hello SpirngMVC!!!"); //返回spring配置文件的前缀(prefix)+hello+后缀(suffix) return "hello"; } }
@Controller注解
- 用于标识这个类是一个后端控制器,主要作用就是接受页面的参数,转发页面。中间的业务逻辑是调用业务类处理的这个就是MVC设计模式的思路。
@RequestMapping
- 除了修饰方法,还可以修饰类
- 在类上使用:提供初步的请求信息映射.相对于WEB应用的根目录(窄化请求)
5.编写hello.jsp,然后进行发布测试
3、请求映射
3.1 请求url映射
3.1.1 多url映射
@RequestMapping(value={"/showDemo1","/show/show/show"})public String showDemo(){ System.out.println("showDemo1...."); //打开demo页面 return "demo";}
3.1.2 ant风格
//多层级匹配//@RequestMapping("/show/**/showDemo2")//一级多字符匹配//@RequestMapping("/show/*/showDemo2")//一级一个字符匹配@RequestMapping("/show/??/showDemo2")public String showDemo(){ System.out.println("showDemo2..."); return "demo";}
3.1.1 模版映射
@RequestMapping("showDemo3/{id}")public String showDemo3(@PathVariable("id") String id){ System.out.println("id="+id); System.out.println("showDemo3..."); return "demo";}
3.1.1 正则表达式映射
3.2 请求方法映射
//只过滤post请求//支持:GET,POST,HEAD, PUT, PATCH, DELETE, OPTIONS, TRACE//只有GET和POST最常用//如果不写method属性,那么所有请求都将映射到这个方法@RequestMapping(value="/showDemo4",method=RequestMethod.POST)public String showDemo(){ System.out.println("通过请求方法过滤映射..."); return "demo";}
3.3 请求参数映射
//过滤参数中含有name的url请求//http://127.0.0.1:8080/springmvc-requestmapping/showDemo5?name=zhangsan@RequestMapping(value="/showDemo5",params="name")public String showDemo1(){ System.out.println("含有name"); return "demo";}
3.4 请求头映射
//只允许请求头里面主机名是"127.0.0.1:8080"的才能访问@RequestMapping(value="/showDemo6", headers="Host=127.0.0.1:8080")public String showDemo(){ System.out.println("通过请求头限定..."); return "demo";}
4、请求数据绑定
- @RequestParam 绑定单个请求数据,可以是URL中的数据,表单提交的数据或上传的文件;
- @PathVariable 绑定URL模板变量值
- @CookieValue 绑定Cookie数据
- @RequestHeader 绑定请求头数据
4.1. 通过注解标签
@RequestMapping(value="/addUser",method=RequestMethod.GET)public String addUser(){ return "addUser";}@RequestMapping(value="/saveUser",method=RequestMethod.POST)public String saveUser(@RequestParam("name") String name, @RequestParam("age") int age){ System.out.println("name="+name); System.out.println("age="+age); return "user";}@RequestMapping(value="/showUser/{id}")public String showUser(@RequestHeader("Host") String host, @CookieValue("JSESSIONID") String jsessionId,@PathVariable("id") int id){ System.out.println("Host="+host); System.out.println("jsessionId="+jsessionId); System.out.println("id="+id); return "user";}
4.2. 通过javabean绑定表单数据
addStudent.jsp
<form action="${pageContext.request.contextPath }/student/saveStudent" method="post"> <label> <span>姓名:</span> <input type="text" name="name"> </label> <label> <span>年龄:</span> <input type="text" name="age"> </label> <label> <span>手机:</span> <input type="text" name="mobile"> </label> <label> <span>微信:</span> <input type="text" name="weixin"> </label> <label> <span>爱好:</span> <input type="text" name="hobby"> </label> <input type="submit" value="增加"></form>
StudentController.java
@RequestMapping("/saveStudent")public String saveStudent(Student student){ System.out.println(student); //去学生列表页面 return "student";}
4.3. 绑定列表数据
addPersons.jsp
<form action="${pageContext.request.contextPath}/person/savePersons" method="post"> 姓名:<input type="text" name="persons[0].name"/> 年龄:<input type="text" name="persons[0].age"/> 身高:<input type="text" name="persons[0].height"/> 体重:<input type="text" name="persons[0].weight"/><br/> 姓名:<input type="text" name="persons[1].name"/> 年龄:<input type="text" name="persons[1].age"/> 身高:<input type="text" name="persons[1].height"/> 体重:<input type="text" name="persons[1].weight"/><br/> 姓名:<input type="text" name="persons[2].name"/> 年龄:<input type="text" name="persons[2].age"/> 身高:<input type="text" name="persons[2].height"/> 体重:<input type="text" name="persons[2].weight"/><br/> <input type="submit" value="保存"/> </form>
Persons.java
public class Persons { private List<Person> persons = new ArrayList<Person>(); public List<Person> getPersons() { return persons; } public void setPersons(List<Person> persons) { this.persons = persons; }}
Person.java
public class Person {
private String name;private int age;private int height;private int weight;//setter...//getter...//toString...
}
PersonsController.java
@RequestMapping("/savePersons")public String savePersons(Persons persons){ System.out.println(persons.getPersons()); return "persons";}
阅读全文
0 0
- javaweb框架之springmvc
- javaweb框架之springmvc第二天
- javaweb框架之springmvc第三天
- JavaWeb配置详解(结合框架SpringMVC)
- javaweb-----springmvc框架额使用2
- JavaWeb框架-SpringMVC-2-增删改查
- SpringMVC 入门------ 第一个SpringMVC框架的JavaWeb项目
- javaweb之自定义JDBC框架
- javaWeb--Struts2框架之三
- WebMVC框架 之 SpringMVC
- 框架之SpringMVC
- SpringMVC之框架概述
- SpringMVC之框架概述
- SpringMVC框架之HelloWorld
- JavaWeb---框架SpringMvc+Mybatis开发项目第一季(共三季)
- JavaWeb---框架SpringMvc+Mybatis开发项目第二季(共三季)
- JavaWeb---框架SpringMvc+Mybatis开发项目第三季(共三季)
- JavaWeb框架-SpringMVC-3-异常与静态资源处理
- OpenGL的SetupRC()函数解析
- 015、this关键字
- mongoDB简介
- 绿盟前端笔试题
- NOIP2012开车旅行&疫情控制解题记录
- javaweb框架之springmvc
- 对拍
- 简单的数据可视化,并加入了animation动态效果
- JAVA读取properties配置文件的方法
- 3.使用annotation配置
- Akka使用入门
- startActivity 的启动过程源码分析学习
- Python3:有n个人围成一圈,顺序排号。从第一个人开始报数(从1到3报数),凡报到3的人退出圈子,问最后留下的是原来第几号的那位。
- 分治算法求解kth largest element问题