创建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>
浙公网安备 33010602011771号