LWM

创建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>

 

posted on 2023-02-08 14:46  Lwmm  阅读(96)  评论(0编辑  收藏  举报