【SSM_Spring】学习笔记03

J2EE web app 3.1 xsd 立即下载

一、使用servlet开发用户登录功能(用于与后面对比使用Spring的不同)

1、创建dynamic web project,导入基本包

2、拖入准备好的静态资源

这里有一个点要注意噢,一开始我不注意,把静态资源放进了WEB-INF中,因为这是eclipse,对于WEB-INF中的资源有保护作用,所以一直运行时会出现错误--服务器404,把文件拖出来就好了,我一直在找是不是我java代码写错了,真是无奈啊。。。

3、新建包

1)新建数据库、user表,对应bean层实体类

public class User {
	private Integer u_id;
	private String u_username;
	private String u_password;
}

2)dao层:UserDao接口以及其实现类(配置数据库和数据库操作)

public interface UserDao {

	User getUserByInfo(User user);

}





public class UserDaoImpl implements UserDao{

	private static ComboPooledDataSource dataSource;
	static {
		try {
			//配置c3p0数据库
			dataSource = new ComboPooledDataSource();
			dataSource.setDriverClass("com.mysql.jdbc.Driver");
			dataSource.setJdbcUrl("jdbc:mysql://localhost:3306/ssm_spring");
			dataSource.setUser("root");
			dataSource.setPassword("root");
		} catch (PropertyVetoException e) {
			e.printStackTrace();
		}
	}
	@Override
	//通过数据库查询用户
	public User getUserByInfo(User user) {
		
		
		try {
			//使用dbutil操作数据库,查询并返回对象
			QueryRunner qRunner = new QueryRunner(dataSource);
			String sql = "select * from user where u_username=? and u_password=?";
			return qRunner.query(sql,new BeanHandler<User>(User.class), user.getU_username(),user.getU_password());
		} catch (SQLException e) {
			e.printStackTrace();
		}
		return null;
	}

}

3)Service层:UserService 接口以及其实现类

public interface UserService {
	//通过用户信息获取用户
	public User getUserByInfo(User user);
}





public class UserServiceImpl implements UserService {

	
	private UserDao ud = new UserDaoImpl();
	@Override
	public User getUserByInfo(User user) {
		
		return ud.getUserByInfo(user);
	}

}


4)web层(类似于Controller,放servlet)

@WebServlet("/userLogin")
public class userLogin extends HttpServlet {
	private static final long serialVersionUID = 1L;
    
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		//接收表单数据
		String username = request.getParameter("username");
		String password = request.getParameter("password");
		
		//封装成user对象
		User user = new User();
		user.setU_username(username);
		user.setU_password(password);
		
		//调用service验证用户
		UserService us = new UserServiceImpl();
		User loginUser = us.getUserByInfo(user);
		
		//根据用户验证结果进行操作
		if(loginUser == null) {
			//验证失败,转发到login_page.jsp
			request.setAttribute("errorMsg", "用户名或密码错误");
			request.getRequestDispatcher("/login_page.jsp").forward(request, response);
		}else {
			//验证成功,重定向到index.jsp
			HttpSession session = request.getSession();
			session.setAttribute("user", loginUser);
			response.sendRedirect(request.getContextPath()+"/index.jsp");
		}
		
		
		
	}
}

5)tomcat 跑起来OK了。

二、使用Spring改造项目

.。。。搞了半天错误,我的数据库居然莫名其妙没了。。。。气死我了。。。。

(1)将原本项目中由自身生成调用的改用spring容器管理

比如:UserDaoImpl中原本的数据库连接、配置全部改由spring容器管理

public class UserDaoImpl implements UserDao{

	private  ComboPooledDataSource dataSource;
	
	public void setDataSource(ComboPooledDataSource dataSource) {
		this.dataSource = dataSource;
	}

	@Override
	//通过数据库查询用户
	public User getUserByInfo(User user) {
		
		
		try {
			//使用dbutil操作数据库,查询并返回对象
			QueryRunner qRunner = new QueryRunner(dataSource);
			String sql = "select * from user where u_username=? and u_password=?";
			return qRunner.query(sql,new BeanHandler<User>(User.class), user.getU_username(),user.getU_password());
		} catch (SQLException e) {
			e.printStackTrace();
		}
		return null;
	}

}

