摸爬滚打-由原始servlet过渡到SSM整合(无maven)

2024-01-08 00:32

本文主要是介绍摸爬滚打-由原始servlet过渡到SSM整合(无maven),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

因为刚学完SSM,有点生疏,想要通过写教程来加强理解,也方便以后复习,该教程如果有错,请指正

整合过程

    • SSM是什么?
    • SSM整合准备步骤
        • 整合环境
        • 准备jar包
        • 工程目录
        • 准备配置文件
          • mybatis-config.mxl
          • applicationContext.mxl
          • springmvc.xml
          • db.properties
          • log4j.properties
          • web.xml
    • SSM测试
      • mybatis测试
        • 准备jar包
        • 准备mybatis配置文件
        • 创建文件
          • AccountSeller.java
          • AccountSeller.xml
          • AccountSellerMapper.java
        • 测试CRUD
          • 结果
            • 增加
            • 查询所有
            • 查询单个
            • 修改
            • 删除
      • springmv
        • 准备相关配置文件
          • 创建文件
            • AccountSellerController.java
            • index.jsp
            • list.jsp
          • 测试能否正常访问
        • spring整合springmvc和mybatis
          • 创建文件
            • AccountSellerController.java
            • AccountSellerService.java
            • AccountSellerMapper.java(不需要更改)
            • index.jsp(不需要更改)
            • list.jsp
            • 测试能否查询到数据库中的账号
    • 结语

SSM是什么?

在整合之前我们先了解一下SSM是什么,能干什么。

SSM(Spring+SpringMVC+MyBatis)框架集由Spring、MyBatis两个开源框架整合而成(SpringMVC是Spring中的部分内容)。常作为数据源较简单的web项目的框架。

  1. Spring:就像是整个项目中装配bean的大工厂,在配置文件中可以指定使用特定的参数去调用实体类的构造方法来实例化对象。也可以称之为项目中的粘合剂。Spring的核心思想是IoC(控制反转),即不再需要程序员去显式地new一个对象,而是让Spring框架帮你来完成这一切。
  2. SpringMVC:在项目中拦截用户请求,它的核心Servlet即DispatcherServlet承担中介或是前台这样的职责,将用户请求通过HandlerMapping去匹配Controller,Controller就是具体对应请求所执行的操作。SpringMVC相当于SSH框架中struts。
  3. mybatis:是对jdbc的封装,它让数据库底层操作变的透明。mybatis的操作都是围绕一个sqlSessionFactory实例展开的。mybatis通过配置文件关联到各实体类的Mapper文件,Mapper文件中配置了每个类对数据库所需进行的sql语句映射。在每次与数据库交互时,通过sqlSessionFactory拿到一个sqlSession,再执行sql命令。
  4. Java Web程序分三层架构,分别是视图层、业务层、持久层,SSM中的Spring对应着业务层,SpringMVC对应视图层,Mybatis对应持久层。

以上是百度百科对SSM的介绍,小白刚学的时候看得是一头雾水,但是随着后面的深入学习之后有了自己的一点点理解。

  • Spring:在学习Spring之前,service层需要对数据库操作的事务管理,原始版本需要对service层中的方法进行对事务的提交、回滚、异常操作,需要用到动态代理或其他方法,工作量大、可维护性较差,而Spring的AOP就解决了这些问题,让小白可以快速完成service层的开发,还可以把service层中可以使用单例设计模式的对象交给Spring来管理(IOC)。
  • SpringMVC:springmvc相当于servlet,但是springmvc只被一个servlet管理,可以把对服务器的访问请求给拦截下来,再到controller层中相应的方法(每个方法都绑定着一个地址,请求url=绑定的地址就会调用),springmvc只管接收请求和响应请求,其他事它可不管。
  • Mybatis:与Hibernate一样都是持久层的框架,但是Mybatis的优势在于可以自由编写sql,在想要通过sql优化数据库运行效率的时候,Mybatis可以让擅长数据库的大牛玩出花来。还有就是用Mybatis使用xml来管理的,所以只需要把大部分精力放在xml文件上,不需要花太多的精力在其他方面上。

SSM整合准备步骤

整合环境

spring5.2.2 + mybatis 3.5.2

准备jar包

SSM整合需要的jar包
不需要积分的SSM整合包下载链接(已包含测试需要的jar包):SSM整合包

工程目录

工程目录

工程目录

