57.java基础——零基础入门之SpringMVC

本文介绍了SpringMVC的基础知识,包括MVC框架的原理、Servlet技术的问题和SpringMVC如何解决这些问题。详细讲解了SpringMVC的入门案例、页面参数封装、特殊类型参数封装、视图解析器的使用,以及RESTful架构设计风格和@PathVariable的运用。通过实例展示了SpringMVC如何简化JavaEE开发,提高效率。
摘要由CSDN通过智能技术生成

SpringMVC介绍


介绍
Spring 框架提供了构建 Web 应用程序的全功能 MVC 模块。从而在使用Spring进行WEB开发时,可以选择使用Spring的SpringMVC框架来开发。

MVC的概念
MVC是一种分层的设计思想,Model-View-Controller 模型-视图-控制器。

在这里插入图片描述
这种框架模式,体现了分层的设计理念,好处就是:第一,利于团队分工,每个人专注于某一个层的开发。第二,便于工程项目管理。第三,降低层与层之间的依赖。

目前常见的MVC框架:
1.Struts2
2.SpringMVC
在这里插入图片描述
最经典的MVC分层架构是:
jsp+servlet+javabean

但是这种经典的MVC架构也存在一定的问题和局限性,主要是体现在servlet上。所以后来在技术的发展过程中,出现了很多MVC框架,比如Struts1,webwork,Struts2,SpringMVC等。这些MVC框架目的都是帮助程序员更快速地开发JavaEE程序。

Servlet技术存在的问题
1.不适合大型项目的开发,配置一个Servlet至少要在web.xml里配置8行,200个—1600行,造成维护和修改的难度相当大,不适合团队开发,如果不协调好,非常容易出现冲突。
2.request.getParamter(“参数名”),造成代码繁琐,request.getParameter()=参数值(String),得进行类型的转换
3.public class HomeServlet extends HttpServlet{

doGet(res,req){

Request.getParameter()=参数值
if(参数值=add)执行增加的方法;
If(……=delete)执行删除的方法;

}

}
比如做增删改查4个业务操作的话,要么建4个servlet,要么doGet()写4个方法
4.Servlet是一个有严重的容器依赖性类,主要体现在单元测试上,意味着每调试一次,就要启动一次服务器,拉长调试周期。

代码重构思路

Public class UserController{
   
 
Public void userLogin(){
   
 
}
 
Public void userRegister(){
   
 
}
 
}

用户发送请求——http://localhost:8080/项目名/login 就执行 userLogin()的方法
http://localhost:8080/项目名/register 就执行userRegister()的方法

SpringMVC整体架构图
在这里插入图片描述

入门案例


案例说明:
用户发送一个请求,http://localhost:8080/项目名/login.action 就是执行
Controller类里的userLogin()方法
开发步骤:
1.创建一个web工程
2.引入SpringMVC依赖的jar包
3.在web.xml里配置SpringMVC的核心入口类,DispatcherServlet
4.开发控制层Controller
5.建立核心配置文件,配置注解驱动,配置包扫描
6.项目的部署和测试
知识点:
1.依赖的jar包

com.springsource.javax.validation-1.0.0.GA.jar
com.springsource.org.apache.commons.logging-1.1.1.jar
commons-fileupload-1.2.2.jar
commons-io-2.0.1.jar
hibernate-validator-4.1.0.Final.jar
jackson-core-asl-1.9.13.jar
jackson-mapper-asl-1.9.13.jar
jstl-api-1.2.jar
jstl-impl-1.2.jar
log4j.jar
slf4j-api-1.5.8.jar
slf4j-log4j12.jar
spring-aop-3.2.2.jar
spring-aspects-3.2.2.jar
spring-beans-3.2.2.jar
spring-context-3.2.2.jar
spring-context-support-3.2.2.jar
spring-core-3.2.2.jar
spring-expression-3.2.2.jar
spring-web-3.2.2.jar
spring-webmvc-3.2.2.jar
standard-1.1.2.jar

2.核心入口类DistpacherServlet的继承树结构:
HttpServlet——HttpServletBean——FrameworkServlet——DispathcerSerlvet
3.核心配置文件的规范:
命名规范:在web.xml里配置的Servlet的名字±servlet.xml 本例中 smvc-servlet.xml
存放位置:WEB-INF目录下
4.核心配置文件里的内容:
需要配置注解驱动,使得注解生效,

 <!-- 配置注解驱动 -->                                      
 <mvc:annotation-driven></mvc:annotation-driven>
 

知识点:
<mvc:annotation-driven /> 会自动注册DefaultAnnotationHandlerMapping与AnnotationMethodHandlerAdapter 两个bean,是spring MVC为@Controllers分发请求所必须的。
并提供了:数据绑定支持,@NumberFormatannotation支持,@DateTimeFormat支持,@Valid支持,读写XML的支持(JAXB),读写JSON的支持(Jackson)。

通过配置包扫面的方式,在加载Controller的bean,这样更通用,更简单,只需要配置一次就可以。

 <!-- 配置Controller的bean,通过宝扫描的方式来配-->
  <context:component-scan base-package="/controller"></context:component-scan> 

5.用的注解
@Controller的作用:标识当前类是Controller类,并且在容器进行包扫描的时候,让当前类进行bean的加载
@RequsetMapping(请求路径)作用:把请求路径和执行方法建立映射关系,这样用户在输入相应的访问路径时,就直接调用对应的方法。

页面参数封装


需求说明:建一个用户注册页面,提交用户名、年龄、生日信息,然后提交到后台Controller,进行参数解析

如何拿到HttpServletRequset对象?
遇到的第一个问题,但是针对目前的结构,没有HttpRequest对象了,那怎么拿参数啊?而且没有Requset对象,请求的URI也拿不到了。怎么解决呢?

public class UserController {
   
 
 
@RequestMapping("/login.action")
public void userLogin(){
   
 
System.out.println("用户登录");
}
 
@RequestMapping("/register.action")
public void userRegister(){
   
System.out.println("用户注册");
}
}

解决办法:在被调用的方法形参里,声明HttpServletRequest对象即可

如何取得页面参数
当参数多的时候,还是得多次调用request.getParameter()方法,SpringMVC是怎么解决呢?
要啥参数,就在被调用的方法里,写什么参数
@RequestMapping("/register.action")
public void userRegister(String name,int age){
System.out.println(name+":"+age);
}
post提交的中文乱码解决
在web.xml里配置:

<!-- 中文乱码过滤器 -->
<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>        

思考:SpringMVC能设计成这种效果,要什么,就在方法的形参里写什么,然后就有什么,比如HttpServletRequest对象,比如页面的参数。这样给编程人员带来什么好处呢?有什么重要意义呢?
1.参数的获取变得非常简单,不用调用任何方法,就能拿到参数,代码少了,更爽了。大大提高了开发效率。
2.对参数或对象的控制粒度很细,想要什么,就有什么,不用的通通没有,比如HttpServletRequest对象,我不要就没有
3.参数的共享范围是方法级别的,即方法之间的参数值互不影响,参数只被当前被调用的方法所独享。

特殊

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值