applicationContext.xml中添加:

	<!-- 配置dataSource -->	
	<bean name="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
		<property name="driverClass" value="com.mysql.jdbc.Driver"/>
		<property name="jdbcUrl" value="jdbc:mysql://localhost:3306/ssm_spring"/>
		<property name="user" value="root"/>
		<property name="password" value="root"/>
	</bean>
	
	<!-- 配置DAO -->
	<bean name="UserDao" class="com.dunka.dao.UserDaoImpl">
		<property name="dataSource" ref="dataSource" />
	</bean>

还有UserServiceImpl中调用UserDao并生成对象也改由spring直接引用bean对象

public class UserServiceImpl implements UserService {

	
	private UserDao ud;
	
	public void setUd(UserDao ud) {
		this.ud = ud;
	}

	@Override
	public User getUserByInfo(User user) {
		
		return ud.getUserByInfo(user);
	}

}

applicationContext.xml中

<!-- 配置service -->	
	<bean name="UserService" class="com.dunka.service.UserServiceImpl">
		<property name="ud" ref="UserDao"></property>
	</bean>

(2)要明白一点,web项目中使用spring容器的生命周期最好是跟web项目同步,项目开启即生成spring容器,关闭即销毁容器,其生命周期有点像application域,所以在此可以利用servletContext,而spring中提供了一个封装包,spring-web-xxx.jar里面有一个webapplicationContext的工具类,用于监听项目的状况,除了在逻辑层开启监听器,需要在web.xml中配置此监听器,并需要配置读取spring配置文件

UserLogin中添加以下几行代码:

WebApplicationContext wac=WebApplicationContextUtils.getWebApplicationContext(getServletContext());
		us=(UserService) wac.getBean("UserService");

web.xml

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://xmlns.jcp.org/xml/ns/javaee" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd" id="WebApp_ID" version="3.1">
  
  
<!-- needed for ContextLoaderListener -->
	<context-param>
		<param-name>contextConfigLocation</param-name>
		<param-value>classpath:applicationContext.xml</param-value>
	</context-param>

	<!-- Bootstraps the root web application context before servlet initialization -->
	<listener>
		<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
	</listener>
</web-app>

(如果有spring的集成插件,alt+/  选择contextConfigLocation 只需在param-value中填入spring配置文件的相对引用路径)

(3)运行测试

三、总结

从servlet中可以知道每个层都是互相调用,用户调用Service,Service调用dao,dao层调用数据库,从这一层面来说,可以将所以关系都用spring的bean对象用以互相调用,降低各层之间的耦合度,统一用spring管理,在项目较大时会特别方便。此项目还涉及到web中的一些生命周期的问题,如第一版本,每次请求其实都会产生一个spring容器,并不是我要的目的,改由监听器控制spring容器的生命周期更能符合我们的要求

http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd 立即下载

相关推荐

STM32 CubeMX实战:手把手教你用I2C驱动IST8310磁力计(附完整代码)

本文详细介绍了如何使用STM32 CubeMX和I2C驱动IST8310磁力计,从硬件连接到代码实现的完整流程。重点讲解了I2C通信异常处理、传感器初始化序列优化以及中断驱动数据采集方案,帮助开发者快速搭建可靠的地磁场数据采集系统。

weixin_42531163的博客 189

解决idea自动生成的web.xml中web-app报错的问题

用idea自动生成的web.xml中,在配置servlet后,我们发现web-app居然报错了,仔细一看,代码本身并没有出现什么问题,也就是说这是由于生成的web.xml对servlet标签不支持所致,详情看截图。 正确的解决办法是将web-app替换成下面的代码: <web-app xmlns="http://java.sun.com/xml/ns/javaee"

ZZY1078689276的专栏 7903

ROS 2实战:用MoveIt Task Constructor让机械臂完成抓取任务(附避坑指南)

本文详细介绍了如何在ROS 2环境中使用MoveIt Task Constructor框架,为Franka Panda机械臂构建一个完整的拾取放置任务流水线。通过分解任务阶段、配置规划器并处理实际部署中的常见问题,帮助开发者从基础运动规划升级到可靠的多步骤任务编排,并附有核心避坑指南。

vvv99的博客 507

SSM学习笔记(Spring篇Day03)

切入点定义依托一个不具有实际意义的方法进行,即无参数、无返回值、方法体无实际逻辑。

