【SSM_Spring】学习笔记03

本文记录了从使用servlet开发用户登录功能到通过Spring进行项目改造的过程。首先介绍了如何创建动态Web项目,设置静态资源,搭建数据库和各层服务。接着详细讲述了Spring改造项目,包括将数据库操作交给Spring容器管理,理解Spring在Web项目中的生命周期,并利用监听器控制Spring容器。最后总结了Spring管理Bean的好处,降低了各层耦合,便于大型项目维护。
摘要由CSDN通过智能技术生成

一、使用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容器的生命周期更能符合我们的要求

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
Java SSMSpring+SpringMVC+MyBatis)是一种基于Java语言的Web开发框架。学习这个框架的过程中,我深刻体会到它的强大和灵活性。 首先,Spring框架为开发者提供了一个强大的IOC(Inversion of Control)容器,它能够管理和注入对象,减少了代码之间的耦合性。通过配置文件或注解,我们可以轻松地定义和获取各种对象,提高了代码的可维护性和可扩展性。 其次,SpringMVC框架是一种MVC(Model-View-Controller)设计模式的实现,它用于处理Web请求和响应。通过配置一个请求映射表和处理器,我们可以将请求分发给相应的控制器进行处理,并将处理结果返回给客户端。SpringMVC还提供了一些便捷的注解和标签,用于简化页面的渲染和参数的绑定。 最后,MyBatis是一种优秀的持久化框架,它能够将数据库操作与Java对象之间的映射简化为简单的配置。通过编写SQL映射文件和定义POJO(Plain Old Java Object)类,我们可以方便地进行数据库的增删改查操作,而无需编写冗长的SQL语句。 在学习Java SSM框架的过程中,我深入理解了软件开发过程中的MVC思想,并学会了如何利用SpringSpringMVC和MyBatis来实现一个完整的Web应用程序。通过不断的实践和调试,我逐渐培养了自己解决问题和调试代码的能力。 总结起来,学习Java SSM框架使我深入理解了软件开发的各个环节,并提升了我的编码能力和开发效率。我相信这些知识和经验将对我的职业发展和项目实施起到积极的促进作用。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

多啦CCCC梦

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

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

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

打赏作者

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

抵扣说明:

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

余额充值