一 :
=====================================================================================================================================================
(一) 框架搭建
第一步: 导入依赖
第二步: 书写主配置文件 web.xml springmvc.xml
第三步: 启动Tomcat测试
--------------------------------------------------------
mvc层 专注控制层 规范在java先建立 controller 包
--------------------------------------------------------
1/ 建立jsp 测试
题外话: 虚拟路径--为什么可以找到对应的页面?-->过滤器:DispatcherServlet --->核心控制器(负责派发到相应的数据处理器) ==Servlet
2/ 配置web.xml
a/---------------------------------------------------
--> 这里配置完成了springmvc的核心类配置 :springmvc还需配置 核心配置文件
--> DispatcherServlet 有三个参数 这里主要是 contextConfigLocation 用来指定上下文配置
--> 如果控制跳转的xml的配置文件在WEB-INF下,并且命名规范遵循 [servletName]-servlet.xml ,则可以不用配置contextConfigLocation属性
--------配置contextConfigLocation及其.xml文件 保证容器启动时加载;
____________________________________________________________________________________________________________________________________________
<servlet>
<servlet-name>spr_mvc</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:spr_mvc-servlet.xml</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>spr_mvc</servlet-name>
<url-pattern>/</url-pattern> ------------>这里不要写/*,这是一种错误的url写法
</servlet-mapping>
______________________________________________________________________________________________________________________________________
3/ 配置spr_mvc-servlet.xml springMVC上下文核心配置文件 (通俗的将就是控制跳转的文件 ,即 我们所提到的Servlet )
a/----------------------------------------------------
--->导入所需要的头文件 包括mvc context 等 所需要的
--->开启注解扫描 指定到需要扫描的包
----| <context:component-scan base-package="cn.xsh.controller"></context:component-scan>
--->开启springMVC特有的注解驱动
----| <mvc:annotation-driven/>
4/视图解析器 ---将url分成前缀和后缀
____________________________________________________________________________________________________
<!--视图解析器 视图解析器只对转发有用,对重定向无效.-->
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix" value="/"></property>
<property name="suffix" value=".jsp"></property>
</bean>
____________________________________________________________________________________________________
至此完成简单的springMVC的基础建设 !!!!!!!!!!
=====================================================================================================================================================
(二) 主要注解笔记
1/ @Controller
标注在类的上边后,该类转化为Servlet的实现类, 这个注解的优势在于 标注后不需要再像Servlet那样去继承父类 ,同时不需要再web.xml中配置相关的参数等
2/@RequestMapping ------ (注意: 如果在传入对象的时候,前端的标签命名应遵守和实体类属性命名一直,保证顺利传值)------
参数--------------值:及其作用
value ---------> 虚拟路径的值,如果用{}包起来后,其值可以是多个,值和值之间用逗号隔开,值用双引号包起来
-->这个位置最好是不带任何尾缀,这样当修改web.xml的Servlet中pattern时 可以是*.任意, 这样访问的时候可以通过拼接..便于日后修改程序
method ---------> 提交的方式:有get和post
3/@Scope 默认是singleton 这个注解是用来修饰类的
但是项目是发布到Tomcat上,一般会创建一个多例的模式 @Scope("prototype")
因为如果是单例的话,当涉及到两个以上的多用户访问的时候,只有等第一个用户访问完毕后后续用户才可使用,影响用户体验和工作,而多
例的时候多用户访问创建多个对象,用户之间使用互不干扰,当然涉及到的高并发此处未做相关查询.....
4/@RequestParam(name="",defaultValue = "" ,required = true) 当前台属性和类属性不一致的时候 做处理 空值的时候可以获取默认值
参数 值:及其作用
name 前台传过来的数据的Key
defaulValue 默认值
required true/false true的时候是该参数必须传入,未传入则返回异常
====================================================================================================================================================
( 三 ) 视图的重定向和转发
1/ 在方法return的地方 ---> return "forward : 视图名 "; 转发 适用于处理业务逻辑 前端url不变
2/ 在方法return的地方 ---> return "redirect: 视图名 "; 重定向 适用于表单提交 防止重复提交 url会改变
相对应传统的Servlet重定向需要加工程名,在springmvc中直接省略
===================================================================================================================================================
( 四 ) 中文乱码解决
1/配置一个过滤器
2/在web.xml中引用已经写好的类,通过spring的ioc/di依赖注入编码类型 === 其优点是软编码 可以动态更改编码类型
<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>
================================================================================================================================================
( 五 ) 数据的传输 如何传输到页面 这里记录三种方式
1/通过Request 方法参数里引入HttpServletRequest
2/通过Model addAttribute(key,value) 放入值 默认存储在Request域中
3/通过Map spring将map这种形式的数据放到了Request的域中
================================================================================================================================================
( 六 ) 统一异常处理 ( public class Exception extends Throwable 源码显示 异常的祖宗是 Throwable 其两个子类[error,exception])
[题外话:对于异常,从接触java异常开始,一般遇到项目第一想法便是抛出,那么如下:
dao --->抛出到service层 [注:如果这里不处理,500错误,有些异常捕获后,404错误]
service调用dao,有异常抛出 ====> 到了controller层 异常的终点 ,这里必须对异常进行处理]
通过注解 : @ExceptionHandler(Exception.class)
对于全局异常的处理我们也可以提取出来放在一个公共的包里 对各种异常进行处理,从而达到代码更加干净简洁,便于管理.使用下面这个注解
@ControllerAdvice // 标注在类的上面
public class Ex {
@ExceptionHandler(Exception.class)
public String test1(){
return "error";
}
}
对于异常的处理,全局的异常处理里面,精确的异常要优先于更大范围的异常处理方式,通过精确度的大小,jvm会自动进行选择,做出对异常的处理方式.
===============================================================================================================================================