2302_79807388的博客 622

NBIS单细胞教程:差异基因(五)

此文章是通过学习瑞典国家生物信息学基础设施(NBIS) 所开放的单细胞分析教程加上网上所查找的资料,自身的理解所形成的,可能会有不足之处。该部分是对不同集群之间的差异基因进行分析。参考来源:https://github.com/NBISweden/workshop-scRNAseq/blob/master/labs/seurat/seurat_05_dge.Rmd感兴趣的话可以阅读原文。

songyi10的博客 1万+

批量导入经纬度点到奥维地图中

随便说说 最近出来出差,天天东奔西跑的,跑完了回到酒店还得整理一天的成果,基本上晚上9点才能整理完,累的基本上倒头就睡,没时间鼓捣自己喜欢的东西了。但想着也得写点啥吧,想来想去就那最近工作中用到的东西吧。因为我们现在的工作内容呢,基本上就是按照着上面给的地理位置找到地方开始检查。所以呢,就需要批量的把手上的经纬点信息导入到地图中,安排好路线,利用导航高效的找到地方。给的坐标就是gps点,wgs-84的,使用奥维地图最方便了,不用做坐标转换直接能用。所以作为组里的gis担(苦)当(力),这个导坐标的活就由我来

lionhenryzxxy的博客 3万+

SSM学习笔记(3)_Spring_Day03_Spring中的aop和基于XML以及注解的AOP配置

Day03 本文章基于B站视频教程 《最新(idea版) mybatis-spring-springmvc-Java一站式学习》进行整理记录,本文章仅用于个人笔记/学习/交流使用。 1、完善我们的account案例 2、分析案例中问题 3、回顾之前讲过的一个技术:动态代理 4、动态代理另一种实现方式 5、解决案例中的问题 6、AOP的概念 7、spring中的AOP相关术语 8、spring中基于XML和注解的AOP配置 目录标题Day031.从案例中引出问题并解决1.1 问题引入1.2 使用事务改进2

耿鬼不会笑的博客 256

从原理到接法全面了解三相电

从原理到接法全面了解三相电

viixin的博客 1万+

SSM框架(Spring + SpringMVC + MyBatis)学习笔记(03),第四课:MyBatis

spring + mybatis 实现步骤图 一、配置环境,添加jar包 jar包主要包含ioc, aop, dao, 连接池dbcp, mybatis-spring, mybatis驱动包。 自己在学习的时候发现所有的配置以及代码都是正确的,但是运行会报错,问题出在jar包的版本上。各个jar包的版本之间的兼容程度不一样可能会导致报错,包括jdk的版本。所以各位小伙伴在练习的时候注意一下。 二...

人若没有梦想和咸鱼有什么区别 237

奇迹mu服务端DATA文件解析:从基础配置到高级玩法

本文深入解析奇迹MU服务端DATA文件的核心配置与高级玩法,涵盖基础设置、怪物AI系统、技能战斗机制、副本事件管理及物品商城定制。通过详细示例和实用技巧,帮助开发者掌握从经验倍率调整到动态事件触发的全方位配置方法,实现个性化的私服搭建与运营。

weixin_29254673的博客 530

Unity 数字孪生实战:PiXYZ Plugin工业模型高效处理指南

本文是Unity数字孪生实战指南,重点介绍了如何使用PiXYZ Plugin高效处理工业CAD模型。针对工业模型导入Unity时面临的格式壁垒、数据爆炸和资产混乱等核心痛点,文章提供了从环境安装、基础导入到智能减面、资产清理的完整解决方案,并分享了预设自动化、运行时导入等高级技巧与性能优化策略,帮助开发者快速打通工业设计与实时交互流程。

weixin_29009501的博客 257

spring boot和SSM开发中有什么区别?

