(菜鸟来动手)SpringMVC+Spring+Mybatis整合(第一天) 没有框架的时候

这些天想把这几个框架整合一下,写下来记录一下,备忘!

因为很久没用过struts和hibernate了,而且个人感觉springMVC和Mybatis更方便.所以就整合一下这个!


第一天,我们先把没有框架时候的样子先做出来!

项目暂时就是一个学生登录,增删改查.整个项目分层为三层, action,servers,dao 层.目录如下图:


第一天实现一个很简单的功能:输入用户名密码,正确的话跳转到 查询列表页面,错误的话还是当前页面.

1.先定义model类

package com.sky.ssm.alpha.model;

/**
 * 学生实体类
* @author: admin
 */
public class Student {
	private int id;
	private String name;
	private String password;
	public int getId() {
		return id;
	}
	public void setId(int id) {
		this.id = id;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public String getPassword() {
		return password;
	}
	public void setPassword(String password) {
		this.password = password;
	}
	
}

2.再来个数据库连接的类

package com.sky.ssm.alpha.util;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;

public class DataBase {
	/**
	 * 得到数据库连接
	 * @return
	 */
	public static Connection getConn(){
		Connection conn = null;
		try {
			Class.forName("oracle.jdbc.driver.OracleDriver");
			conn = DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:orcl","tomcat","tomcat");
		} catch (ClassNotFoundException e) {
			e.printStackTrace();
		} catch (SQLException e) {
			e.printStackTrace();
		}
		return conn;
	}
	/**
	 * 得到一个stat
	 * @param conn
	 * @return
	 */
	public static Statement getStat(Connection conn){
		Statement stat = null;
		try {
			stat = conn.createStatement();
		} catch (SQLException e) {
			e.printStackTrace();
		}
		return stat;
	}
	
	/**
	 * 得到一个Pstat
	 * @param conn
	 * @param sql
	 * @return
	 */
	public static PreparedStatement preparStat(Connection conn,String sql){
		PreparedStatement pstat = null;
		try {
			pstat = conn.prepareStatement(sql);
		} catch (SQLException e) {
			e.printStackTrace();
		}
		return pstat;
		
	}
	
	/**
	 * 执行一条查询SQL语句
	 * @param stat
	 * @param sql
	 * @return
	 */
	public static ResultSet executeQuery(Statement stat,String sql){
		ResultSet rs = null;
		try {
			rs = stat.executeQuery(sql);
		} catch (SQLException e) {
			e.printStackTrace();
		}
		return rs;
	}
	/**
	 * 执行一条更新SQL语句
	 * @param conn
	 * @param sql
	 * @return
	 */
	public static int executeUpdate(Connection conn,String sql){
		int res=0;
		Statement stat = null;
		try {
			stat= conn.createStatement();
			res=stat.executeUpdate(sql);
		} catch (SQLException e) {
			e.printStackTrace();
		}finally{
			close(stat);
		}
		return res;
	}
	
	/**
	 * 关闭连接
	 * @param conn
	 */
	public static void close(Connection conn){
		try {
			if (conn!=null){
				conn.close();
				conn=null;
			}
		} catch (SQLException e) {
			e.printStackTrace();
		}
	}
	/**
	 * 关闭连接
	 * @param conn
	 */
	public static void close(Statement stat){
		try {
			if (stat!=null){
				stat.close();
				stat=null;
			}
		} catch (SQLException e) {
			e.printStackTrace();
		}
	}
	/**
	 * 关闭连接
	 * @param conn
	 */
	public static void close(ResultSet rs){
		try {
			if (rs!=null){
				rs.close();
				rs=null;
			}
		} catch (SQLException e) {
			e.printStackTrace();
		}
	}
}

3. 再来定义dao的实现(dao接口里面就个方法名,就不贴了)

package com.sky.ssm.alpha.dao.impl;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;

import com.sky.ssm.alpha.dao.StudentDAO;
import com.sky.ssm.alpha.model.Student;
import com.sky.ssm.alpha.util.DataBase;

public class StudentDAOImpl implements StudentDAO {

