news 2026/8/16 17:28:49

[ SpringWeb ] 搭建和配置

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
[ 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----> spring

s: strust----> springweb

m: mybatis----> mybatis

停止官方下载的相关配置,之后配置华为云下载更快,删掉mov 和 jsp文件,然后用Maven刷新一下

(1). pom.xml 导入jar文件

<!--jackson 把java对象转为json字符串组件--> <dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-databind</artifactId> <version>2.14.2</version> </dependency><!--spring web模块依赖 Maven会自动将spring核心依赖下载下来--> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-webmvc</artifactId> <version>5.2.2.RELEASE</version> </dependency><dependency> <groupId>javax.servlet</groupId> <artifactId>javax.servlet-api</artifactId> <version>4.0.1</version> <scope>provided</scope> </dependency> <dependency> <groupId>org.junit.jupiter</groupId> <artifactId>junit-jupiter-api</artifactId> <version>${junit.version}</version> <scope>test</scope> </dependency> <dependency> <groupId>org.junit.jupiter</groupId> <artifactId>junit-jupiter-engine</artifactId> <version>${junit.version}</version> <scope>test</scope> </dependency>

(2). 在 web.xml 文件中配置 DispatcherServlet

<!--配置: 注册spring中核心的DispatcherServlet-->
<servlet>
<servlet-name>application</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:spring.xml</param-value><!--服务器启动时,读取spring配置文件,启动spring框架-->
</init-param>
<load-on-startup>0</load-on-startup>
</servlet>

<!-- 请求映射 -->
<servlet-mapping>
<servlet-name>application</servlet-name>
<url-pattern>/</url-pattern><!--/ 所有的前端请求都会到达DispatcherServlet 相当于过滤器-->
</servlet-mapping>

(3). 在resources下创建spring .xml文件,并在spring .xml中 配置核心

<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context" xmlns:mvc="http://www.springframework.org/schema/mvc" xsi:schemaLocation="http://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-package="org.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 class="org.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-->
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.13.3</version>
</dependency>

@RequestBody 可以接收前端提交的 json 格式数据,将 json 格式封装到对象中.

@RequestMapping("/save")

public voidsave(@RequestBodyAdminadmin){

}

2. model 层

注意: 日期类型转换

属性类型为 Date 类型需要指定转换格式

@DateTimeFormat(pattern = "yyyy-MM-dd")

private Date birthday

package 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(value="prototype") public class Admin { private int id ; private String account; private String password; @DateTimeFormat(pattern ="yyyy-MM-dd") @JsonFormat(pattern = "yyyy-MM-dd",timezone = "GMT+8") 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("service"+admin); } }
4. dao 层(此处省略)

(5) 拦截器

1. 配置拦截器
<!--配置拦截器--> <mvc:interceptors> <mvc:interceptor> <mvc:mapping path="/**"/><!--配置所有请求进入这个拦截器--> <mvc:exclude-mapping path="/api/loginCtl/login"/><!--配置不进入拦截器的请求地址--> <bean class="org.example.ssm.interceptor.TokenInterceptor"/><!--配置拦截器的实现类--> </mvc:interceptor> </mvc:interceptors>
2. 拦截器实现类
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;charset=utf-8"); response.getWriter().write(401); return false;//不继续向后执行 } } }

注意:

过滤器 是在请求进入servelet之前

拦截器 是在请求进入到自定义处理器时进行拦截 (如上述流程图所示)

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/8/16 17:24:51

再论勾股定理成立的条件-8

现在让我们集中注意力&#xff0c;考虑质数。根据先前的描述&#xff0c;质数有两个来源&#xff0c;一个是当前层次上单位1的多次后继运算&#xff0c;另一个是从更低层次&#xff08;也可能是更高层次&#xff09;发出的投射。前者的单位是&#xff0c;而后者的单位为。我们知…

作者头像 李华
网站建设 2026/8/16 17:20:11

1242条!中国第二部法典今日实施,这些变化和每个人息息相关

从今天起&#xff0c;我们的绿水青山有了更坚实的法治屏障。今天&#xff08;8月15日&#xff09;&#xff0c;一个值得被记住的日子。继《民法典》之后&#xff0c;我国第二部以"法典"命名的法律——《中华人民共和国生态环境法典》正式施行。16万多字&#xff0c;5…

作者头像 李华
网站建设 2026/8/16 17:17:40

DeepSeek Harness 安装教程

DeepSeek Harness 安装教程 官方仓库&#xff1a;https://github.com/deepseek-ai/deepseek-harness 快速命令&#xff1a;npx deepseek-ai/dsh web 默认访问地址&#xff1a;http://127.0.0.1:3080 DeepSeek Harness&#xff08;简称 DSH&#xff09;是 DeepSeek AI 开源的 Ag…

作者头像 李华