回答:spring boot是什么?有什么作用?什么场景下使用? SSM是什么?有什么作用?什么场景下使用? 两个相比较,各自的优缺点 什么是Spring Boot? 从本质上来说,Spring Boot就是Spring,它做了那些没有它你也会去做的Spring Bean配置。 SpringBoot的作用? 它使用“习惯优于配置”(项目中存在大量的配置,此外还内置了一个习惯性的配置,让...

Java小萧博客 6万+

RT-DETR改进策略【卷积层】| CVPR-2020 Strip Pooling 空间池化模块 处理不规则形状的对象 含二次创新

一、本文介绍 本文记录的是利用Strip Pooling模块优化RT-DETR的目标检测网络模型。Strip Pooling结合了长而窄的卷积核形状在一个空间维度上的长程关系捕捉能力和在另一个空间维度上的局部细节捕捉能力,有效地处理复杂的场景信息。这一机制通过采用1×N1×N1×N或N×1N×1N×1的池化核形状来适应不同的图像特征,提高模型对目标形状和分布的适应性。在场景解析网络中,Strip Pooling可以被用于提升对具有长程带状结构或离散分布目标的解析能力,特别是在复杂场景或不同对象布局条件下效果

Limiiiing的博客 580

【SSM】Spring学习笔记1: IoC的XML配置

文章基于。

2301_76391858的博客 1219

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

ssm框架学习笔记

title: ssm框架学习笔记 date: 2018-03-21 16:49:52 updated: 2020-03-12 14:34:23 categories: spring tags: - spring 此文档记录研二学习ssm框架的知识点笔记 SSM简介 最初:jsp + servlet + jdbc 现在:springmvc + spring + mybatis 官网地址: lo...

Pop_Rain的博客 2238

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

【SSM学习】03-SSM整合

SSM(B站黑马)学习笔记 03-SSM整合

weixin_48074431的博客 943

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

【SSM整合】SSM整合学习-2022详细学习笔记

学习尚硅谷2022版SSM教程的详细学习笔记 SpringMVC和Spring可以整合也可以不整合,不整合就是Spring和SpringMVC用同一个IOC容器,整合就是各自创建IOC容器去管理自己的。SpringMVC的IOC容器是在DispatcherServlet进行初始化的时候创建的,那么Spring的IOC容器应该在什么时候创建呢?SpringMVC管理的是控制层组件,而其他的需要交给Spring管理,而controller需要自动装配service层.........

gdxdekx的博客 4708

Spring Securit学习笔记之整合SSM

文章目录Spring Securit学习笔记1. Spring Security+SSM环境整合1. 创建maven项目,配置pom.xml2. 创建Spring核心配置文件Spring-core.xml3. 创建数据源配置文件jdbc-data.properties4. 创建SpringMVC配置文件spring-mvc.xml5. 创建Spring Security配置文件spring-sec...

IT小浣熊的博客 379

黑马SSM学习笔记

Spring ,SpringMVC ,MyBatis-Plus

十二间记,知不足而奋斗,望远山而前行。千里不辞行路远,时光早晚到天涯。 2130

基于SSM的学习笔记分享系统

本设计以MySQL为后端数据库,以IDEA为开发平台,采用SSM架构,建立以个人中心,用户管理,笔记本管理,笔记分享管理,分享类型管理,学习资料管理,购买资料管理,完整资料管理,系统管理等必要功能的、稳定的学习笔记系统。

namixuezhang11的博客 420

基于spring的ssm整合

基于spirng框架的ssm整合,使用spring6整合mybatis框架,springmvc框架,spring框架。含代码,配置,运行结果。

. 2025

javaweb,ssm,spring,SpringBoot的区别

​​传统JavaWeb技术​SSM替代方案​核心改进​Servlet注解驱动、解耦请求处理与视图渲染JSP 模板引擎(Thymeleaf等)前后端分离,避免Java代码侵入HTMLJDBCMyBatisSQL与Java解耦、自动ORM映射、动态SQL支持手工管理Service/DAOSpring IoC/AOP 依赖注入降低耦合、声明式事务管理EJBSpring轻量级容器简化分布式开发,避免重量级部署。

xrkhy的博客 1278

ssm 学习笔记day03

ssm自用学习笔记

qq_52358098的博客 966

【SSM】Spring学习笔记5:Spring事务

保证数据层或者业务层对数据库操作的时候,所有操作同时成功或者同时失败。即保证数据一致性。

2301_76391858的博客 690
上一篇: 【SSM_Spring】学习笔记02
下一篇: 【SSM_Spring】学习笔记04
多啦CCCC梦
博客等级 码龄10年 31粉丝 43原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

多啦CCCC梦

你的鼓励将是我最大的创作动力~

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值