ARTICLE DETAIL

建站实战干货

来自一线的建站与推广经验沉淀,每一条都经过真实交付验证。

[ SpringWeb ] 搭建和配置

2026/8/16 17:28:53 拓冰建站 浏览量
[ SpringWeb ] 搭建和配置 目录一. 概述(1). 问题引出:(2). 定义:(3). 特点:(4). 运行流程:(5). 组件二. SpringWeb的搭建(1). pom.xml 导入jar文件(2). 在 web.xml 文件中配置 DispatcherServlet(3). 在resources下创建spring .xml文件,并在spring .xml中 配置核心(4)接受参数和响应数据1. controller 层2. model 层3. service 层4. dao 层(此处省略)(5) 拦截器1. 配置拦截器2. 拦截器实现类一. 概述(1).问题引出:之前JavaEE 开发中,web层使用的是原生的servlet(弊端:类中只提供doget和dopost方法 ; 接收参数很麻烦 (req.getparameter) ; 响应数据麻烦 ,Java对象要转为json类型)spring中的web模块就可以解决以上存在的问题(2). 定义:SpringWeb 是 spring 框架中的一个模块基于 Servlet API 构建的 web 框架.springWeb 是 专门用于开发web 应用层. 核心主要包含请求映射、控制器、参数绑定、异常处理等几个方面(3). 特点: SpringWEB 是 spring 家族原生产品与 IOC 容器等基础设施无缝对接. 基于Servlet,提供了一个前端控制器 DispatcherServlet ,开发者无须额外开发控制器对象. 可以自动绑定用户输入并正确地转换数据类型. 代码清新简洁大幅度提升开发效率. 内部组件化程度高可插拔式组件即插即用. 性能卓著尤其适合现代大型、超大型互联网项目要求(4). 运行流程:(5). 组件1. 前端控制器DispatcherServlet不需要程序员开发,由框架提供, 在web.xml 中配置。作用统一处理请求和响应整个流程控制的中心由它调用其它组件处理用户的请求.2. 处理器映射器HandlerMapping(不需要程序员开发),由框架提供。作用根据请求的 url 查找 Handler(处理器/Controller)3. 处理器适配器HandlerAdapter(不需要程序员开发),由框架提供。作用按照特定规则HandlerAdapter 要求的规则去执行 Handler。4. 处理器Handler(也称之为 Controller需要工程师开发)作用接受用户请求信息调用业务方法处理请求也称之为后端控制器注意编写 Handler 时按照 HandlerAdapter 的要求去做这样适配器才可以去正确执行Handler二. SpringWeb的搭建搭建著名的ssm框架(原来-----现在)s: spring---- springs: strust---- springwebm: mybatis---- mybatis停止官方下载的相关配置,之后配置华为云下载更快,删掉mov 和 jsp文件,然后用Maven刷新一下(1). pom.xml 导入jar文件!--jackson 把java对象转为json字符串组件-- dependency groupIdcom.fasterxml.jackson.core/groupId artifactIdjackson-databind/artifactId version2.14.2/version /dependency!--spring web模块依赖 Maven会自动将spring核心依赖下载下来-- dependency groupIdorg.springframework/groupId artifactIdspring-webmvc/artifactId version5.2.2.RELEASE/version /dependencydependency groupIdjavax.servlet/groupId artifactIdjavax.servlet-api/artifactId version4.0.1/version scopeprovided/scope /dependency dependency groupIdorg.junit.jupiter/groupId artifactIdjunit-jupiter-api/artifactId version${junit.version}/version scopetest/scope /dependency dependency groupIdorg.junit.jupiter/groupId artifactIdjunit-jupiter-engine/artifactId version${junit.version}/version scopetest/scope /dependency(2). 在 web.xml 文件中配置 DispatcherServlet!--配置: 注册spring中核心的DispatcherServlet--servletservlet-nameapplication/servlet-nameservlet-classorg.springframework.web.servlet.DispatcherServlet/servlet-classinit-paramparam-namecontextConfigLocation/param-nameparam-valueclasspath:spring.xml/param-value!--服务器启动时,读取spring配置文件,启动spring框架--/init-paramload-on-startup0/load-on-startup/servlet!-- 请求映射 --servlet-mappingservlet-nameapplication/servlet-nameurl-pattern//url-pattern!--/ 所有的前端请求都会到达DispatcherServlet 相当于过滤器--/servlet-mapping(3). 在resources下创建spring .xml文件,并在spring .xml中 配置核心?xml version1.0 encodingUTF-8? beans xmlnshttp://www.springframework.org/schema/beans xmlns:xsihttp://www.w3.org/2001/XMLSchema-instance xmlns:contexthttp://www.springframework.org/schema/context xmlns:mvchttp://www.springframework.org/schema/mvc xsi:schemaLocationhttp://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context https://www.springframework.org/schema/context/spring-context.xsd http://www.springframework.org/schema/mvc https://www.springframework.org/schema/mvc/spring-mvc.xsd !-- 配置spring对哪个包下的类进行扫描 -- context:component-scan base-packageorg.example.ssm/context:component-scan !--开启spring web模块的注解-- mvc:annotation-driven/ !--配置拦截器-- mvc:interceptors mvc:interceptor mvc:mapping path/**/!--配置所有请求进入这个拦截器-- mvc:exclude-mapping path/api/loginCtl/login/!--配置不进入拦截器的请求地址-- bean classorg.example.ssm.interceptor.TokenInterceptor/!--配置拦截器的实现类-- /mvc:interceptor /mvc:interceptors /beans(4)接受参数和响应数据1. controller 层四种方法package org.example.ssm.web; import org.example.ssm.model.Admin; import org.example.ssm.model.Result; import org.example.ssm.service.LoginService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.*; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; // Controller处理器(hander) 自定义控制器 RestController//为web层添加注解标签 让spring扫描到 RequestMapping(path/api/loginCtl)//映射 为类和方法配置映射的访问地址,类地址在项目中不能重复 public class LoginController { Autowired private LoginService loginService; /* 方式4: 后端接收前端提交的json格式的数据 1.项目中需要添加json转换的组件 2.在对象前添加 RequestBody 注解 * */ PostMapping(path /login) public Result login(RequestBody Admin admin){ System.out.println(admin); loginService.login(admin); Result result new Result(200,登陆成功,admin); return result; } GetMapping (path/test) public String test(){ System.out.println(test); return suc; } //RequestMapping 为方法定义地址时,可以指定请求的方式,方法的地址 在同一个类中不能重复 /* RequestMapping(path/login,method RequestMethod.POST)// method RequestMethod.POST指定请求方式 :只运行发送post请求*/ //GetMapping(path /login) /*PostMapping(path /login) //方式一: 使用HttpServletRequest对象接收请求中的数据 public String login(HttpServletRequest request){ System.out.println(request.getParameter(name)); System.out.println(request.getHeader(token)); System.out.println(request.getRemoteAddr()); return success; }*/ /* //方式二: PostMapping(path /login) public String login(String account,String password,RequestHeader(token) String token){ // String token的值无法拿到,需要使用RequestHeader(token)将token的值赋给String token System.out.println(account); System.out.println(password); System.out.println(token); return success; }*/ /* //方式三: PostMapping(path /login) public String login(RequestParam(user-account) String account, RequestParam(user-password)String password, RequestHeader(user-token) String token){ // String token的值无法拿到,需要使用RequestHeader(token)将token的值赋给String token System.out.println(account); System.out.println(password); System.out.println(token); return success; }*/ }方法四: 用实体类对象接收添加json转换组件!--jackson--dependencygroupIdcom.fasterxml.jackson.core/groupIdartifactIdjackson-databind/artifactIdversion2.13.3/version/dependencyRequestBody 可以接收前端提交的 json 格式数据,将 json 格式封装到对象中.RequestMapping(/save)public voidsave(RequestBodyAdminadmin){}2. model 层注意: 日期类型转换属性类型为 Date 类型需要指定转换格式DateTimeFormat(pattern yyyy-MM-dd)private Date birthdaypackage org.example.ssm.model; import com.fasterxml.jackson.annotation.JsonFormat; import org.springframework.context.annotation.Scope; import org.springframework.format.annotation.DateTimeFormat; import org.springframework.stereotype.Component; import java.util.Date; Component Scope(valueprototype) public class Admin { private int id ; private String account; private String password; DateTimeFormat(pattern yyyy-MM-dd) JsonFormat(pattern yyyy-MM-dd,timezone GMT8) private Date birthday;//数据会自动格式转换 private int age; Override public String toString() { return Admin{ id id , account account \ , password password \ , birthday birthday , age age }; } public Date getBirthday() { return birthday; } public void setBirthday(Date birthday) { this.birthday birthday; } public int getAge() { return age; } public void setAge(int age) { this.age age; } public int getId() { return id; } public void setId(int id) { this.id id; } public String getAccount() { return account; } public void setAccount(String account) { this.account account; } public String getPassword() { return password; } public void setPassword(String password) { this.password password; } }package org.example.ssm.model; public class Result { private int code;//响应的状态码 自己程序中定义的状态码 private String message;//消息 private Object data; //数据 //创建有参的构造方法 public Result(int code, String message, Object data) { this.code code; this.message message; this.data data; } public int getCode() { return code; } public void setCode(int code) { this.code code; } public String getMessage() { return message; } public void setMessage(String message) { this.message message; } public Object getData() { return data; } public void setData(Object data) { this.data data; } }3. service 层package org.example.ssm.service; import org.example.ssm.model.Admin; import org.springframework.stereotype.Service; Service public class LoginService { public void login(Admin admin){ System.out.println(serviceadmin); } }4. dao 层(此处省略)(5) 拦截器1. 配置拦截器!--配置拦截器-- mvc:interceptors mvc:interceptor mvc:mapping path/**/!--配置所有请求进入这个拦截器-- mvc:exclude-mapping path/api/loginCtl/login/!--配置不进入拦截器的请求地址-- bean classorg.example.ssm.interceptor.TokenInterceptor/!--配置拦截器的实现类-- /mvc:interceptor /mvc:interceptors2. 拦截器实现类package org.example.ssm.interceptor; import org.springframework.web.servlet.HandlerInterceptor; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; //拦截器 public class TokenInterceptor implements HandlerInterceptor { Override public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { String token request.getHeader(token); System.out.println(token 认证拦截器:token); if(token.equals(123456)){//认证token return true;//离开拦截器,继续向后到达自定义处理器 }else { response.setContentType(text/html;charsetutf-8); response.getWriter().write(401); return false;//不继续向后执行 } } }注意:过滤器 是在请求进入servelet之前拦截器 是在请求进入到自定义处理器时进行拦截 (如上述流程图所示)