美文网首页
将Spring应用到servlet项目中

将Spring应用到servlet项目中

作者: 花无缺_0159 | 来源:发表于2019-02-06 15:11 被阅读0次

1、 使用servlet技术开发用户登陆功能;
2、 在项目中加入Spring框架
i. 将service、dao、dateSource交给Spring管理;
ii. 在web.xml中配置Spring监听器和读取配置文件;

【参考代码】
applicationContext.xml:

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
            xmlns="http://www.springframework.org/schema/beans" 
            xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd ">

<!-- 配置 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="123"/>
</bean>

<!-- 配置dao -->
<bean  name="userDao" class="com.sikiedu.dao.UserDaoImpl">
    <property name="dataSource" ref="dataSource"/>
</bean>

<!-- 配置service -->
<bean name="userService" class="com.sikiedu.service.UserServiceImpl">
    <property name="ud" ref="userDao"/>
</bean>

</beans>

为了使容器与servlet生命周期一致,一定要配好web.xml。
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">
  <display-name>ssm_spring_servlet</display-name>
  
  <!-- 配置监听器,在web项目启动的时候让spring启动 -->
  <listener>
    <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
  </listener>
  <!-- 读取spring的配置文件 -->
  <context-param>
    <param-name>contextConfigLocation</param-name>
    <param-value>classpath:applicationContext.xml</param-value>
  </context-param>
  
  <welcome-file-list>
    <welcome-file>index.html</welcome-file>
    <welcome-file>index.htm</welcome-file>
    <welcome-file>index.jsp</welcome-file>
    <welcome-file>default.html</welcome-file>
    <welcome-file>default.htm</welcome-file>
    <welcome-file>default.jsp</welcome-file>
  </welcome-file-list>
</web-app>

【javabean】
User.java:

package com.sikiedu.bean;

public class User {
   
   private Integer u_id;
   private String u_username;
   private String u_password;
   public Integer getU_id() {
       return u_id;
   }
   public void setU_id(Integer u_id) {
       this.u_id = u_id;
   }
   public String getU_username() {
       return u_username;
   }
   public void setU_username(String u_username) {
       this.u_username = u_username;
   }
   public String getU_password() {
       return u_password;
   }
   public void setU_password(String u_password) {
       this.u_password = u_password;
   }
   
}

【web层】
UserLoginServlet.java:

package com.sikiedu.web;

import java.io.IOException;

import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import org.springframework.web.context.WebApplicationContext;
import org.springframework.web.context.support.WebApplicationContextUtils;

import com.sikiedu.bean.User;
import com.sikiedu.service.UserService;
import com.sikiedu.service.UserServiceImpl;

/**
 * Servlet implementation class UserLoginServlet
 */
@WebServlet("/userLogin")
public class UserLoginServlet extends HttpServlet {
    private static final long serialVersionUID = 1L;
   
    private UserService us;
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        
        //接收表单数据
        String username = request.getParameter("username");
        String password = request.getParameter("password");
        
        //封装成user对象
        User u = new User();
        u.setU_username(username);
        u.setU_password(password);
        
        //通过容器获取userService
//      ApplicationContext ac = new ClassPathXmlApplicationContext("applicationContext.xml");
//      us =    (UserService) ac.getBean("userService");
        
        //在web项目中我们只需要一个spring的容器
        
        //application域
        
        //ServletContext() 生命周期 随着web项目启动而创建 随着web项目关闭而销毁
        
        
        //ServletContextListener 可以通过配置监听器来达到我们的需求,在web项目创建时候创建spring容器,销毁时候关闭spring容器
        WebApplicationContext wac = WebApplicationContextUtils.getWebApplicationContext(getServletContext());
        us = (UserService) wac.getBean("userService");
        
        //调用service方法验证用户
        User loginUser =  us.getUserByInfo(u);
        
        //根据用户验证结果进行操作
        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");
        }
    }
    

    public UserLoginServlet() {
        super();
        // TODO Auto-generated constructor stub
    }


    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        // TODO Auto-generated method stub
        doGet(request, response);
    }

}

【service层】
UserService.java:

package com.sikiedu.service;

import com.sikiedu.bean.User;

public interface UserService {

    //通过用户信息 获取用户
    User getUserByInfo(User u);

}

UserServiceImpl.java:

package com.sikiedu.service;

import com.sikiedu.bean.User;
import com.sikiedu.dao.UserDao;

public class UserServiceImpl implements UserService {

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

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

}

【DAO层】
UserDAO.java:

package com.sikiedu.dao;

import com.sikiedu.bean.User;

public interface UserDao {

    //通过用户信息获取用户对象
    User getUserByInfo(User u);

}

UserDaoImpl.java:

package com.sikiedu.dao;

import java.beans.PropertyVetoException;
import java.sql.SQLException;

import org.apache.commons.dbutils.QueryRunner;
import org.apache.commons.dbutils.handlers.BeanHandler;

import com.mchange.v2.c3p0.ComboPooledDataSource;
import com.sikiedu.bean.User;

public class UserDaoImpl implements UserDao {
    
    private ComboPooledDataSource dataSource;
    public void setDataSource(ComboPooledDataSource dataSource) {
        this.dataSource = dataSource;
    }

    
    /*private static ComboPooledDataSource dataSource;
    
    static {
        //配置c3p0    //连接数据库 c3p0
        try {
            dataSource = new ComboPooledDataSource();
            dataSource.setDriverClass("com.mysql.jdbc.Driver");
            dataSource.setJdbcUrl("jdbc:mysql://localhost:3306/ssm_spring");
            dataSource.setUser("root");
            dataSource.setPassword("123");
        } catch (PropertyVetoException e) {
            e.printStackTrace();
        }
    }*/
    

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

}

注:代码来自SiKi学院。

相关文章

网友评论

      本文标题:将Spring应用到servlet项目中

      本文链接:https://www.haomeiwen.com/subject/xaxisqtx.html