摸爬滚打-由原始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

相关文章

Spring Boot整合log4j2日志配置的详细教程

《SpringBoot整合log4j2日志配置的详细教程》:本文主要介绍SpringBoot项目中整合Log4j2日志框架的步骤和配置,包括常用日志框架的比较、配置参数介绍、Log4j2配置详解... 目录前言一、常用日志框架二、配置参数介绍1. 日志级别2. 输出形式3. 日志格式3.1 PatternL

CentOS系统Maven安装教程分享

《CentOS系统Maven安装教程分享》本文介绍了如何在CentOS系统中安装Maven,并提供了一个简单的实际应用案例,安装Maven需要先安装Java和设置环境变量,Maven可以自动管理项目的... 目录准备工作下载并安装Maven常见问题及解决方法实际应用案例总结Maven是一个流行的项目管理工具

SpringBoot整合DeepSeek实现AI对话功能

《SpringBoot整合DeepSeek实现AI对话功能》本文介绍了如何在SpringBoot项目中整合DeepSeekAPI和本地私有化部署DeepSeekR1模型,通过SpringAI框架简化了... 目录Spring AI版本依赖整合DeepSeek API key整合本地化部署的DeepSeek

Ollama整合open-webui的步骤及访问

《Ollama整合open-webui的步骤及访问》:本文主要介绍如何通过源码方式安装OpenWebUI,并详细说明了安装步骤、环境要求以及第一次使用时的账号注册和模型选择过程,需要的朋友可以参考... 目录安装环境要求步骤访问选择PjrIUE模型开始对话总结 安装官方安装地址:https://docs.

使用maven依赖详解

《使用maven依赖详解》本文主要介绍了Maven的基础知识,包括Maven的简介、仓库类型、常用命令、场景举例、指令总结、依赖范围、settings.xml说明等,同时,还详细讲解了Maven依赖的... 目录1. maven基础1.1 简介1.2 仓库类型1.3 常用命令1.4 场景举例1.5 指令总结

Spring Boot 整合 ShedLock 处理定时任务重复执行的问题小结

《SpringBoot整合ShedLock处理定时任务重复执行的问题小结》ShedLock是解决分布式系统中定时任务重复执行问题的Java库,通过在数据库中加锁,确保只有一个节点在指定时间执行... 目录前言什么是 ShedLock?ShedLock 的工作原理:定时任务重复执行China编程的问题使用 Shed

SpringBoot项目中Maven剔除无用Jar引用的最佳实践

《SpringBoot项目中Maven剔除无用Jar引用的最佳实践》在SpringBoot项目开发中,Maven是最常用的构建工具之一,通过Maven,我们可以轻松地管理项目所需的依赖,而,... 目录1、引言2、Maven 依赖管理的基础概念2.1 什么是 Maven 依赖2.2 Maven 的依赖传递机

关于Maven生命周期相关命令演示

《关于Maven生命周期相关命令演示》Maven的生命周期分为Clean、Default和Site三个主要阶段,每个阶段包含多个关键步骤,如清理、编译、测试、打包等,通过执行相应的Maven命令,可以... 目录1. Maven 生命周期概述1.1 Clean Lifecycle1.2 Default Li

关于Maven中pom.xml文件配置详解

《关于Maven中pom.xml文件配置详解》pom.xml是Maven项目的核心配置文件,它描述了项目的结构、依赖关系、构建配置等信息,通过合理配置pom.xml,可以提高项目的可维护性和构建效率... 目录1. POM文件的基本结构1.1 项目基本信息2. 项目属性2.1 引用属性3. 项目依赖4. 构

SpringBoot 整合 Grizzly的过程

《SpringBoot整合Grizzly的过程》Grizzly是一个高性能的、异步的、非阻塞的HTTP服务器框架,它可以与SpringBoot一起提供比传统的Tomcat或Jet... 目录为什么选择 Grizzly?Spring Boot + Grizzly 整合的优势添加依赖自定义 Grizzly 作为