# 1. 找相应的 JAR 包:

新建一个 Springmvc 配置文件:Springmvc.xml
选中常用的:beans aop context mvc

# 2.Servlet

Java 类必须符合一定的规范:
a. 必须继承 javax.servlet.http.HttpServlet
b. 重写其中的 doGet () 和 doPost () 方法
Servlet 要想使用,必须配置
Servlet2.5:web.xml
Servlet3.0:@WebServlet

# 步骤:

–编写一个类继承 Servlet
–重写 doPost,doGet 方法
–编写 web.xml 文件中的 Servlet-mapping 的映射关系
还可以新建一个 Servlet,Eclipse 会自动生成相关的配置信息

web.xml 中的 /: http://localhost:8888/Servlet30 代表项目根路径
jap 中的 /: http://localhost:8888 服务器根路径

构建路径,WebContent: 根目录

# Servlet 的生命周期:

加载–初始化 ----------- 服务 ---------- 销毁 ---- 卸载

加载
初始化 init (), 该方法会在 Servlet 被实例化后 执行
服务 Service ()->doGet () ,doPost ()
销毁 destroy (), Servlet 被系统回收时执行
卸载

init()第一次访问 触发只执行一次 可以让 tomcat 启动时自动执行
–tomcat2.: 卸载 xml 文件里 1 1 先后顺序
–toncat3:@WebServlet(value = “/WebcomeServlet”,loadOnStartup = 1)
Service ()->doGet () ,doPost () 调用几次 执行几次
destory () 关闭 tomcat 服务器时会被执行

# 5.Servlet API:

由两个软件包组成:对应与 Http 协议的软件包,对应于除了 HTTP 协议以为 ia 的其他软件包即 Servlet API 可以适用于 任何通信协议
我们学习的 Servlet 时位于 javax.servlet.http.HttpServlet;

# 6.Servlet 继承关系:

ServletConfig (): 接口
getServletContext getServletContext (): 获取 Servlet 上下文对象 application
String getInitParameter (String name) 在当前的 Servlet 范围内,获取名为 name 的参数值(初始化参数)

a.ServletContext 中常见的方法(application):
getContextPath (): 相对路径
getRealPath (): 绝对路径
setAttribute (),getAttribute () String getInitParameter (String name): 在当前 Servlet 范围内,获取名为 name 的参数值(初始化参数)

Servlet3.0 方式 给当前 Servlet 设置初始值:
@WebServlet(…,initParams = {@WebInitParam(name=“servletparament30”,value = “servletpatamentvalues30…”)})
此注解只隶属于 Servlet 因此无法为 web 容器设置初始化参数 要想设置 只能在 web.xml 文件中配置

# 1. 三层架构:

–与 MVC 设计模式的目标一致:都是为了解耦合,提高代码的复用率

表示层(UI):  
            前台:对应于MVC 的 VIEW 用于和用户交互,界面的显示
			WebContent

	        后台:对应于MVC 的 Controller用于控制跳转,调用业务逻辑层
			Servlet ,(Spring MVC 、Struts2)
			xxx.servlet

业务逻辑层(BLL):对应于MVC的Model  逻辑业务模型
	组装数据访问层	,逻辑性的操作(CRUD:删:查+删)
		xxx.service
        
数据访问层(DAL):对应于MVC的Model 数据模型
	直接访问数据库的操作,原子性的操作(CRUD)
		xxx.dao
# 三层的关系:高内聚、低耦合

–上层(表示层):上层依赖下层 持有成员变量,有 A 的前提 是必须现有 B
–下层(业务逻辑层,数据访问层)

三层架构是典型的架构模式,是典型的上下层关系,存在上依赖下层,但是 MVC 不存在上下层的关系,而是相互协作的关系,两者之间没有可比性,是应用于不同领域的技术。

# 三层优化:

–面向接口开发:先开发接口,再实现类

# 让 Spring MVC 访问静态资源,只需要加入两个注解:

<mvc:annotation-driven></mvc:annotation-driven>

<mvc:default-servlet-handler></mvc:default-servlet-handler>

# Tomcat 默认的 Servlet

conf/settings.xml

# Spring MVC 自带类型转换器

<S,T> 两个泛型约束 S 代表 的是源数据类型,T 代表的是泛型约束
1. 将自定义的类型转换器纳入 Spring IOC 容器中
2. 将容器再放入 SpringMVC 提供的 bean 中

@RequestParam ("") 是一个触发器的桥梁,当你修饰的对象和 SpringMVC 发现的对象不一致时他会转换成你需要的对象属性

# 数据格式化的注解

1. 配置你所需要的 Bean
2.@DateTimeFormat(“pattern=“yyyy-MM-dd”) @NumberFormat(pattern=”###,#")

# 数据校验

实现一个 SpringMVC 的一个接口 SpringMVC 会帮你自动搞定
加入这个注解 自动加载一个 LocalValidatoryBean 他是 ValidatoryFactory 的一个实现类
mvc:annotation-driven</mvc:annotation-driven>

# Spring MVC 文件上传处理方法

@RequestMapping(value="testUpload")
public String testUpload(@RequestParam('desc') String desc, @RequestParam('file') String file){
		System.out.println("文件描述信息"+desc);

		InputStream input = file.getInputStream();
		String fileName = file.getOriginalFilename();

		OutStream out = new FileOutStream("d:\\"+fileName);
		
		byte[] bs = new byte[1024];
		int len = -1;

		whiel((len = input.read(bs))!= -1){
			out.write(	bs, 0, len);
		}
}

# 拦截器

1. 编写拦截器 implements HandlerInterceptor
2. 配置:将自己写的拦截器 配置到 SpringMVC 中

拦截器 1 拦截请求 - 拦截器 2 拦截请求 - 请求方法 - 拦截器 2 处理响应 - 拦截器 1 处理响应 只会被最后一个拦截器的 afterComplrtion 渲染

# 异常处理

SpringMVC: HandlerExceptionResolver 接口
该接口的每个实现类 都是异常的一种处理方式
ExceptionHandlerExceptionResolver: 提供了 @ExceptionHandler 注解,并通过该注解处理
// 该方法可以捕获 ArithmeticException 异常

    @ExceptionHandler({ArithmeticException.class})
    public String handlerArithmeticException(ArithmeticException e){
        System.out.println(e);
    }

@ExceptionHandler 标识的方法的参数 必须在异常类型(Throwable 或其子类)

异常处理路径:最短优先
ExceptionHandler 只能捕获当前类中的异常方法
如果是其他类 则可以加一个注解

b.ResponseStatusExceptionResolver 自定义异常显示界面
@ResponseStatus (value="HttpStatus.FORBIDDEN,reason=“数组越界!!”) 类 加上这个注解

@ResponseStatus 也可以标识在方法前

# 总结

如果一个方法用于处理异常, 并且只处理当前类中的异常:@ExceptionHandler
如果一个方法用于处理所有类的异常:类前加 @ControllerAdvice 处理异常的方法前加 @ExceptionHandler

阅读次数

请我喝[咖啡]~( ̄▽ ̄)~*

Zhouy 支付宝

支付宝

Zhouy 宝贝不是paypal

宝贝不是paypal

Zhouy 微信支付

微信支付