SpringWeb
SpringWeb也叫SpringMVC,SpringMVC是基于Java实现的用来接收处理前端发送的HTTP请求的轻量级web框架
m model
v view
c controller
SpringMVC运行流程
SpringMVC是一个基于mvc的web框架方便前后端数据的传输,SpringMVC拥有控制器,接收外部请求,解析参数传给服务层
1、用户向服务器发送请求,DispatcherServlet是SpringWeb的核心,用来接收所有前端发送的请求,统一进行分发调度
2、HandlerMapping根据请求的url进行解析是否存在对应的类地址和方法地址
3、如果存在类地址和方法地址则在返回之前需要判断该方法是否存在过滤器,如果类地址和方法地址不存在则返回null
4、将请求中的数据进行封装处理,将请求消息转换成一个对象,数据转换,数据格式化等
5、将数据交给Handler处理器进行后端处理最终将数据返回给前端,如果后端方法的返回值类型为自定义类型后端可以将处理完后的数据转换为json的形式返回给前端,但是有两个前提:一个是需要导入转json的jar包,第二个是control类需要使用@RestController标签进行注解,标签中有RequestBody为ajax异步请求,将数据写入到响应体中;最后可能会忘记在自定义的对象类中生成Setter和Getter方法
搭建SpringMVC
导入spring-webmvc jar包
<dependency><!--springmvc-->
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>5.2.2.RELEASE</version>
</dependency>
在web.xml文件中注册配置DispatcherServlet
<servlet><!--注册servlet-->
<servlet-name>application</servlet-name><!--给servlet起的名字-->
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name><!--DispatcherServlet中的属性-->
<param-value>classpath:spring.xml</param-value><!--导入到spring.xml文件中-->
</init-param>
<load-on-startup>0</load-on-startup><!--大于-1表示该servlet在服务器启动时就已经创建,默认是在第一次请求该servlet时创建-->
</servlet>
<servlet-mapping>
<servlet-name>application</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
创建springmvc.xml文件并开启springmvc注解
<!--开启springmvc注解-->
<mvc:annotation-driven></mvc:annotation-driven>
控制器类的创建
//@Controller 表示此类是控制层类,spring生成对象,方法返回值默认是jsp的解析方式
@RestController //表示此类是控制层类,里面包含@ResponseBody,为ajax请求,将数据写入到请求体中
@RequestMapping("/admin/control")/*配置类地址,也可使用GetMapping和PostMapping表示是get请求或者post请求*/
public class LoginController {
@Autowired
AdminDao adminDao;
@RequestMapping("/login")/*配置方法地址,也可使用GetMapping和PostMapping表示是get请求或者post请求*/
public Admin login(Admin admin) {
admin.getAccount();
Admin a = adminDao.select(admin.getAccount(),admin.getPassword());
System.out.println("login成功");
return a;
}
}
数据接收
public String login(@RequsetHeader("User-Agent")String userAgent) {//获取请求头中的数据,由于在Java的命名规则中不能出现以-进行命名的形式,所以需要使用@RequestHeader标签将请求头中的数据绑定到指定的自定义的变量中
return "hello";
}
public String login(Admin admin) {//方法中的参数类型也可为自定义的参数类型并且导入json转换的包,spring可以接收识别键值对的形式并将值封装在对象中,也就是在HandlerAdapter中进行对数据的处理
return "hello";
}
public String login(@RequestBody Admin admin) {//也可使用@RequestBody标签注解自定义类型变量,这样前端在向后端传数据时就不需要将json形式转换为String类型的键值对,后端也可将其封装在对象中,也就是在HandlerAdapter中进行对数据的处理
return "hello";
}
public Admin login(Admin admin) {//方法中的返回值如果为自定义对象类型可以直接将对象进行返回而不用做任何处理,但是必须满足两个条件一个是需要导入转json的jar包,第二个是control类需要使用@RestController标签进行注解,标签中有RequestBody为ajax异步请求,将数据写入到响应体中;最后可能会忘记在自定义的对象类中生成Setter和Getter方法
Admin a = new Admin();
return a;
}
拦截器的创建
public class LoginInterceptor implements HandlerInterceptor {//创建一个类并继承HandlerInterceptor方法表示该类为过滤器类,并重写preHandle方法其中request参数表示请求,response参数为响应,handler参数表示为目标处理器,拦截器类是配置在配置文件中的所以不需要添加任何的注解标签
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
System.out.println("进入拦截器");
return true;
}
}
在xml配置文件中注册拦截器
<!--在springmvc中的拦截器只能在配置文件中配置-->
<mvc:interceptors><!--配置拦截器 <mvc:interceptors>标签中可以配置多个拦截器-->
<mvc:interceptor>
<mvc:mapping path="/**"/><!--允许哪些请求 /**表示任意的请求都可以进入到拦截器中-->
<!-- <mvc:exclude-mapping path="/loginCtl/checklogin"/>--><!--不允许哪些请求-->
<bean id="demo" class="com.ffyc.ssm.interceptor.LoginInterceptor"></bean><!--实现HanderInterceptror接口的类表示为拦截器类-->
</mvc:interceptor>
</mvc:interceptors>