包名作用
com.ssm.controller对应着原始web写法中的servlet,也是springmvc发挥作用的包
com.ssm.service业务层,存放着业务逻辑的类
com.ssm.dao持久层,存放着mapper接口(用于使用mapper代理)和对应的xml文件
com.ssm.entity存放实体类的包
conf存放配置文件的文件夹
准备配置文件

创建配置文件

mybatis-config.mxl
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN""http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration></configuration>
applicationContext.mxl
<?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:tx="http://www.springframework.org/schema/tx"xmlns:aop="http://www.springframework.org/schema/aop"xmlns:jdbc="http://www.springframework.org/schema/jdbc"xmlns:context="http://www.springframework.org/schema/context"xmlns:mybatis="http://mybatis.org/schema/mybatis-spring"xsi:schemaLocation="http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsdhttp://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsdhttp://www.springframework.org/schema/jdbc http://www.springframework.org/schema/jdbc/spring-jdbc.xsdhttp://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx.xsdhttp://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop.xsdhttp://mybatis.org/schema/mybatis-spring http://mybatis.org/schema/mybatis-spring.xsd"><!-- 配置spring --><!-- 扫描service --><context:component-scan base-package="com.ssm"><!-- 过滤掉springmvc的注解,否则会对controller包中的类加载两次 --><context:exclude-filter type="annotation" expression="org.springframework.stereotype.Controller"/></context:component-scan><!-- 创建事务管理器 --><bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager"><property name="dataSource" ref="dataSource"></property></bean><!-- 通知 --><tx:advice id="txAdvice" transaction-manager="transactionManager"><tx:attributes><!-- 设置传播行为 --><tx:method name="update*" propagation="REQUIRED"/><tx:method name="select*" propagation="SUPPORTS" read-only="true"/></tx:attributes></tx:advice><!-- 配置aop --><aop:config><aop:advisor advice-ref="txAdvice" pointcut="execution (* com.ssm.service.*.*(..))"/></aop:config><!-- spring整合mybatis --><!-- 引入properties文件 --><context:property-placeholder location="classpath:db.properties"/><!-- 配置连接池 --><bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource"><property name="driverClass" value="${jdbc.driver}"></property><property name="jdbcUrl" value="${jdbc.url}"></property><property name="user" value="${jdbc.username}"></property><property name="password" value="${jdbc.password}"></property><!-- c3p0连接池的私有属性 --><property name="maxPoolSize" value="30" /><property name="minPoolSize" value="10" /><!-- 关闭连接后不自动commit --><property name="autoCommitOnClose" value="false" /><!-- 获取连接超时时间 --><property name="checkoutTimeout" value="10000" /><!-- 当获取连接失败重试次数 --><property name="acquireRetryAttempts" value="2" /></bean><!-- 配置SqlSessionFactory工厂对象 --><bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean"><!-- 注入连接池 --><property name="dataSource" ref="dataSource"></property><!-- 使用mybatis核心配置文件 --><property name="configLocation" value="classpath:mybatis-config.xml"></property><!-- 使用别名 --><property name="typeAliasesPackage" value="com.ssm.entity"></property></bean><!-- 配置mapper扫描包,创建mapper代理对象 --><bean id="mapperScanner" class="org.mybatis.spring.mapper.MapperScannerConfigurer"><property name="basePackage" value="com.ssm.dao"></property></bean>
</beans>
springmvc.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/beanshttp://www.springframework.org/schema/beans/spring-beans.xsdhttp://www.springframework.org/schema/contexthttp://www.springframework.org/schema/context/spring-context.xsdhttp://www.springframework.org/schema/mvchttp://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd"><!-- 在web.xml中配置前端控制器 --><!-- 开启springmvc注解支持,创建处理器映射器和处理器适配器 --><mvc:annotation-driven /><!-- 静态资源配置 --><mvc:default-servlet-handler/><!-- 配置视图解析器 --><bean id="internalResourceViewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver"><property name="viewClass" value="org.springframework.web.servlet.view.JstlView" /><property name="prefix" value="/WEB-INF/jsp/" /><property name="suffix" value=".jsp" /></bean><!-- 配置springmvc需要扫描的controller --><context:component-scan base-package="com.ssm.controller"/>
</beans>
db.properties
jdbc.driver=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/ssmintergration?useUnicode/=true&characterEncoding/=utf-8&useSSL=false
jdbc.username=root
jdbc.password=
log4j.properties
# Rules reminder:
# DEBUG < INFO < WARN < ERROR < FATAL# Global logging configuration
log4j.rootLogger=DEBUG, stdout# My logging configuration...
log4j.logger.org.mybatis.jpetstore=TRACE
log4j.logger.org.mybatis.spring=TRACE## Console output...
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%r [%t] %-5p %c %x - %m%n
web.xml
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"><display-name></display-name><!-- 解决中文乱码 --><filter><filter-name>CharacterEncodingFilter</filter-name><filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class><init-param><param-name>encoding</param-name><param-value>UTF-8</param-value></init-param><init-param><param-name>forceRequestEncoding</param-name><param-value>true</param-value></init-param><init-param><param-name>forceResponseEncoding</param-name><param-value>true</param-value></init-param></filter><filter-mapping><filter-name>CharacterEncodingFilter</filter-name><url-pattern>/*</url-pattern></filter-mapping><!-- 配置spring文件信息 --><context-param><param-name>contextConfigLocation</param-name><param-value>classpath:applicationContext.xml</param-value></context-param><!-- 让服务器启动时加载spring容器,需要用到监听器来加载spring文件 --><listener><listener-class>org.springframework.web.context.ContextLoaderListener</listener-class></listener><!-- 配置前端控制器 --><servlet><servlet-name>dispatcherServlet</servlet-name><servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class><!-- 加载springmvc配置文件 --><init-param><param-name>contextConfigLocation</param-name><param-value>classpath:springmvc.xml</param-value></init-param></servlet><servlet-mapping><servlet-name>dispatcherServlet</servlet-name><url-pattern>/</url-pattern></servlet-mapping><welcome-file-list><welcome-file>index.jsp</welcome-file></welcome-file-list>
</web-app>

