创建maven项目,处理缺少WEB-INF文件报错springmvc创建后缺少WEB-INF解决 - Lwmm - 博客园 (cnblogs.com)
添加依赖:
<properties> <spring.version>5.2.8.RELEASE</spring.version> </properties> <dependencies> <!-- 此依赖会关联引用Spring中的所有基础jar包 --> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-context</artifactId> <version>${spring.version}</version> </dependency> <!-- spring-webmvc会依赖spring-web --> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-webmvc</artifactId> <version>${spring.version}</version> </dependency> </dependencies>
添加测试控制器
package com.test.spmvc20230208demo; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; //控制器注解 @Controller //请求映射注解 //加在类上代表一级请求路径 @RequestMapping("/test") public class TestController { // 加载方法上代表二级请求路径,默认请求方式为get @RequestMapping("/welcome")
@ResponseBody public String welcome(){ return "welcome use springmvc"; } }
配置spring容器有两种做法
加到WEB-INF:
在WEB-INF创建
下一步=>finish
先进入设计视图
填写公司名
代码:
<!-- 用来扫描控制器上边的注解 -->
<context:component-scan base-package="com.test"></context:component-scan>
<!-- 告诉springmvc容器还要扫描跟web相关的注解,比如@RequestMapping,@ResponseBody -->
<mvc:annotation-driven></mvc:annotation-driven>
配置web.xml
代码:
<servlet> <!-- servlet-name名字要和spmvc20230208demo-servlet.xml的文件名字一样 --> <servlet-name>spmvc20230208demo</servlet-name> <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> </servlet> <servlet-mapping> <!-- 与上边一样 --> <servlet-name>spmvc20230208demo</servlet-name> <!-- 拦截所有路径,只要访问后端都得走配置的前端控制器 --> <url-pattern>/</url-pattern> </servlet-mapping>
启动tomcat后使用 localhost:8080/spmvc20230208demo/test/welcome/访问控制器返回数据
使用Get传参
更新TestController
package com.test.spmvc20230208demo; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.ResponseBody; //控制器注解 @Controller //请求映射注解 //加在类上代表一级请求路径 @RequestMapping("/test") //如果控制器类中所有方法都有返回值,则ResponseBody注解应该加在控制器类开头 @ResponseBody public class TestController { // 加载方法上代表二级请求路径,默认请求方式为get @RequestMapping("/welcome") public String welcome(){ return "welcome use springmvc"; } @GetMapping("/acceptOneArg") public String acceptOneArg(String name){ System.out.println("接收单个参数:"+name); return "sucess"; } }
使用localhost:8080/spmvc20230208demo/test/acceptOneArg?name=aa访问
接收多个参数可以用一个实体类接收...
前端参数名与后端参数名不一致情况用@RequestParam注解
如:
@GetMapping("/acceptOneArg") public String acceptOneArg(@RequestParam("前端变量名") String 后端变量名){ System.out.println("接收单个参数:"+name); return "sucess"; }
使用Post传参
// @RequestMapping(value="/acceptPost",method=RequestMethod.POST)//或者下边写法 @PostMapping("/acceptPost") public String acceptPost(String name){ System.out.println("接收单个参数:"+name); return "sucess"; }
前端传递集合,用post: 前端直接传递JSON(通过axios吧JavaScript对象或集合转换成json),后端需要从请求主体中接收到json字符串,再解析成Java对象或集合
前端传json后端要接收json转换为java对象得加json依赖
<!-- jackson相关依赖 --> <dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-databind</artifactId> <version>2.9.0</version> </dependency>
再前端到后端发送集合时遇见的问题:
1.跨域:后端解决跨域问题 - Lwmm - 博客园 (cnblogs.com)
需要允许前端发送json参数
response.setHeader("Access-Control-Allow-Headers", "*");
2.缺少jackson框架,需要加jackson依赖
整合ssm
添加依赖:log4j+mybatis
<properties>
<!-- spring 版本号 -->
<spring.version>5.2.8.RELEASE</spring.version>
</properties>
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.17</version>
</dependency>
<!-- 日志门面,Spring框架通过日志门面简介调用log4j -->
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
<version>1.7.25</version>
</dependency>
<!--spring对jdbc的支持依赖包(关联spring-tx包) --> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-jdbc</artifactId> <version>${spring.version}</version> </dependency> <!-- mybatis-spring 依赖包 --> <dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis-spring</artifactId> <version>2.0.0</version> </dependency> <!--mybatis 依赖包 --> <dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis</artifactId> <version>3.5.1</version> </dependency> <!-- mysql驱动 依赖包 --> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>5.1.6</version> </dependency>
在src/main/resources下创建db.properties与log4j.properties
db.properties:
jdbc.driver=com.mysql.jdbc.Driver
###配置多个数据库 jdbc.urlA=jdbc:mysql://localhost:3306/数据库名?characterEncoding=utf-8 jdbc.urlB=jdbc:mysql://localhost:3306/数据库名?characterEncoding=utf-8 jdbc.username=root jdbc.password=root
log4j.properties:
### direct log messages to stdout ### log4j.appender.stdout=org.apache.log4j.ConsoleAppender log4j.appender.stdout.Target=System.out log4j.appender.stdout.layout=org.apache.log4j.PatternLayout log4j.appender.stdout.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %m%n ### direct messages to file mylog.log ### ### log4j.appender.file=org.apache.log4j.FileAppender ### log4j.appender.file.File=d:mylog.log ### log4j.appender.file.layout=org.apache.log4j.PatternLayout ### log4j.appender.file.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %m%n ### set log levels - for more verbose logging change 'debug?info?warn?error' ### ### log4j.rootLogger=debug,stdout,file log4j.rootLogger=debug,stdout
往spmvc20230208demo-servlet.xml中加
<!-- 添加spring整合Mybatis内容 --> <context:property-placeholder location="classpath:db.properties" /> <bean class="org.springframework.jdbc.datasource.DriverManagerDataSource" id="ds"> <property name="driverClassName" value="${jdbc.driver}"></property> <property name="url" value="${jdbc.urlA}"></property> <property name="username" value="${jdbc.username}"></property> <property name="password" value="${jdbc.password}"></property> </bean> <bean class="org.mybatis.spring.SqlSessionFactoryBean" id="ssf"> <property name="dataSource" ref="ds"></property> <property name="typeAliasesPackage" value="com.test.po"></property> </bean> <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer"> <property name="sqlSessionFactoryBeanName" value="ssf"></property> <property name="basePackage" value="com.test.dao"></property> </bean> <bean class="org.springframework.jdbc.datasource.DataSourceTransactionManager" id="tx"> <property name="dataSource" ref="ds" /> </bean> <tx:annotation-driven transaction-manager="tx" />
事务管理注解节点报错,没绑定
在Namespaces中选中jdbc、mybatis、tx
保存后就行了
拦截器:
创建com.test.intercetor包,在下边创建SessionCheck.java
创建MyUserController控制器用来测试
在spmvc20230208demo-servlet.xml添加配置
<mvc:interceptors>
<mvc:interceptor>
<!-- mvc:mapping:拦截器要拦截的访问路径 -->
<mvc:mapping path="/**" />
<!-- mvc:exclude-mapping:拦截器要排除的访问路径 -->
<mvc:exclude-mapping path="/myuser/login"/>
<!-- Spring容器中创建的拦截对象 -->
<bean class="com.test.intercetor.SessionCheck"></bean>
</mvc:interceptor>
</mvc:interceptors>
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· winform 绘制太阳,地球,月球 运作规律
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人