(菜鸟来动手)SpringMVC+Spring+Mybatis整合(第一天) 没有框架的时候
2014-11-30 21:38
573 查看
这些天想把这几个框架整合一下,写下来记录一下,备忘!
因为很久没用过struts和hibernate了,而且个人感觉springMVC和Mybatis更方便.所以就整合一下这个!
第一天,我们先把没有框架时候的样子先做出来!
项目暂时就是一个学生登录,增删改查.整个项目分层为三层, action,servers,dao 层.目录如下图:
第一天实现一个很简单的功能:输入用户名密码,正确的话跳转到 查询列表页面,错误的话还是当前页面.
1.先定义model类
2.再来个数据库连接的类
3. 再来定义dao的实现(dao接口里面就个方法名,就不贴了)
4. 再来servers的实现
5.再来action
6. 登录的jsp页面
7.查询列表的jsp页面
8.web.xml
代码非常简单.不过搞了半天才搞出来.有不用框架的不习惯,更多的是基础薄弱的原因.
中间遇到的问题,记录一下.
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就可以.
因为很久没用过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);
相关文章推荐
- (菜鸟来动手)SpringMVC+Spring+Mybatis整合(第三天) SSM框架整合
- (菜鸟来动手)SpringMVC+Spring+Mybatis整合(第二天) 使用maven来构建项目
- SSM框架——详细整合教程(Spring+SpringMVC+MyBatis)
- Spring MVC+Mybatis 框架整合(二)
- SSM三大框架整合详细教程(Spring+SpringMVC+MyBatis)
- SSM框架——详细整合教程(Spring+SpringMVC+MyBatis)
- spring+websocket整合(springMVC+spring+MyBatis即SSM框架和websocket技术的整合)
- spring mvc +Mybatis3.1 整合的时候异常
- SSM框架——详细整合教程(Spring+SpringMVC+MyBatis)
- SSM框架——详细整合教程(Spring+SpringMVC+MyBatis)
- SSM框架——详细整合教程(Spring+SpringMVC+MyBatis)
- spring+websocket整合(springMVC+spring+MyBatis即SSM框架和websocket技术的整合)
- spring+websocket整合(springMVC+spring+MyBatis即SSM框架和websocket技术的整合)
- spring+websocket整合(springMVC+spring+MyBatis即SSM框架和websocket技术的整合)
- SSM三大框架整合详细教程(Spring+SpringMVC+MyBatis)
- Spring MVC+Mybatis 框架整合(一)
- SSM框架——详细整合教程(Spring+SpringMVC+MyBatis)
- Spring学习笔记----三大框架(Spring+SpringMVC+MyBatis)整合详细教程
- SSM框架——详细整合教程(Spring+SpringMVC+MyBatis)
- spring+websocket整合(springMVC+spring+MyBatis即SSM框架和websocket技术的整合)