SSM整合完成

如果整合中有错误的地方,求大神指点指点。希望该整合可以帮到从原始web过渡到SSM的你,后面会持续更新整合测试。

SSM测试

在进行SSM整合测试需要先保证springmvc和mybatis都能独立运行,然后再通过spring进行整合。

mybatis测试

下面我准备创建一个商家的数据库来进行CURD测试。

CREATE DATABASE ssmintergration
CREATE TABLE `account_seller` (`seller_id` int(11) NOT NULL AUTO_INCREMENT,`seller_account` varchar(255) DEFAULT NULL,`seller_password` varchar(255) DEFAULT NULL,`last_time_login` datetime DEFAULT NULL,`logon_date` datetime DEFAULT NULL,`is_enable` tinyint(1) DEFAULT NULL,PRIMARY KEY (`seller_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
准备jar包

jar包
将该jar包添加到 /WEB-INF/lib 里面。

准备mybatis配置文件

这里我不使用逆向工程,有助于锻炼开发能力。以下我准备用我平常开发时会用到的思路来写(让每件事的逻辑看起来都可以连上)。

创建文件

工程文件

首先需要mybatis的必备文件,mapper映射文件mapper接口
在这之前需要先准备与数据库的表一致的 实体类

AccountSeller.java
package com.ssm.entity;import java.util.Date;public class AccountSeller {private Integer sellerId;private String sellerAccount;private String sellerPassword;private Date lastTimeLogin;private Date logonDate;private Boolean isEnable;public Integer getSellerId() {return sellerId;}public void setSellerId(Integer sellerId) {this.sellerId = sellerId;}public String getSellerAccount() {return sellerAccount;}public void setSellerAccount(String sellerAccount) {this.sellerAccount = sellerAccount == null ? null : sellerAccount.trim();}public String getSellerPassword() {return sellerPassword;}public void setSellerPassword(String sellerPassword) {this.sellerPassword = sellerPassword == null ? null : sellerPassword.trim();}public Date getLastTimeLogin() {return lastTimeLogin;}public void setLastTimeLogin(Date lastTimeLogin) {this.lastTimeLogin = lastTimeLogin;}public Date getLogonDate() {return logonDate;}public void setLogonDate(Date logonDate) {this.logonDate = logonDate;}public Boolean getIsEnable() {return isEnable;public void setIsEnable(Boolean isEnable) {this.isEnable = isEnable;}
}

写好了实体类,随后是准备mybatis的必备文件,mapper映射文件mapper接口。书写顺序看个人喜好。

这里提一下使用mapper代理对象的开发规范:

  1. mapper.xml 中的 namespace 等于 mapper接口 地址(全限定类名)。
  2. mapper接口 中的方法名要和 mapper.xml 中的 statementid 一致。
  3. mapper接口 中的参数要是 mapper.xml 中的 parameterType 指定的类型一致。
  4. mapper接口 中的方法返回值要和 mapper.xml 中的 resultType 指定类型一致。
AccountSeller.xml

因为实体类的属性采用的是驼峰命名,所以和数据库中的字段不一致,需要使用resultMap来进行高级映射。

在这提一下 resultMap 的使用场景:

  • 如果查询出来的 字段名pojo的属性名 不一致,就要通过定义一个 resultMap 来对 列名pojo属性名 之间作一个映射关系。具体写法请看代码。
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.ssm.dao.AccountSellerMapper"><!-- 配置高级映射关系 --><resultMap type="com.ssm.entity.AccountSeller" id="BaseResultMap"><!-- id:表示查询结果集中的唯一标识column:表示查询结果集中的字段名property:表示要映射到type指定的pojo中的属性名 最终resultMap会对column和property作映射关系(对应关系) --><id column="seller_id" property="sellerId" /><result column="seller_account"  property="sellerAccount" /><result column="seller_password"  property="sellerPassword" /><result column="last_time_login" property="lastTimeLogin" /><result column="logon_date" property="logonDate" /><result column="is_enable" property="isEnable" /></resultMap><!-- CRUD --><!-- 编写底层封装对象mapped statement:insert,无返回值 --><insert id="insert" parameterType="com.ssm.entity.AccountSeller">insertaccount_seller(seller_id, seller_account, seller_password,last_time_login, logon_date, is_enable)values (#{sellerId}, #{sellerAccount}, #{sellerPassword}, #{lastTimeLogin}, #{logonDate}, #{isEnable})</insert><delete id="delete" parameterType="java.lang.Integer">delete from account_seller where seller_id = #{sellerId}</delete><!-- 该setement对应的方法的返回值是resultMap中的type指定的类型 --><select id="selectById" parameterType="java.lang.Integer" resultMap="BaseResultMap">select * from account_seller where seller_id = #{sellerId}</select><select id="selectAll" resultMap="BaseResultMap">select * from account_seller</select><update id="updateById" parameterType="com.ssm.entity.AccountSeller">update account_seller set seller_account = #{sellerAccount},seller_password = #{sellerPassword}, last_time_login = #{lastTimeLogin},logon_date = #{logonDate},is_enable = #{isEnable}where seller_id = #{sellerId}</update></mapper>
AccountSellerMapper.java
package com.ssm.dao;import com.ssm.entity.AccountSeller;
import java.util.List;public interface AccountSellerMapper {/*** 添加商家账号* @param accountSeller* @return*/int insert(AccountSeller accountSeller);/*** 根据id删除商家账号* @param sellerId* @return*/int delete(Integer sellerId);/*** 根据id查询商家* @param sellerId* @return*/AccountSeller selectById(Integer sellerId);/*** 查询所有商家账户* @return*/List<AccountSeller> selectAll();/*** 根据id修改商家账号* @param accountSeller* @return*/int updateById(AccountSeller accountSeller);
}
测试CRUD
package com.ssm.test;import java.util.Date;
import java.util.List;import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;import com.ssm.dao.AccountSellerMapper;
import com.ssm.entity.AccountSeller;@RunWith(SpringJUnit4ClassRunner.class)//使用spring提供的测试类
@ContextConfiguration(locations="classpath:applicationContext.xml")//告诉spring配置文件的位置在哪
public class AccountSellerTest {@AutowiredAccountSellerMapper asm;@Testpublic void test1(){//1. 创建商家账号AccountSeller as = new AccountSeller();as.setSellerAccount("bbb");as.setSellerPassword("222");as.setLogonDate(new Date());as.setLastTimeLogin(new Date());as.setIsEnable(true);//2. 进行insert操作asm.insert(as);//3. 查询所有List<AccountSeller> list = asm.selectAll();System.out.println("list=========>" + list.toArray());//4. 查询单个AccountSeller as2 = list.get(1);System.out.println("单个查询==============>" + asm.selectById(as2.getSellerId()));//5. 更改as2.setSellerPassword("66666666");as2.setSellerAccount("abababababababab");asm.updateById(as2);System.out.println(as2.toString());//6. 删除asm.delete(as2.getSellerId());//再次查询所有,看看有没有账号为abababababababab的商家账号List<AccountSeller> list2 = asm.selectAll();System.out.println(list2.toArray());}
}
结果

测试通过

增加

增加成功
这里可以看到刚刚添加的已经成功。

查询所有

查询成功
查询成功。这里显示有2条数据,第一条是我之前添加的。

查询单个

查询成功
查询单个成功。

修改

修改成功
根据id修改成功。

删除

删除成功
根据id删除id为2的记录,删除成功。

到这里spring整合mybatis就完成了。后续是测试springmvc能否正常访问,以及controller中的方法能否调用service中的方法

springmv

在这里准备先测试springmvc

准备相关配置文件
创建文件

目录
在这里插入图片描述

AccountSellerController.java
package com.ssm.controller;import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;import com.ssm.entity.AccountSeller;
import com.ssm.service.AccountSellerService;@Controller
@RequestMapping("/accountSeller")
public class AccountSellerController {@Autowiredprivate AccountSellerService accountSellerService;@RequestMapping("/selectAll")public String selectAll() {System.out.println("selectAll运行。。。。。");return "list";}
}
index.jsp
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html><head><base href="<%=basePath%>"><title>My JSP 'index.jsp' starting page</title><meta http-equiv="pragma" content="no-cache"><meta http-equiv="cache-control" content="no-cache"><meta http-equiv="expires" content="0">    <meta http-equiv="keywords" content="keyword1,keyword2,keyword3"><meta http-equiv="description" content="This is my page"><!--<link rel="stylesheet" type="text/css" href="styles.css">--></head><a href="accountSeller/selectAll">测试</a>
</html>
list.jsp
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html><head><base href="<%=basePath%>"><title>My JSP 'list.jsp' starting page</title><meta http-equiv="pragma" content="no-cache"><meta http-equiv="cache-control" content="no-cache"><meta http-equiv="expires" content="0">    <meta http-equiv="keywords" content="keyword1,keyword2,keyword3"><meta http-equiv="description" content="This is my page"><!--<link rel="stylesheet" type="text/css" href="styles.css">--></head><body><h3>测试成功</h3></body>
</html>
测试能否正常访问

控制台成功输出。
测试成功

成功跳转。成功跳转

spring整合springmvc和mybatis

在前面的测试中,springmvc和mybatis可以独立运行,现在是时候对它们进行整合了。

创建文件

工程目录
工程文件

AccountSellerController.java
package com.ssm.controller;import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;import com.ssm.entity.AccountSeller;
import com.ssm.service.AccountSellerService;@Controller
@RequestMapping("/accountSeller")
public class AccountSellerController {@Autowiredprivate AccountSellerService accountSellerService;@RequestMapping("/selectAll")public String selectAll(Model model) {model.addAttribute("list", accountSellerService.selectAll());return "list";}
}
AccountSellerService.java

把AccountSellerMapper.java中的方法全部挪到service层中。

package com.ssm.service;import java.util.List;import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;import com.ssm.dao.AccountSellerMapper;
import com.ssm.entity.AccountSeller;@Service
public class AccountSellerService {@Autowiredprivate AccountSellerMapper accountSellerMapper;/*** 添加账户* @param accountSeller* @return*/public int insert(AccountSeller accountSeller){return accountSellerMapper.insert(accountSeller);}/*** 根据id查询账户* @param sellerId* @return*/public AccountSeller selectById(Integer sellerId) {return accountSellerMapper.selectById(sellerId);}/*** 查询所有账户* @return*/public List<AccountSeller> selectAll(){return accountSellerMapper.selectAll();}/*** 根据id修改账户,AccountSeller对象中必须有id* @param accountSeller* @return*/public int updateById(AccountSeller accountSeller) {return accountSellerMapper.updateById(accountSeller);}/*** 根据id删除账户* @param sellerId* @return*/public int delete(Integer sellerId){return accountSellerMapper.delete(sellerId);}
}
AccountSellerMapper.java(不需要更改)
index.jsp(不需要更改)
list.jsp
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html><head><base href="<%=basePath%>"><title>My JSP 'list.jsp' starting page</title><meta http-equiv="pragma" content="no-cache"><meta http-equiv="cache-control" content="no-cache"><meta http-equiv="expires" content="0">    <meta http-equiv="keywords" content="keyword1,keyword2,keyword3"><meta http-equiv="description" content="This is my page"><!--<link rel="stylesheet" type="text/css" href="styles.css">--></head><body><c:forEach items="${list }" var="accountSeller">${accountSeller.sellerId },${accountSeller.sellerAccount }</c:forEach><h3>测试成功</h3></body>
</html>
测试能否查询到数据库中的账号

在此展示查询所有账户的方法,其他的方法就不一一展示了。测试成功

结语

至此,SSM整合已全部完成。该教程是我学完SSM之后写的教程,在写的过程中一步一步巩固所学到的技术,一点一点改进,所以该教程可能不是最好的,但是适合刚学完用servlet来做项目的同学。如本教程有错漏的地方,请大神指出,谢谢。

这篇关于摸爬滚打-由原始servlet过渡到SSM整合(无maven)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/581754

相关文章

Servlet中配置和使用过滤器的步骤记录

《Servlet中配置和使用过滤器的步骤记录》:本文主要介绍在Servlet中配置和使用过滤器的方法,包括创建过滤器类、配置过滤器以及在Web应用中使用过滤器等步骤,文中通过代码介绍的非常详细,需... 目录创建过滤器类配置过滤器使用过滤器总结在Servlet中配置和使用过滤器主要包括创建过滤器类、配置过滤

SpringBoot整合kaptcha验证码过程(复制粘贴即可用)

《SpringBoot整合kaptcha验证码过程(复制粘贴即可用)》本文介绍了如何在SpringBoot项目中整合Kaptcha验证码实现,通过配置和编写相应的Controller、工具类以及前端页... 目录SpringBoot整合kaptcha验证码程序目录参考有两种方式在springboot中使用k

Spring Boot 中整合 MyBatis-Plus详细步骤(最新推荐)

《SpringBoot中整合MyBatis-Plus详细步骤(最新推荐)》本文详细介绍了如何在SpringBoot项目中整合MyBatis-Plus,包括整合步骤、基本CRUD操作、分页查询、批... 目录一、整合步骤1. 创建 Spring Boot 项目2. 配置项目依赖3. 配置数据源4. 创建实体类

SpringBoot整合InfluxDB的详细过程

《SpringBoot整合InfluxDB的详细过程》InfluxDB是一个开源的时间序列数据库,由Go语言编写,适用于存储和查询按时间顺序产生的数据,它具有高效的数据存储和查询机制,支持高并发写入和... 目录一、简单介绍InfluxDB是什么?1、主要特点2、应用场景二、使用步骤1、集成原生的Influ

SpringBoot整合Canal+RabbitMQ监听数据变更详解

《SpringBoot整合Canal+RabbitMQ监听数据变更详解》在现代分布式系统中,实时获取数据库的变更信息是一个常见的需求,本文将介绍SpringBoot如何通过整合Canal和Rabbit... 目录需求步骤环境搭建整合SpringBoot与Canal实现客户端Canal整合RabbitMQSp

每天认识几个maven依赖(ActiveMQ+activemq-jaxb+activesoap+activespace+adarwin)

八、ActiveMQ 1、是什么? ActiveMQ 是一个开源的消息中间件(Message Broker),由 Apache 软件基金会开发和维护。它实现了 Java 消息服务(Java Message Service, JMS)规范,并支持多种消息传递协议,包括 AMQP、MQTT 和 OpenWire 等。 2、有什么用? 可靠性:ActiveMQ 提供了消息持久性和事务支持,确保消

30常用 Maven 命令

Maven 是一个强大的项目管理和构建工具,它广泛用于 Java 项目的依赖管理、构建流程和插件集成。Maven 的命令行工具提供了大量的命令来帮助开发人员管理项目的生命周期、依赖和插件。以下是 常用 Maven 命令的使用场景及其详细解释。 1. mvn clean 使用场景:清理项目的生成目录,通常用于删除项目中自动生成的文件(如 target/ 目录)。共性规律:清理操作

在cscode中通过maven创建java项目

在cscode中创建java项目 可以通过博客完成maven的导入 建立maven项目 使用快捷键 Ctrl + Shift + P 建立一个 Maven 项目 1 Ctrl + Shift + P 打开输入框2 输入 "> java create"3 选择 maven4 选择 No Archetype5 输入 域名6 输入项目名称7 建立一个文件目录存放项目,文件名一般为项目名8 确定

maven 编译构建可以执行的jar包

💝💝💝欢迎莅临我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 推荐:「stormsha的主页」👈,「stormsha的知识库」👈持续学习,不断总结,共同进步,为了踏实,做好当下事儿~ 专栏导航 Python系列: Python面试题合集,剑指大厂Git系列: Git操作技巧GO

Maven创建项目中的groupId, artifactId, 和 version的意思

文章目录 groupIdartifactIdversionname groupId 定义:groupId 是 Maven 项目坐标的第一个部分,它通常表示项目的组织或公司的域名反转写法。例如,如果你为公司 example.com 开发软件,groupId 可能是 com.example。作用:groupId 被用来组织和分组相关的 Maven artifacts,这样可以避免