	@Override
	public Student getByNameAndPWD(String name,String password) throws SQLException {
		Connection conn = DataBase.getConn();
		String sql = "select id,name,sex from student where name = ? and password = ? ";
		PreparedStatement pstmt = DataBase.preparStat(conn,sql);
		pstmt.setString(1, name);
		pstmt.setString(2, password);
		ResultSet rs = pstmt.executeQuery();
		Student s = null;
		while(rs.next()){//没考虑多个的情况
			s = new Student();
			s.setId(rs.getInt(1));
			s.setName(rs.getString(2));
			s.setPassword(rs.getString(3));
		}
		DataBase.close(rs);
		DataBase.close(pstmt);
		DataBase.close(conn);
		return s;
	}

	@Override
	public List<Student> listAll() throws SQLException {
		Connection conn = DataBase.getConn();
		String sql = "select id,name,sex from student ";
		PreparedStatement pstmt = DataBase.preparStat(conn,sql);
		ResultSet rs = pstmt.executeQuery();
		List<Student> list = new ArrayList<Student>();
		while(rs.next()){
			Student s = new Student();
			s.setId(rs.getInt(1));
			s.setName(rs.getString(2));
			s.setPassword(rs.getString(3));
			list.add(s);
		}
		DataBase.close(rs);
		DataBase.close(pstmt);
		DataBase.close(conn);
		return list;
	}
	
}

4. 再来servers的实现

package com.sky.ssm.alpha.service.impl;

import java.sql.SQLException;
import java.util.List;

import com.sky.ssm.alpha.dao.StudentDAO;
import com.sky.ssm.alpha.dao.impl.StudentDAOImpl;
import com.sky.ssm.alpha.model.Student;
import com.sky.ssm.alpha.service.StudentManager;

public class StudentManagerImpl implements StudentManager {
	private StudentDAO studentDao = new StudentDAOImpl();;

	@Override
	public Student getByNameAndPWD(String name,String password) throws SQLException {
		return this.studentDao.getByNameAndPWD(name,password);
	}
	@Override
	public List<Student> listAll() throws SQLException {
		return this.studentDao.listAll();
	} 
	public static void main(String[] args) throws SQLException{
		StudentManagerImpl manager = new StudentManagerImpl();
		Student s = manager.getByNameAndPWD("张三","111111");
		if(s!=null){
			System.out.println(s.getId());
		}
	}
}

5.再来action

package com.sky.ssm.alpha.web;

import java.io.IOException;
import java.sql.SQLException;
import java.util.List;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import com.sky.ssm.alpha.model.Student;
import com.sky.ssm.alpha.service.StudentManager;
import com.sky.ssm.alpha.service.impl.StudentManagerImpl;

public class StudentController extends HttpServlet{
	
	private static final long serialVersionUID = -1926093434079865212L;
	private StudentManager manager ; 
	
