MVC设计模式
MVC开始是存在于桌面程序中的,M是指业务模型,V是指用户界面,C则是控制器,使用MVC的目的是将M和V的实现代码分离,从而使同一个程序可以使用不同的表现形式。
这是M,即数据类,是一个业务模型,在这里是建立数据库,并与数据库建立连接
package com.lingzhuo.sqlmvc;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.sql.Statement;
public class SqlManger {
private Connection connection;
private Statement state;
public Connection getConnection() {
return connection;
}
public void setConnection(Connection connection) {
this.connection = connection;
}
public Statement getState() {
return state;
}
public void setState(Statement state) {
this.state = state;
}
private static SqlManger manger;
public static synchronized SqlManger newInstance(){
if(manger==null){
manger=new SqlManger();
}
return manger;
}
private SqlManger(){
String driver = "com.mysql.jdbc.Driver";
String url = "jdbc:mysql://localhost:3306/clazz";
String user = "root";
String password = "1639189";
try {
Class.forName(driver);
connection=DriverManager.getConnection(url,user,password);
state=connection.createStatement();//数据库操作类
String userTable = "create table if not exists user(id int(10)not null primary key auto_increment,name varchar(20)binary not null,password varchar(20)binary not null)";
state.execute(userTable);
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
这是一个控制类,通过数据库的模型对数据库进行操作
package com.lingzhuo.sqlmvc;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
public class RegisterControl {
public void register(String username, String password) {
// TODO Auto-generated method stub
Statement state=SqlManger.newInstance().getState();
String insert = "insert into user(name,password)values('" + username + "','" + password+ "')";
try {
state.execute(insert);
System.out.println("注册成功");
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
只是最终的显示给客户的类,用来最终输入数据,显示数据
package com.lingzhuo.sqlmvc;
import java.awt.BorderLayout;
import java.awt.EventQueue;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.border.EmptyBorder;
import javax.swing.JTextField;
import javax.swing.JButton;
import javax.swing.JLabel;
import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;
public class Register extends JFrame {
private JPanel contentPane;
private JTextField textFielduser;
private JTextField textFieldpass;
/**
* Launch the application.
*/
public static void main(String[] args) {
EventQueue.invokeLater(new Runnable() {
public void run() {
try {
Register frame = new Register();
frame.setVisible(true);
} catch (Exception e) {
e.printStackTrace();
}
}
});
}
/**
* Create the frame.
*/
public Register() {
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setBounds(100, 100, 247, 301);
contentPane = new JPanel();
contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
setContentPane(contentPane);
contentPane.setLayout(null);
textFielduser = new JTextField();
textFielduser.setBounds(95, 37, 126, 33);
contentPane.add(textFielduser);
textFielduser.setColumns(10);
textFieldpass = new JTextField();
textFieldpass.setBounds(95, 102, 126, 33);
contentPane.add(textFieldpass);
textFieldpass.setColumns(10);
JButton btnNewButton = new JButton("注册");
btnNewButton.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent arg0) {
String userName=textFielduser.getText();
String password=textFieldpass.getText();
(new RegisterControl()).register(userName, password);
}
});
btnNewButton.setBounds(89, 170, 93, 23);
contentPane.add(btnNewButton);
JLabel label = new JLabel("用户名");
label.setBounds(23, 46, 54, 15);
contentPane.add(label);
JLabel label_1 = new JLabel("注册密码");
label_1.setBounds(23, 111, 54, 15);
contentPane.add(label_1);
}
}
事物
数据库事务(Database Transaction) ,是指作为单个逻辑工作单元执行的一系列操作,要么完全地执行,要么完全地不执行。
package com.lingzhuo.shiwu;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.sql.Statement;
public class MySql {
public static void main(String[] args) {
String driver = "com.mysql.jdbc.Driver";
String url = "jdbc:mysql://localhost:3306/clazz";
String user = "root";
String password = "1639189";
try {
Class.forName(driver);
Connection conn=DriverManager.getConnection(url,user,password);
Statement state=conn.createStatement();
String create="create table if not exists teacher(id int(10)not null primary key auto_increment,name varchar(20)not null)";
state.execute(create);
conn.setAutoCommit(false);
String insert1="insert into teacher(name)values('zhangsan')";
String insert2="insert into teacher(name)values('lisi')";
String insert3="insert into teachers(name)values('wangwu')";
String insert4="insert into teacher(name)values('zhaoliu')";
state.execute(insert1);
state.execute(insert2);
state.execute(insert3);
state.execute(insert4);
conn.commit();
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
在上述代码中,有四行语句是执行四个数据库插入操作,本来这四句是顺序执行,如果第三行出现错误,前两行的执行结果将会被保存,但是事物模式中,如果一旦某一环节出现错误,所有环节都会返回到上一状态,专业术语叫做回滚。
Serverlet
先安装ApacheTomcat网络服务器,然后使用ecalips javaEE版本来对服务器进行测试。
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<a>hello,world</a>此处可以放置某个网页的代码段
</body>
</html>
通过serverlet和网页进行交互,来模拟客户端和服务器上传下载文件。
package com.lingzhuo.tomcat;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
/**
* Servlet implementation class MyServerlet
*/
@WebServlet("/MyServerlet")
public class MyServerlet extends HttpServlet {
private static final long serialVersionUID = 1L;
/**
* @see HttpServlet#HttpServlet()
*/
public MyServerlet() {
super();
// TODO Auto-generated constructor stub
}
/**
* @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
*/
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
String username=request.getParameter("username");
String password=request.getParameter("password");
String name=Encoding.doEncoding(username);
System.out.println("用户名:"+name+" 密码:"+password);
response.setHeader("Content-type", "text/heml;charset=UTF-8");
response.getWriter().append("用户名:"+name+" 密码:"+password).append(request.getContextPath());
}
/**
* @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
*/
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
doGet(request, response);
}
}
由于网页的编码方式和eclipse中的编码方式不一样,这里另建了一个类来进行编码方式的转化。
package com.lingzhuo.tomcat;
import java.io.UnsupportedEncodingException;
public class Encoding {
public static String doEncoding(String str){
byte[] array;
try {
//将浏览器传过来的ISO-8859-1格式的信息转化为字节数组
array = str.getBytes("ISO-8859-1");
//将自己数组的信息转化为UTF-8格式的String类型
str=new String(array,"UTF-8");
} catch (UnsupportedEncodingException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return str;
}
}