• 小菜鸟之SSM框架


      1 # SSM框架
      2 
      3 # **什么是框架**
      4 
      5 就是模板,将一些基础性的程序和代码由框架模板提供,然后程序员补充和业务需求相关的代码。
      6 
      7 # **ssm框架组成**
      8 
      9 s: springMvc 子框架  代替servlet类,control层
     10 
     11 s: spring     框架系列
     12 
     13 ​			基本作用:创建对象(控制反转和依赖注入)
     14 
     15 m: mybatis 框架  代替dao包,和数据库进行交互(jdbc技术),表     		示model层(service包和dao包)
     16 
     17 **补充**
     18 
     19 ​	view层:视图层,还是使用jsp实现
     20 
     21 # **项目演示**
     22 
     23 ## 目标:用户管理项目
     24 
     25 ## 操作步骤:
     26 
     27 ### 1、创建maven项目,并配置tomcat服务器
     28 
     29 **配置tomcat时无artifact选项解决方案**
     30 
     31 <img src="img/1573611676801.png" alt="1573611676801" style="zoom:33%;" />
     32 
     33 
     34 
     35 打开
     36 
     37 <img src="img/1573611734587.png" alt="1573611734587" style="zoom:33%;" />
     38 
     39 选择
     40 
     41 <img src="img/1573611802769.png" alt="1573611802769" style="zoom:33%;" />
     42 
     43 
     44 
     45 ### 2、创建java和resources目录,并mark一下,新建文件夹变色
     46 
     47 ![1573519990356](img/ssm.md)
     48 
     49 java文件夹:存放程序员编写的java代码
     50 
     51 resources文件夹:存放配置文件(和ssm框架相关)
     52 
     53 ### 3、myBatis框架(替代jdbc技术)
     54 
     55 #### 3.1 导入和mybatis相关的依赖(包)
     56 
     57 mybatis
     58 
     59  mybatis-spring
     60 
     61 mysql-connector-java
     62 
     63 ```xml
     64 <!--mybatis-->
     65     <dependency>
     66       <groupId>org.mybatis</groupId>
     67       <artifactId>mybatis</artifactId>
     68       <version>3.5.2</version>
     69     </dependency>
     70     <!--mybatis-spring 二者的整合-->
     71     <dependency>
     72       <groupId>org.mybatis</groupId>
     73       <artifactId>mybatis-spring</artifactId>
     74       <version>2.0.2</version>
     75     </dependency>
     76     <!--mysql-connector-java  用于java程序连接mysql数据库-->
     77     <dependency>
     78       <groupId>mysql</groupId>
     79       <artifactId>mysql-connector-java</artifactId>
     80       <version>8.0.17</version>
     81     </dependency>
     82 ```
     83 
     84 #### 3.2 在resources文件夹中创建文件mybatis-config.xml
     85 
     86 ```xml
     87 <?xml version="1.0" encoding="UTF-8" ?>
     88 <!DOCTYPE configuration
     89         PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
     90         "http://mybatis.org/dtd/mybatis-3-config.dtd">
     91 <configuration>
     92 <!--该文件中可以对mybatis框架进行一些配置设置-->
     93 
     94 </configuration>
     95 ```
     96 
     97 ### 4.spring框架
     98 
     99 #### 4.1添加和spring相关的常用的依赖
    100 
    101 spring-beans
    102 
    103 spring-context/spring-context-support
    104 
    105 spring-core
    106 
    107 spring-expression
    108 
    109 spring-jdbc
    110 
    111 spring-tx
    112 
    113 spring-web
    114 
    115 commons-dbcp
    116 
    117 ```xml
    118 <dependency>
    119       <groupId>org.springframework</groupId>
    120       <artifactId>spring-beans</artifactId>
    121       <version>5.1.8.RELEASE</version>
    122     </dependency>
    123     <dependency>
    124       <groupId>org.springframework</groupId>
    125       <artifactId>spring-context</artifactId>
    126       <version>5.1.8.RELEASE</version>
    127     </dependency>
    128     <dependency>
    129       <groupId>org.springframework</groupId>
    130       <artifactId>spring-context-support</artifactId>
    131       <version>5.0.10.RELEASE</version>
    132     </dependency>
    133     <dependency>
    134       <groupId>org.springframework</groupId>
    135       <artifactId>spring-core</artifactId>
    136       <version>5.1.8.RELEASE</version>
    137     </dependency>
    138     <dependency>
    139       <groupId>org.springframework</groupId>
    140       <artifactId>spring-expression</artifactId>
    141       <version>5.1.8.RELEASE</version>
    142     </dependency>
    143     <dependency>
    144       <groupId>org.springframework</groupId>
    145       <artifactId>spring-jdbc</artifactId>
    146       <version>5.0.10.RELEASE</version>
    147     </dependency>
    148     <dependency>
    149       <groupId>org.springframework</groupId>
    150       <artifactId>spring-tx</artifactId>
    151       <version>5.1.8.RELEASE</version>
    152     </dependency>
    153     <dependency>
    154       <groupId>org.springframework</groupId>
    155       <artifactId>spring-web</artifactId>
    156       <version>5.1.8.RELEASE</version>
    157     </dependency>
    158 
    159     <!--commons-dbcp 用于创建dataSource数据源-->
    160     <dependency>
    161       <groupId>commons-dbcp</groupId>
    162       <artifactId>commons-dbcp</artifactId>
    163       <version>1.4</version>
    164     </dependency>
    165 ```
    166 
    167 
    168 
    169 #### 4.2在resources文件夹创建applicationContext.xml文件,用于对spring框架配置的设置
    170 
    171 ```xml
    172 <?xml version="1.0" encoding="UTF-8"?>
    173 <beans xmlns="http://www.springframework.org/schema/beans"
    174        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    175        xmlns:context="http://www.springframework.org/schema/context"
    176        xsi:schemaLocation="http://www.springframework.org/schema/beans
    177        http://www.springframework.org/schema/beans/spring-beans.xsd
    178        http://www.springframework.org/schema/context
    179        https://www.springframework.org/schema/context/spring-context.xsd">
    180 <!--用于spring框架的配置设置-->
    181 
    182 </beans>
    183 ```
    184 
    185 ### 5.springmvc框架
    186 
    187 #### 5.1添加依赖(jar包)
    188 
    189 spring-mvc
    190 
    191 ```xml
    192     <!--springmvc的依赖-->
    193     <dependency>
    194       <groupId>org.springframework</groupId>
    195       <artifactId>spring-webmvc</artifactId>
    196       <version>5.1.5.RELEASE</version>
    197     </dependency>
    198 ```
    199 
    200 
    201 
    202 #### 5.2在resources目录下创建springmvc-servlet.xml文件,对springmvc进行的配置设置
    203 
    204 ```xml
    205 <?xml version="1.0" encoding="UTF-8"?>
    206 <beans xmlns="http://www.springframework.org/schema/beans"
    207        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    208        xmlns:mvc="http://www.springframework.org/schema/mvc"
    209      xmlns:context="http://www.springframework.org/schema/context"       xsi:schemaLocation="http://www.springframework.org/schema/beans
    210        http://www.springframework.org/schema/beans/spring-beans.xsd
    211        http://www.springframework.org/schema/context
    212        https://www.springframework.org/schema/context/spring-context.xsd http://www.springframework.org/schema/mvc https://www.springframework.org/schema/mvc/spring-mvc.xsd">
    213     <!--该文件用于对springmc框架的配置设置-->
    214 
    215 
    216 </beans>
    217 ```
    218 
    219 #### **注意处理**
    220 
    221 ![1573526006338](img/1573526006338.png)
    222 
    223 
    224 
    225 ### 6.在java目录下创建一些基本的包
    226 
    227 dao  :用于连接数据库
    228 
    229 service:用于进行业务逻辑的处理
    230 
    231 controller:用于对请求的派发和处理
    232 
    233 pojo:将数据库的表名定义为类名,字段定义为属性,此类放在此包中
    234 
    235 interceptor:拦截器包,使用的场景:处理非法登陆。
    236 
    237 util:工具包,存放一些工具类,比如jdbcUtil,分页插件类等等。
    238 
    239 test:测试包,用于测试,junit等进行测试。
    240 
    241 <img src="img/1573526271379.png" alt="1573526271379" style="zoom:33%;" />
    242 
    243 ### 7.pojo中类的创建和编写
    244 
    245 根据数据库中的表创建对应类,好处是通过操作pojo类,来代替操作数据库中的表(对象关系映射orm技术)
    246 
    247 ```java
    248 //表名对应类名
    249 public class User {
    250 
    251     //表字段对应类属性
    252     private int id;
    253     private String username;
    254     private String password;
    255 
    256     public int getId() {
    257         return id;
    258     }
    259 
    260     public void setId(int id) {
    261         this.id = id;
    262     }
    263 
    264     public String getUsername() {
    265         return username;
    266     }
    267 
    268     public void setUsername(String username) {
    269         this.username = username;
    270     }
    271 
    272     public String getPassword() {
    273         return password;
    274     }
    275 
    276     public void setPassword(String password) {
    277         this.password = password;
    278     }
    279 }
    280 
    281 ```
    282 
    283 ### 8、在resources目录下,创建database.properties文件,该文件中编写:driver,url,username,password等连接数据库的参数
    284 
    285 ```xml
    286 driver=com.mysql.jdbc.Driver
    287 url=jdbc:mysql://127.0.0.1:3306/school?useUnicode=true&characterEncoding=utf-8&serverTimezone=UTC
    288 user=root
    289 password=root
    290 ```
    291 
    292 ### 9、进行java应用项目连接数据库
    293 
    294 **在applicationContext.xml文件下**
    295 
    296 ```xml
    297 <!--1 引入database.properties文件-->
    298 <context:property-placeholder location="classpath:database.properties"/>
    299 
    300 <!--2 创建数据源-->
    301     <!--基本数据源(配置数据源)-->
    302     <!-- 配置数据源,核心类:基本数据源BasicDataSource类 -->
    303     <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close" scope="singleton">
    304         <property name="driverClassName" value="${driver}"/>
    305         <property name="url" value="${url}"/>
    306         <property name="username" value="${user}"/>
    307         <property name="password" value="${password}"/>
    308     </bean>
    309 
    310     <!--3 对数据源进行事务管理-->
    311     <bean id="txManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
    312         <property name="dataSource" ref="dataSource"/>
    313     </bean>
    314 
    315     <!--4 配置mybatis核心类SqlSessionFactoryBean,引入数据源,引入mybatis-config.xml-->
    316     <bean id="sqlSessionFactoryBean" class="org.mybatis.spring.SqlSessionFactoryBean">
    317         <property name="dataSource" ref="dataSource"/>
    318         <property name="configLocation" value="classpath:mybatis-config.xml"/>
    319     </bean>
    320 ```
    321 
    322 ### 10、在dao包中创建接口和mapper文件,在spring配置文件中配置
    323 
    324 在mapper文件中编写sql语句
    325 
    326 <img src="img/1573530423150.png" alt="1573530423150" style="zoom:25%;" />
    327 
    328 #### **a 创建接口UserMapper**
    329 
    330 ```java
    331 public interface UserMapper {
    332     //登陆功能
    333     public User login(@Param("xiaomao")String username,@Param("xiaogou")String password);
    334 }
    335 ```
    336 
    337 
    338 
    339 #### **b 创建UserMapper文件**
    340 
    341 ```xml
    342 <?xml version="1.0" encoding="UTF-8" ?>
    343 <!DOCTYPE mapper
    344         PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
    345         "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
    346 <mapper namespace="com.baidu.dao.UserMapper">
    347     <!--namespace 赋值:对应的接口全路径-->
    348         <!--select * from user where username=? and password=?-->
    349     <!--id 填写 对应的接口方法名, resultType 填写接口方法的返回类型-->
    350     <!--登陆方法-->
    351     <select id="login" resultType="com.baidu.pojo.User">
    352         select * from user where username=#{xiaomao} and password=#{xiaogou}
    353     </select>
    354 </mapper>
    355 ```
    356 
    357 #### c 在applicationContext中配置对mapper文件扫描
    358 
    359 ```xml
    360     <!--映射扫描配置器(引入sql映射文件)-->
    361     <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
    362         <property name="basePackage" value="com.baidu.dao"/>
    363     </bean>
    364 ```
    365 
    366 #### d 在pom.xml中<build>内添加
    367 
    368 **将src/main/java目录下的所有*.xml文件编译到class内,不然报错:找不到mapper文件**
    369 
    370 ```xml
    371 <build>
    372       <!--将java目录下的所有*.xml文件编译到class内,不然报错:找不到mapper文件-->
    373     <resources>
    374       <resource>
    375         <directory>src/main/java</directory>
    376         <includes>
    377           <include>**/*.xml</include>
    378         </includes>
    379         <filtering>false</filtering>
    380       </resource>
    381     </resources>
    382 </build>
    383 ```
    384 
    385 
    386 
    387 ### 11、在service包中创建接口和实现类,编写业务逻辑代码
    388 
    389 #### 接口
    390 
    391 ```java
    392 public interface UserService {
    393     //登陆功能
    394     public boolean login(String username,String password);
    395 }
    396 ```
    397 
    398 #### 实现类
    399 
    400 ```java
    401 public class UserServiceImpl implements  UserService {
    402 
    403     @Resource//此时报错,缺少依赖:javax.annotation-api
    404     private UserMapper userMapper=null;
    405 
    406     //登陆方法
    407     public boolean login(String username, String password) {
    408         User user = userMapper.login(username, password);
    409         boolean flag=false;
    410         if(user!=null){//用户存在
    411             flag=true;
    412         }
    413         return flag;
    414     }
    415 }
    416 ```
    417 
    418 #### **补充支持@Resource注解的依赖**
    419 
    420 ```xml
    421     <!--@Resource-->
    422     <dependency>
    423       <groupId>javax.annotation</groupId>
    424       <artifactId>javax.annotation-api</artifactId>
    425       <version>1.3.1</version>
    426     </dependency>
    427 ```
    428 
    429 
    430 
    431 ### 12、在applicationContext.xml文件中对组件进行定义和扫描
    432 
    433 #### **组件扫描**
    434 
    435 ##### a、定义组件
    436 
    437 编写userController类,将@Controller 放在controller包的类上
    438 
    439 ```java
    440 @Controller
    441 public class UserController {
    442    //编写对请求的派发和处理
    443 
    444 }
    445 ```
    446 
    447 @Service  放在service包的实现类上
    448 
    449 ```java
    450 public interface UserService {
    451     //登陆功能
    452     public boolean login(String username,String password);
    453 }
    454 ```
    455 
    456 ```
    457 @Service
    458 public class UserServiceImpl implements  UserService {
    459 
    460     @Autowired//@Resource同一功能
    461     private UserMapper userMapper=null;
    462 
    463     //登陆方法
    464     public boolean login(String username, String password) {
    465         User user = userMapper.login(username, password);
    466         boolean flag=false;
    467         if(user!=null){//用户存在
    468             flag=true;
    469         }
    470         return flag;
    471     }
    472 }
    473 ```
    474 
    475 
    476 
    477 @Repository 放在dao包的实现类上(如果没有实现类,就省略)
    478 
    479 ```java
    480 public interface UserMapper {
    481     //登陆功能
    482     public User login(@Param("xiaomao") String username, @Param("xiaogou") String password);
    483 }
    484 ```
    485 
    486 ##### b、在applicationContext.xml容器中配置,使组件生效
    487 
    488 ```xml
    489 <!--组件浏览-->
    490     <context:component-scan base-package="com.baidu.service"/>
    491     <context:component-scan base-package="com.baidu.dao"/>
    492 
    493     <!--注解配置-->
    494     <context:annotation-config/>
    495 ```
    496 
    497 ##### c、在springmvc-serlvet.xml容器中配置,使组件生效
    498 
    499 ```java
    500 <!-- 支持组件-->
    501     <context:component-scan base-package="com.baidu.controller"/>
    502 ```
    503 
    504 ### 13、配置web.xml文件
    505 
    506 #### a."<web-app>"中添加属性
    507 
    508 ```xml
    509 <web-app
    510         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    511         xmlns="http://java.sun.com/xml/ns/javaee"
    512         xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
    513         id="WebApp_ID" version="3.0">
    514 ```
    515 
    516 #### b、配置监听器
    517 
    518 ```xml
    519   <!-- 配置监听器  -->
    520   <listener>
    521     <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
    522   </listener>
    523 ```
    524 
    525 #### c、引入spring配置文件
    526 
    527 ```xml
    528   <!--引入spring的配置文件,制定文件的位置-->
    529   <context-param>
    530     <param-name>contextConfigLocation</param-name>
    531     <param-value>classpath:applicationContext.xml</param-value>
    532   </context-param>
    533 ```
    534 
    535 #### d、配置DispatcherServlet(类似于“总机调度”)
    536 
    537 ```xml
    538 <!--配置DispatcherServlet-->
    539   <servlet>
    540     <servlet-name>DispatcherServlet</servlet-name>
    541     <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    542     <init-param>
    543       <param-name>contextConfigLocation</param-name>
    544       <param-value>classpath:springmvc-servlet.xml</param-value>
    545     </init-param>
    546     <load-on-startup>1</load-on-startup>
    547   </servlet>
    548   <servlet-mapping>
    549     <servlet-name>DispatcherServlet</servlet-name>
    550     <!--所有的请求都要被拦截,然后进行转发-->
    551     <url-pattern>/</url-pattern>
    552   </servlet-mapping>
    553 ```
    554 
    555 ### 14、配置springmvc-servlet.xml
    556 
    557 #### a、配置对组件@Controller的扫描(上述已经操作)
    558 
    559 ```xml
    560    <!-- 支持组件-->
    561     <context:component-scan base-package="com.baidu.controller"/>
    562 ```
    563 
    564 #### b、支持注解
    565 
    566 (@RequestMapping,@RequestParam等)
    567 
    568 ```xml
    569 <!--支持注解-->
    570 <mvc:annotation-driven/>
    571 ```
    572 
    573 #### c、配置视图解析器
    574 
    575 - /WEB-INF/下创建jsp文件夹
    576 
    577 - 通过逻辑视图名(jsp文件的文件名)找到真实的视图名(jsp文件的全名)
    578 
    579   ​	举例:  真实的视图名 index.jsp 《---逻辑视图名 jsp
    580 
    581   ​	比如: /WEB-INF/jsp/index.jsp
    582 
    583 ```xml
    584 <!--配置视图解析器-->
    585 <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
    586 <property name="prefix" value="/WEB-INF/jsp/"/>
    587 <property name="suffix" value=".jsp"/>
    588 </bean>
    589 ```
    590 
    591 #### d、引入静态资源
    592 
    593 - 在webapp下创建statics文件夹
    594 - 在springmvc-servlet.xml配置文件中添加
    595 
    596 ```xml
    597 <!--引入静态资源--><mvc:resources mapping="/statics/**" location="/statics/"/>
    598 ```
    599 
    600 ### 15、在controller类中创建控制器方法
    601 
    602 ```java
    603 /**
    604  * @author 四两数字先生(CSDN/公众号)
    605  */
    606 @Controller
    607 @RequestMapping("/user")
    608 public class UserController {
    609 
    610     //private UserService userService=new UserServiceImpl();
    611     @Resource  //自动装配
    612     private UserService userService;
    613 
    614     @RequestMapping("/index")
    615     public String index(){
    616         return "index";//index就是逻辑视图名
    617     }
    618     @RequestMapping("/login")
    619     public String login(@RequestParam(value = "xiaogou",required = false) String username,
    620                         @RequestParam(value = "xiaomao",required = false) String password){
    621         boolean flag = this.userService.login(username, password);
    622         if(flag){//用户存在
    623             return "success";
    624              }
    625         return "failure";
    626     }
    627 }
    628 ```
    629 
    630 ### 16、编写jsp文件index.jsp
    631 
    632 a.编写登陆表单
    633 
    634 ```html
    635 <form method="get" action="<%=request.getContextPath() %>/user/login">
    636     用户名:<input type="text" name="xiaogou" value="">
    637     密码:<input type="password" name="xiaomao" value="">
    638     <input type="submit" name="submit" value="登陆">
    639 </form>
    640 ```
    641 
    642 b.添加 sevlet-api依赖
    643 
    644 ```xml
    645     <!--servlet-api-->
    646     <dependency>
    647       <groupId>javax.servlet</groupId>
    648       <artifactId>javax.servlet-api</artifactId>
    649       <version>4.0.1</version>
    650     </dependency>
    651 ```
    652 
    653 b.编写登陆成功页面success.jsp
    654 
    655 ```
    656 <%@ page contentType="text/html;charset=UTF-8" language="java" %>
    657 <html>
    658 <head>
    659     <title>登陆成功</title>
    660 </head>
    661 <body>
    662 <h1>登陆成功</h1>
    663 </body>
    664 </html>
    665 ```
    666 
    667 
    668 
    669 c.编写登陆失败页面failure.jsp
    670 
    671 ```
    672 <%@ page contentType="text/html;charset=UTF-8" language="java" %>
    673 <html>
    674 <head>
    675     <title>登陆失败</title>
    676 </head>
    677 <body>
    678 <h1>登陆失败</h1>
    679 </body>
    680 </html>
    681 ```
    682 
    683 # Spring的两大核心技术
    684 
    685 ## 控制反转/依赖注入
    686 
    687 1、添加依赖
    688 
    689 spring-core
    690 
    691 spring-context
    692 
    693 spring-beans
    694 
    695 spring-expression
    696 
    697 日志依赖
    698 
    699 log4j
    700 
    701 commons-logging
    702 
    703 
    704 
    705 2、编写代码
    706 
    707 验证控制反转/依赖注入
    708 
    709 applicationContext.xml
    710 
    711 ```xml
    712 <?xml version="1.0" encoding="UTF-8"?>
    713 <beans xmlns="http://www.springframework.org/schema/beans"
    714        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    715        xmlns:context="http://www.springframework.org/schema/context"
    716        xsi:schemaLocation="http://www.springframework.org/schema/beans
    717        http://www.springframework.org/schema/beans/spring-beans.xsd
    718        http://www.springframework.org/schema/context
    719        https://www.springframework.org/schema/context/spring-context.xsd">
    720 
    721     <bean id="person1" class="com.baidu.Person">
    722         <property name="name" value="张三"/>
    723     </bean>
    724 
    725 
    726 </beans>
    727 ```
    728 
    729 person.java
    730 
    731 ```java
    732 /**
    733  * @author 四两数字先生(CSDN/公众号)
    734  */
    735 public class Person {
    736     String name;
    737 
    738     public String getName() {
    739         return name;
    740     }
    741 
    742     public void setName(String name) {
    743         this.name = name;
    744     }
    745 
    746     //speak方法
    747     public void speak(){
    748         System.out.println(name+"speak hello world");
    749     }
    750 }
    751 
    752 ```
    753 
    754 MyTest.java
    755 
    756 ```java
    757 /**
    758  * @author 四两数字先生(CSDN/公众号)
    759  */
    760 public class MyTest {
    761 
    762     @Test
    763     public  void test1(){
    764         /**
    765          * 通过代码创建对象
    766          * 通过代码给属性赋值
    767          */
    768         //创建对象
    769         Person person=new Person();
    770         //给属性赋值
    771         person.setName("张三");
    772         //调用speak方法输出
    773         person.speak();
    774 
    775     }
    776 
    777     @Test
    778     public void test2(){
    779         /**
    780          * 通过spring技术之一:控制反转/依赖注入实现来实现
    781          * 1  由spring容器创建对象
    782          * 2  由spring容器给属性赋值
    783          *
    784          * 控制反转/依赖注入:
    785          * 控制权正转:通过java代码创建对象和给属性赋值
    786          * 控制权反转: 将创建对象和给属性赋值的权利反转给spring容器;
    787          * 控制反转就等价于依赖注入
    788          *
    789          */
    790         //调用speak方法输出
    791         //通过spring配置文件,获得对象ApplicationContext
    792         ApplicationContext applicationContext =
    793                 new ClassPathXmlApplicationContext
    794                         ("applicationContext.xml");
    795 
    796         Person person1 = (Person) applicationContext.getBean("person1");
    797 
    798         person1.speak();
    799 
    800     }
    801 }
    802 
    803 ```
    804 
    805 ## 面向切面编程技术
    806 
    807 在编写代码的过程中,有些代码和业务相关(比如增删改查功能),有些代码和业务没有直接关系,但是是必不可少(日志,安全权限等)
    808 
    809 1、添加依赖
    810 
    811 spring-core
    812 
    813 spring-context
    814 
    815 spring-beans
    816 
    817 spring-expression
    818 
    819 **和日志相关**
    820 
    821 commons-logging
    822 
    823 log4j
    824 
    825 **和aop相关**
    826 
    827 spring-aop
    828 
    829 aopalliance
    830 
    831 aspectjweave
    832 
    833 # springMvc
    834 
    835 ## **参数传递(View to Controller)**
    836 
    837 ### **url含参传递(@RequestParam)**
    838 
    839 ```java
    840 @Controller
    841 public class IndexController{
    842 
    843      @RequestMapping(“/welcome”)
    844 
    845      public String index(@RequestParam(value=”username”, required=false)String username){
    846 
    847 
    848 }
    849 
    850 }
    851 ```
    852 
    853 ### **更精确的url含参传递(@RequestMapping)**
    854 
    855 注意:http请求信息不仅不含请求url地址,还包含请求方法/请求参数/请求头
    856 
    857 ```
    858 @RequestMapping(value=”/welcome”, method=RequestMethod.GET, params=”username”)
    859 
    860 public String index(@RequestParam String username){
    861 
    862    logger.info(username);
    863 
    864    return “index”;
    865 
    866 }
    867 ```
    868 
    869 ## **参数传递(Controller to View)**
    870 
    871 ### **ModelAndView实现参数传递**
    872 
    873 ```java
    874 Controller
    875 
    876    @Request Mapping(“/welcome”)
    877 public String index(@RequestParam(value=”username”,required=false) String username){
    878          logger.info();
    879         ModelAndView m=new ModelAndView();
    880          m.addObject(username);
    881          m.setViewName(“index”);
    882          Return m;
    883 }
    884 ```
    885 
    886 index.jsp 获得容器中的参数
    887 
    888 ```html
    889  <h2 >modelAndView(key:default)--->${string}</h2>
    890 ```
    891 
    892 ### **Model实现参数传递**
    893 
    894 需要使用到el表达式需要添加什么?
    895 
    896 web.xml需要修改?
    897 
    898 添加 web-app 后面的属性内容才能支持el表达式
    899 
    900 ```xml
    901 <?xml version="1.0" encoding="UTF-8"?>
    902 
    903 <web-app xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    904 xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
    905 http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
    906 version="3.0">
    907 </web-app>
    908 ```
    909 
    910 Controller层
    911 
    912 ```java
    913   @RequestMapping(“/welcome”)
    914 public String index(@RequestParam String username, Model model){
    915 logger.info();
    916 
    917        //1
    918       model.addAttribute(“username”,username);
    919 
    920        //2
    921         model.addAttribute(username);
    922 
    923        //3
    924        User user= new User();
    925        user.setUserName(username);                  model.addAttribute(“currentUserName”,user);
    926  Return “index”;
    927 
    928 }
    929 ```
    930 
    931 Index.jsp
    932 
    933 ```html
    934 <h1>model(key:username)---->  ${username}</h1>
    935 
    936 <h1>model(key:default)------->  ${string}</h1>
    937 
    938 <h1>model(key:currentUserName)---->${currentUseName.userName}</h1>
    939 ```
    940 
    941 ### **Map实现参数传递**
    942 
    943 Controller
    944 
    945 注意:Map<String,Object> model 必须以形参的方式引入
    946 
    947 ```java
    948 @RequestMapping(“/welcome”)
    949   public String index(@RequestParam(value=”username”)  String username,Map<String,Object> map){
    950 map.put(“username”,username);
    951 return “index”;
    952 }
    953 ```
    954 
    955 # Ajax技术
    956 
    957 1 register.jsp
    958 
    959 ```java
    960 <%@ page contentType="text/html;charset=UTF-8" language="java" %>
    961 <html>
    962 <head>
    963     <title>注册</title>
    964     <script src="statics/js/jquery-3.4.1.js"></script>
    965     <script>
    966         $(document).ready(function () {
    967             $("#name").blur(function () {
    968                 var name=this.value;
    969                 if(name==null || name==""){
    970                     $("#nameDiv").html("用户名不能为空");
    971                 }else {
    972                     $.ajax({
    973 
    974                         "url" :"<%=request.getContextPath()%>/AjaxServlet",//action
    975                         "data":"name1="+name, //含参 &name=lisi
    976                         "type" :"get",//method 请求方式
    977 
    978                         "success":callBack,//返回结果成功,写函数名
    979                         "dataType":"text",//返回的数据类型
    980                         "error": function () {
    981                             alert("返回结果失败");
    982                         }
    983                     });
    984 
    985                     function callBack(data) {//返回的结果
    986                         if(data=="true"){//== 字符串
    987                             $("#nameDiv").html("该用户已被使用");
    988                         }else{
    989                             $("#nameDiv").html("该用户可以使用");
    990                         }
    991                     }
    992                 }
    993             });
    994         });
    995     </script>
    996 </head>
    997 <body>
    998 <form action="" method="">
    999     <%--请求方式
    1000         get  表单中参数会出现url路径中
    1001         post 表单的参数不会出现在url路径中,更加安全
    1002     --%>
    1003     <h1>注册页面</h1>
    1004     姓名:<input type="text" name="username" value="" id="name">
    1005             <div id="nameDiv"></div>
    1006     密码:<input type="password" name="password" value="">
    1007     再次确认密码:<input type="password" name="password" value="">
    1008     <input type="submit" name="register" value="注册">
    1009 </form>
    1010 </body>
    1011 </html>
    1012 ```
    1013 
    1014 2 AjaxServlet.jsp
    1015 
    1016 ```java
    1017 package com.baidu.servlet;
    1018 
    1019 import com.baidu.service.UserService;
    1020 import com.baidu.service.UserServiceImpl;
    1021 
    1022 import javax.servlet.ServletException;
    1023 import javax.servlet.annotation.WebServlet;
    1024 import javax.servlet.http.HttpServlet;
    1025 import javax.servlet.http.HttpServletRequest;
    1026 import javax.servlet.http.HttpServletResponse;
    1027 import java.io.IOException;
    1028 import java.io.PrintWriter;
    1029 
    1030 /**
    1031  * @author 四两数字先生(CSDN/公众号)
    1032  */
    1033 public class AjaxServlet extends HttpServlet {
    1034 
    1035 
    1036     protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    1037         this.doGet(request,response);
    1038     }
    1039 
    1040     protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    1041         //编写代码
    1042         //防止中文乱码
    1043         request.setCharacterEncoding("utf-8");
    1044         String name = request.getParameter("name1");//name是哪里
    1045         boolean  flag=false;
    1046 
    1047         //模拟数据库:假设数据库中存在用户名"admin"
    1048         if(name.equals("admin")){
    1049                 flag=true;//boolean 型返回前端时自动变成字符串"true"
    1050         }
    1051 
    1052         response.setContentType("text/html;charset=utf-8");
    1053         PrintWriter writer = response.getWriter();
    1054         writer.print(flag);//将flag返回给前端
    1055         writer.flush();
    1056         writer.close();
    1057 
    1058     }
    1059 }
    1060 ```
    1061 
    1062 3 web.xml
    1063 
    1064 ```xml
    1065 <!DOCTYPE web-app PUBLIC
    1066  "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
    1067  "http://java.sun.com/dtd/web-app_2_3.dtd" >
    1068 
    1069 <web-app
    1070         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    1071         xmlns="http://java.sun.com/xml/ns/javaee"
    1072         xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
    1073         id="WebApp_ID" version="3.0"
    1074 >
    1075   <display-name>Archetype Created Web Application</display-name>
    1076 
    1077   <servlet>
    1078     <servlet-name>AjaxServlet</servlet-name>
    1079     <servlet-class>com.baidu.servlet.AjaxServlet</servlet-class>
    1080   </servlet>
    1081   <servlet-mapping>
    1082     <servlet-name>AjaxServlet</servlet-name>
    1083     <url-pattern>/AjaxServlet</url-pattern>
    1084   </servlet-mapping>
    1085 
    1086   <servlet>
    1087     <servlet-name>MyServlet</servlet-name>
    1088     <servlet-class>com.baidu.servlet.MyServlet</servlet-class>
    1089   </servlet>
    1090   <servlet-mapping>
    1091     <servlet-name>MyServlet</servlet-name>
    1092     <url-pattern>/MyServlet</url-pattern>
    1093   </servlet-mapping>
    1094 </web-app>
    1095 ```
    1096 
    1097 # Json格式数据
    1098 
    1099 ```html
    1100 <%@ page contentType="text/html;charset=UTF-8" language="java" %>
    1101 <html>
    1102 <head>
    1103     <title>Title</title>
    1104     <script src="statics/js/jquery-3.4.1.js"></script>
    1105     <script>
    1106         $(document).ready(function() {
    1107 
    1108             //1、定义JSON格式的user对象,并在div中输出
    1109             var user = {
    1110                 "id" : 1,
    1111                 "name" : "张三",
    1112                 "pwd" : "000"
    1113             };
    1114             $("#objectDiv").append("ID:" + user.id + "<br>")
    1115                 .append("用户名:" + user.name + "<br>")
    1116                 .append("密码:" + user.pwd + "<br>");
    1117 
    1118             //2、定义JSON格式的字符串数组,在ul中输出
    1119             var ary = [ "中", "美", "俄" ];
    1120             var $ary = $(ary);
    1121             var $ul = $("#arrayUl"); // 展示数据的ul元素
    1122             $ary.each(function() {
    1123                 $ul.append("<li>"+this+"</li>");
    1124             });
    1125 
    1126             //3、定义JSON格式的字符串数组,在select中输出
    1127             var $sel = $("#arraySel"); // 展示数据的select元素
    1128             $ary.each(function(i) {//index 索引
    1129                 /**
    1130                  * <select name=“国籍” id=“arraySel”>
    1131                  *     <option value=1></option>
    1132                  *     <option value=2></option>
    1133                  *     <option value=3></option>
    1134                  * </select>
    1135                  */
    1136                 //"<option value='"+(i+1)+"'>"
    1137                 $sel.append("<option value='"+(i+1)+"'>"+this+"</option>");
    1138             });
    1139 
    1140             //4、定义JSON格式的user对象数组,并使用<table>输出
    1141             var userArray = [ {
    1142                 "id" : 2,
    1143                 "name" : "admin",
    1144                 "pwd" : "123"
    1145             }, {
    1146                 "id" : 3,
    1147                 "name" : "詹姆斯",
    1148                 "pwd" : "11111"
    1149             }, {
    1150                 "id" : 4,
    1151                 "name" : "梅西",
    1152                 "pwd" : "6666"
    1153             } ];
    1154             /**<div id="objectArrayDiv">
    1155              * <table border='1'>
    1156              *     <tr><td>ID</td><td>用户名</td><td>密码</td></tr>
    1157              *     <tr><td>2</td><td>admin</td><td>123</td></tr>
    1158              *     <tr><td>3</td><td>詹姆斯</td><td>11111</td></tr>
    1159              *     <tr><td>4</td><td>梅西</td><td>666</td></tr>
    1160              *  </table>
    1161              *  <div>
    1162              *   我是中国人我爱中国我爱人民人民爱我
    1163              */
    1164             var $table = $("<table border='1'></table>").append(
    1165                 "<tr><td>ID</td><td>用户名</td><td>密码</td></tr>");
    1166             $(userArray).each(function() {
    1167                 $table.append("<tr><td>" + this.id + "</td><td>"
    1168                     + this.name + "</td><td>"
    1169                     + this.pwd + "</td></tr>");
    1170             });
    1171             $("#objectArrayDiv").append($table);
    1172 
    1173         });
    1174     </script>
    1175 </head>
    1176 <body>
    1177     <%--div中呈现普通对象--%>
    1178     <div id="objectDiv"></div>
    1179     <%--无序列表形式呈现数组--%>
    1180     <div>
    1181         <ul id="arrayUl">
    1182 
    1183         </ul>
    1184     </div>
    1185     <%--下拉列表形式呈现数组--%>
    1186     <div>
    1187         <select id="arraySel"></select>
    1188     </div>
    1189     <%--表格形式呈现对象数组--%>
    1190     <div id="objectArrayDiv">
    1191 
    1192     </div>
    1193 </body>
    1194 </html>
    1195 ```
    1196 
    1197 # SpringMVC参数传递
    1198 
    1199 ```java
    1200 @Controller
    1201 @RequestMapping("/user")
    1202 public class UserController {
    1203 
    1204     //private UserService userService=new UserServiceImpl();
    1205     @Resource  //自动装配
    1206     private UserService userService;
    1207 
    1208     //无参数的url :localhost:8080/项目名/user/index
    1209     @RequestMapping("/index")
    1210     public String index(){
    1211         return "index";//index就是逻辑视图名
    1212     }
    1213     //含参的url:localhost:8080/项目名/user/login?xiaogou=lisi&xiaomao=lisi
    1214     @RequestMapping(value = "/login")
    1215     public String login(@RequestParam(value = "xiaogou",required = false) String username,
    1216                         @RequestParam(value = "xiaomao",required = false) String password){
    1217         boolean flag = this.userService.login(username, password);
    1218         if(flag){//用户存在
    1219             return "success";
    1220              }
    1221         return "failure";
    1222     }
    1223     //含参的url:localhost:8080/项目名/login?xiaogou=lisi&xiaomao=lisi
    1224     //更精确的含参url:method = RequestMethod.POST
    1225     @RequestMapping(value = "/login1" ,method = RequestMethod.POST)
    1226     public String login1(@RequestParam(value = "xiaogou",required = false) String username,
    1227                          @RequestParam(value = "xiaomao",required = false) String password){
    1228         boolean flag = this.userService.login(username, password);
    1229         if(flag){//用户存在
    1230             return "success";
    1231         }
    1232         return "failure";
    1233     }
    1234 
    1235     //Controller层传递到View
    1236     //1 ModelAndView 作为返回对象
    1237     @RequestMapping("/index1")
    1238     public ModelAndView index1(){
    1239         User user = new User();
    1240         user.setId(1);
    1241         user.setUsername("zhangsan");
    1242         user.setPassword("123456");
    1243 
    1244         ModelAndView modelAndView = new ModelAndView();
    1245         //存放数据
    1246         modelAndView.addObject("user",user);//key-value
    1247         //设置逻辑视图名
    1248         modelAndView.setViewName("nankeyuan");
    1249         return modelAndView;
    1250     }
    1251 
    1252 //Model 作为一个容器,保存数据
    1253     @RequestMapping("/index2")
    1254     public String index2(Model model){
    1255         model.addAttribute("str","hello model");
    1256         //字符串类型 --key:string
    1257         model.addAttribute("hello model2");
    1258         return "nankeyuan";
    1259     }
    1260 
    1261     //Map作为容器,保存数据
    1262     @RequestMapping("/index3")
    1263     public String index3(Map<String,Object> map){
    1264         map.put("mapStr","map demo");
    1265         return "nankeyuan";
    1266     }
    1267 }
    1268 
    1269 ```
    1270 
    1271 # 字符乱码过滤器
    1272 
    1273 web.xml
    1274 
    1275 ```
    1276 <filter>
    1277     <filter-name>characterFilter</filter-name>
    1278     <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
    1279     <!-- 设置过滤器中的属性值 -->
    1280     <init-param>
    1281       <param-name>encoding</param-name>
    1282       <param-value>UTF-8</param-value>
    1283     </init-param>
    1284     <!-- 启动过滤器 -->
    1285     <init-param>
    1286       <param-name>forceEncoding</param-name>
    1287       <param-value>true</param-value>
    1288     </init-param>
    1289   </filter>
    1290   <filter-mapping>
    1291     <filter-name>characterFilter</filter-name>
    1292     <!--表示项目名下的所有url都被拦截过滤-->
    1293     <url-pattern>/*</url-pattern>
    1294   </filter-mapping>
    1295 
    1296 ```
    1297 
    1298 ## Restful风格路径
    1299 
    1300 ```java
    1301     //url中含参传递  restful风格路径
    1302     //localhost:8080/userPro-ssm/user/index6/lisi   等价(?username=lisi)
    1303     @RequestMapping("/index6/{username}")
    1304     public String index6(@PathVariable(name = "username") String username){
    1305         System.out.println("用户名为"+username);
    1306         return "nankeyuan";
    1307     }
    1308 ```
    1309 
    1310 
  • 相关阅读:
    poj 1789 每个字符串不同的字母数代表两个结点间的权值 (MST)
    poj 1251 poj 1258 hdu 1863 poj 1287 poj 2421 hdu 1233 最小生成树模板题
    poj 1631 最多能有多少条不交叉的线 最大非降子序列 (LIS)
    hdu 5256 最少修改多少个数 能使原数列严格递增 (LIS)
    hdu 1025 上面n个点与下面n个点对应连线 求最多能连有多少条不相交的线 (LIS)
    Gym 100512F Funny Game (博弈+数论)
    UVa 12714 Two Points Revisited (水题,计算几何)
    UVa 12717 Fiasco (BFS模拟)
    UVa 12718 Dromicpalin Substrings (暴力)
    UVa 12716 && UVaLive 6657 GCD XOR (数论)
  • 原文地址:https://www.cnblogs.com/czg-0705/p/11895476.html
Copyright © 2020-2023  润新知