	@Override
	 public void doPost(HttpServletRequest req, HttpServletResponse resp)
	   throws ServletException, IOException {
		 manager = new StudentManagerImpl();
		 String name = req.getParameter("name");
		 String password = req.getParameter("password");
		 Student s = null;
		try {
			s = manager.getByNameAndPWD(name, password);
			if(s!=null){
				List<Student> list = manager.listAll();
				req.setAttribute("list", list);
				req.getRequestDispatcher("student/list.jsp").forward(req, resp); 
				return;
			}else{
				resp.sendRedirect("login.jsp?msg=name or password error !!");
				return;
			}
		} catch (SQLException e) {
			e.printStackTrace();
		}
		
	 }
	 @Override
	 public void doGet(HttpServletRequest req, HttpServletResponse resp)
	   throws ServletException, IOException {
		 doPost(req,resp);
	 }		 
}

6. 登录的jsp页面

<%@ page language="java" contentType="text/html; charset=GBK"
	pageEncoding="GBK"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=GBK">
<title>登录</title>
</head>
<body>
    <form action="login" method="post">
    username:<input type="text" name="name"><br>
    password:<input type="password" name="password"><br>
    <% 
    	if(request.getParameter("msg")!=null){ 
    	%>
    	<td><%= request.getParameter("msg") %></br ></td>
    <% } %>
    <input type="submit">
    </form>
  </body>
</html>

7.查询列表的jsp页面

<%@ page language="java" contentType="text/html; charset=GBK"
	pageEncoding="GBK"%>
<%@ page import="java.util.*" %>
<%@page import="com.sky.ssm.alpha.model.Student"%> 
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<% 
	List<Student> list = (List<Student>)request.getAttribute("list");
	System.out.println(list.get(0).getName());
%>
<meta http-equiv="Content-Type" content="text/html; charset=GBK">
<title>列表</title>
</head>
<body>
	<%	
		for(int i=0;i<list.size();i++){
	%>
		<td>
			<%= list.get(i).getName() %>
			</br>	
		</td>
	<%		
		}
	%>
  </body>
</html>

8.web.xml

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" id="WebApp_ID" version="2.5">
  <display-name>cpmis</display-name>
  <welcome-file-list>
    <welcome-file>login.jsp</welcome-file>
  </welcome-file-list>
  
  <servlet>
     <description>login</description>
     <display-name>login</display-name>
       <servlet-name>stundentController</servlet-name>
     <servlet-class>com.sky.ssm.alpha.web.StudentController</servlet-class>
   </servlet>
   <servlet-mapping>
     <servlet-name>stundentController</servlet-name>
     <url-pattern>/login</url-pattern>
   </servlet-mapping>
</web-app>

代码非常简单.不过搞了半天才搞出来.有不用框架的不习惯,更多的是基础薄弱的原因.

中间遇到的问题,记录一下.

1.我在StudentManagerImpl 里面写了个main方法,但是运行不通过. 报错好像是java.lang.UnsupportedClassVersionError


经查是JDK版本不一致的问题.,从下面几个地方开始排查

1) window-->preferences-->java-->compilercompiler compliance level:1.6

2) window-->preferences-->java-->installed JREs本地1.6的

3) window-->preferences-->server-->runtime environments-->选择对应的server-->edit-->JRE 本地1.6的 (这个是tomcat的,和main方法没关系)

4)右键项目-->build path-->configure build path-->libraries选项卡,发现里面JRE System library 1.7 (unbound)  

选中,edit-->alternate JRE--> 选择本地1.6(运行main方法,还是报错!!!)

5)右键项目-->properties-->project facets-->java 1.7修改为1.6    (OK,运行成功!)


2.项目部署到tomcat后,启动tomcat,控制台正常启动. 

1)访问 http://localhost:8080  报错404 , 

2)访问 http://localhost:8080/alpha  报错404

3)访问 http://localhost:8080/alpha/login.jsp  报错404

经查, 是因为 tomcat(用的eclipse里面的,server local在workspace里面) 下面没有默认的那几个页面(index.html 等等) 导致问题1).

问题2,3 都是因为 login.jsp 当时是放在 WEB-INF 文件夹下造成的.

3.登录成功后,到list页面,出现乱码.

发现 list页面的title也是乱码, 将 login.jsp中的from表单提交,修改为post方法提交, action中,使用post方法处理,得到解决!


4.登录不成功,返回登录页面,提示信息乱码. (提示信息为中文时)

解决办法, 用forward不乱码. 使用 redirect时, redirect前,先抓马,jsp页面直接get就可以.

String str = java.net.URLEncoder.encode("用户名或密码错误","GBK");
resp.sendRedirect("login.jsp?msg=" + str);





  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值