java---springmvc
来源:互联网 发布:区域增长算法示意图 编辑:程序博客网 时间:2024/06/05 11:31
体验springmvc
Springweb mvc替换struts框架的,springmvc侧地将struts替换掉了。
Spring框架是业务层框架,核心组件是容器
它是管理bean的,广义上讲任何一个java类都是一个Bean,它都可以管理,
例如:实例化对象
两大概念:
IoC(Inversion of Control) 反转控制,
DI(Dependency injection) 依赖注入,动态向某个对象提供它所需要的对象
获得对象的一种方式
AOP(Aspect Oriented Programming) 面向切面编程,也叫面向方面编程
Struts2工作流程
Spring mvc框架
l Dispatcher Servlet分发器
l Handler Mapping 处理器映射
l Controller 控制器
l ModelAndView
l ViewResolver 视图解析器
Spring-framework v3.2.2
Spring-framework下载地址:
http://www.springsource.org/spring-framework
Spring mvc开发步骤
- 新建web project
1、新建工程,编码为UTF-8,否则中文乱码。用jdk1.6以上版本编译。
- 创建jsp文件
2、创建jsp文件 WEB-INF/jsps/index.jsp
<%@ pagelanguage="java" pageEncoding="UTF-8"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTDHTML 4.01 Transitional//EN">
<html>
<head>
<title>index.jsp</title>
</head>
<body style="background-color:black;">
<div style="padding:250px 0px 0px500px;color:white;font-size:24px;font-family:Impact;">
This is my JSP page. <span style="color:red;">springMVC</span> <br>
</div>
</body>
</html>
- 需求
访问index.jsp
/WEB-INF/jsps/index.jsp
在浏览器地址栏敲入:
http://localhost:8090/springmvc/home.action
- 引入jar包
4、引入spring3.2.2 的jar包( 9个核心包2个依赖包)
l spring-aop-3.2.2.jar 面向切片编程
l spring-aspects-3.2.2.jar 提供对AspectJ的支持,以便可以方便的将面向方面的功能集成进IDE中
l spring-beans-3.2.2.jar 核心。访问配置文件、创建和管理bean 以及进行IoC/DI操作相关的所有类。
l spring-context-3.2.2.jar为Spring 核心提供了大量扩展。
l spring-context-support-3.2.2.jar
l spring-core-3.2.2.jar Spring 框架基本的核心工具类。外部依赖CommonsLogging 。
l spring-expression-3.2.2.jar 配置对象的注入,它便是SpEL(Spring Expression Language)
l spring-web-3.2.2.jar Web 应用开发时,用到Spring 框架时所需的核心类
l spring-webmvc-3.2.2.jar Spring MVC 框架相关的所有类。包括框架的Servlets,Web MVC框架,控制器和视图支持。
l 注意spring3.0的包名是 org.spingframework.web.servlet-3.1.0RELEASE.jar
l com.springsource.org.apache.commons.logging-1.1.1.jar 日志
l com.springsource.org.aopalliance-1.0.0.jar AOP联盟的API包,里面包含了针对面向切面的接口。
- 配置分发器 DispatcherServlet
在web.xml中配置 分发器Servlet
<servlet>
<servlet-name>action</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>action</servlet-name>
<url-pattern>*.action</url-pattern>
</servlet-mapping>
- 创建控制器类 HomeController
package cn.itcast.springmvc.controller;
importjavax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
importorg.springframework.web.servlet.ModelAndView;
importorg.springframework.web.servlet.mvc.AbstractController;
public class HomeController extendsAbstractController {
protectedModelAndView handleRequestInternal(HttpServletRequest request,
System.out.println(request.getContextPath()+ request.getServletPath()); HttpServletResponseresponse) throws Exception {
returnnew ModelAndView("index");
}
}
- 配置beans //访问路径:prefix + logicName + suffix
配置beans,创建spring配置文件 /WEB-INF/action-servlet.xml
<?xml version="1.0"encoding="UTF-8"?>
<beansxmlns="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">
</beans>
<!--控制器 -->
<beanname="/home.action"class="cn.itcast.springmvc.controller.HomeController"/>
<!--内部资源视图解析器-->
<beanid="internalResourceViewResolver"class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<propertyname="prefix" value="/WEB-INF/jsps/"/> <!-- 前缀 -->
<propertyname="suffix" value=".jsp"/> <!-- 后缀 -->
</bean>
- 发布、测试
犯错:为什么名称叫做action-servlet.xml?
web.xml中声明的名称要和创建的文件名一致
修改一下web.xml中,将action改为smvc,重新启动tomcat,看会如何?
HTTP Status 500 -
--------------------------------------------------------------------------------
type Exception report
javax.servlet.ServletException:Servlet.init() for servlet smvc threw exception
root cause
org.springframework.beans.factory.BeanDefinitionStoreException:IOException parsing XML document from ServletContext resource [/WEB-INF/smvc-servlet.xml];nested exception is java.io.FileNotFoundException: Could not openServletContext resource [/WEB-INF/smvc-servlet.xml]
技术要点:修改action-servlet.xml文件名和位置?
l 移动action-servlet.xml到src目录下,改名为spring-mvc.xml
l 修改web.xml,给DispatcherServlet增加初始参数
<servlet>
<servlet-name>action</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>
1. handlerMapping
常用的处理器映射
1、BeanNameUrl处理器映射
默认处理方式
<!-- Bean名url处理器映射 -->
<beanid="beanNameUrlHandlerMapping"
class="org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping">
</bean>
<!-- 控制器 -->
<bean id="homeController"name="/hi.action"class="cn.itcast.springmvc.controller.HomeController"></bean>
http://localhost:8090/springmvc/hi.action
2、简单url处理器映射
<!-- Bean名url处理器映射 -->
<bean id="beanNameUrlHandlerMapping"class="org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping">
</bean>
<bean id="simpleUrlHandlerMapping"class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">
<propertyname="mappings">
<props>
<propkey="/sh.action">homeController</prop>
<propkey="/a.action">homeController</prop>
<propkey="/b.action">homeController</prop>
</props>
</property>
</bean>
<!-- 控制器 -->
<bean id="homeController"class="cn.itcast.springmvc.controller.HomeController"></bean>
Spring-beans-3.0.xsd 不支持id命名中有/
3.2xsd已经支持
技术要点:同名时谁起作用呢,是BeanName还是Simple呢?
<!-- Bean名url处理器映射 -->
<bean id="beanNameUrlHandlerMapping"class="org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping">
</bean>
<bean id="simpleUrlHandlerMapping"class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">
<property name="mappings">
<props>
<prop key="/sh.action">homeController</prop>
<prop key="/a.action">homeController</prop>
<prop key="/b.action">homeController</prop>
<prop key="/hi.action">homeController</prop>
</props>
</property>
</bean>
<!-- 控制器 -->
<bean id="homeController" name=“/hi.action”class="cn.itcast.springmvc.controller.HomeController"></bean>
注意:
1、默认顺序按xml配置的前后
DispatcherServlet.java 源代码p1086行,决定谁起作用
for (HandlerMapping hm :this.handlerMappings) {
}
2、按order属性排序
DispatcherServlet.java 源代码p533行,
OrderComparator.sort(this.handlerMappings);
3、p548 排序后的顺序
<!-- Bean名url处理器映射 -->
<bean id="beanNameUrlHandlerMapping"class="org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping">
<property name="order"value="0"/>
</bean>
<bean id="simpleUrlHandlerMapping"class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">
<propertyname="mappings">
<props>
<propkey="/hi.action">homeController</prop>
</props>
</property>
<!--设置优先级,数字越小优先级越高-->
<propertyname="order" value="1"/>
</bean>
<!-- 控制器 -->
<bean id="homeController" name=“/hi.action”class="cn.itcast.springmvc.controller.HomeController"></bean>
spring-webmvc-3.2.2.jar
DispatcherServlect.class 源码 行533
initHandlerMappings
3、控制器类名处理器映射
<!-- 控制器类名处理器映射 -->
<beanid="controllerClassNameHandlerMapping"
class="org.springframework.web.servlet.mvc.support.ControllerClassNameHandlerMapping">
<property name="order" value="2"/>
</bean>
原理:在容器启动时处理
在源码中下面的地方配置断点ControllerClassNameHandlerMapping.class p139
String path =(className.endsWith(CONTROLLER_SUFFIX) ?
className.substring(0,className.lastIndexOf(CONTROLLER_SUFFIX)) : className);
规则:得到类名HomeControlller,将Controller去掉,剩下的全部小写。如多个单词也全小写
qhttp://localhost:8090/x_springmvc/home.action
http://localhost:8090/x_springmvc/homeController.action
2. controller
常见的处理Controller
1、CommandController命令控制器
将参数封装在
Command Object对象中
创建javabean,绑定数据
packagecn.itcast.springmvc.domain;
public classPerson {
private Integerid;
privateString name;
privateInteger age;
…
publicString toString() {
return"Person [id=" + id + ", name=" + name + ", age="+ age + " ]";
}
}
public class PersonCommandControllerextends AbstractCommandController {
publicPersonCommandController(){
//注册命令类
this.setCommandClass(Person.class);
this.setCommandName("person");
}
protectedModelAndView handle(HttpServletRequest request,
HttpServletResponseresponse, Object command, BindException errors)
throwsException {
Personp = (Person) command;
System.out.println(p.toString());
returnnew ModelAndView("index");
}<!--命令控制器 -->
<bean id=“personCommandController"class="cn.itcast.springmvc.controller.PersonCommandController">
</bean>
http://localhost:8090/springmvc/personcommand.action
Console 控制台输出:
l Person [id=null, name=null, age=null ]
http://localhost:8090/springmvc/personcommand.action?id=1&name=tony&age=29
l Person [id=1, name=tony, age=29 ]
2、SimpleFormController简单表单控制器
public class PersonFormController extendsSimpleFormController {
//注册命令对象
publicPersonFormController() {
this.setCommandClass(Person.class);
this.setCommandName("person");
}
protectedvoid doSubmitAction(Object command) throws Exception {
Personp = (Person) command;
System.out.println(p.toString());
}
}
spring-mvc.xml
<!-- 表单控制器(处理表单提交) -->
<beanid="personFormController" class="cn.itcast.springmvc.web.controller.PersonFormController">
<!-- 表单视图 -->
<property name="formView"value=“jPersonCreate"/>
<!-- 成功视图 -->
<propertyname="successView" value="index"/>
</bean>
4 springMvc注解入门
5 列表功能实现
4 修改新增删除功能实现
5 上传图片校验
9 整合hibernate
Spring源码
Application.xml
<?xmlversion="1.0" encoding="utf-8"?>
<beansxmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:tx="http://www.springframework.org/schema/tx"
xsi:schemaLocation="http://www.springframework.org/schema/beanshttp://www.springframework.org/schema/beans/spring-beans-2.5.xsd
http://www.springframework.org/schema/contexthttp://www.springframework.org/schema/context/spring-context-2.5.xsd
http://www.springframework.org/schema/txhttp://www.springframework.org/schema/tx/spring-tx-2.5.xsd">
</beans>
ApplicaionContextUtil 单态的application加载类
package com.util;
importorg.springframework.context.ApplicationContext;
importorg.springframework.context.support.ClassPathXmlApplicationContext;
final publicclass ApplicaionContextUtil {
private static ApplicationContextac=null;
private ApplicaionContextUtil(){
}
static{
ac=newClassPathXmlApplicationContext("applicationContext.xml");
}
public static ApplicationContextgetApplicationContext(){
return ac;
}
}
- java---springmvc
- java重修 SpringMVC入门
- java springmvc查询列表
- java-maven-SpringMVC框架
- 个人学习-java-springmvc
- Java、Springmvc+mybatis+bootstrap
- Java笔记--SpringMVC--@RequestMapping
- springMVC构建java web
- FullCalendar结合java springMVC
- 搭建SpringMVC (Java配置)
- java接口 (springmvc)
- [Java springMVC] Restf…
- [Java springMVC] Restf…
- 【Java学习20170524】SpringMVC
- Java---SpringMVC注解
- java springMVC 上传文件
- Java-SpringMVC事务提交
- 【Java】SpringMVC整合Quartz
- Excel Sheet Column Number
- 习题2—6
- NDK学习(4) 给cocos加入lua
- HDOJ 1003 Max Sum(新手动态规划)
- 又一个岔路口,选择——随“心”而为
- java---springmvc
- 数据结构的一些知识
- 索引
- Android面试题
- 学习笔记-JDBC与JDK新特性
- Java中Vector和ArrayList的区别
- c#调用c的dll原理理解
- C++成员变量初始化顺序
- Linux学习笔记(vim使用命令)