您的位置:首页 > 编程语言 > Java开发

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

2014-11-30 21:38 573 查看
这些天想把这几个框架整合一下,写下来记录一下,备忘!

因为很久没用过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);
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: