2016.12.13
java学习历程(2):web项目入手(MVC)
一.最基本的项目构架
jsp+javaBean+servlet
既MVC框架:View+model+Controller
JSP:只负责在前段向客户显示前段界面
javaBean:负责进行数据处理,方法的实现
servlet :相当于一个路由器,去route&&forword数据流
并附代码解释:(简单的登陆页面,校验用户的用户名和密码是否正确)
在servlet中的解释几点:
(1):servelet的原理
个人的理解是,servlet是服务器端的java程序,至于功能,我想放在MVC中可以更好的理解,例如,用户在jsp前段发送request请求传向服务器(唯一表示:网络协议+IP地址+port端口号),服务器在此时即为servlet去判断调用哪个model即javaBean去处理数据,这样思考的的话,前段,判断,处理全部业务全部被分离处理,干净利索。
例如:
package com.seLvlet.deMo_a;
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class myservlet extends HttpServlet {
/**
* Constructor of the object.
*/
public myservlet() {
super();
}
/**
* Destruction of the servlet. <br>
*/
public void destroy() {
super.destroy(); // Just puts "destroy" string in log
// Put your code here
}
/**
* The doGet method of the servlet. <br>
*
* This method is called when a form has its tag value method equals to get.
*
* @param request
* the request send by the client to the server
* @param response
* the response send by the server to the client
* @throws ServletException
* if an error occurred
* @throws IOException
* if an error occurred
*/
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
String name=request.getParameter("username");
String password=request.getParameter("password");
myBean mb = new myBean();
mb.connectDb(name, password);
String message=mb.getMessage();
String url="returnInf.jsp?tt="+message+"";
url=new String(url.getBytes("GBK"),"ISO-8859-1");
response.sendRedirect(url);
}
/**
* The doPost method of the servlet. <br>
*
* This method is called when a form has its tag value method equals to
* post.
*
* @param request
* the request send by the client to the server
* @param response
* the response send by the server to the client
* @throws ServletException
* if an error occurred
* @throws IOException
* if an error occurred
*/
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
this.doGet(request, response);
}
/**
* Initialization of the servlet. <br>
*
* @throws ServletException
* if an error occurs
*/
public void init() throws ServletException {
// Put your code here
}
}
这里对servlet的xml文件进行说明一下:
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="3.0"
xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd">
<servlet>
<description>This is the description of my J2EE component</description>
<display-name>This is the display name of my J2EE component</display-name>
<servlet-name>myservlet</servlet-name>
<servlet-class>com.seLvlet.deMo_a.myservlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>myservlet</servlet-name>
<url-pattern>/myservlet</url-pattern>
</servlet-mapping>
</web-app>
part1:
This is the description of my J2EE component
This is the display name of my J2EE component
myservlet
com.seLvlet.deMo_a.myservlet
说明了servlet的名字和位置
part2:
servlet-mapping>
<servlet-name>myservlet</servlet-name>
<url-pattern>/myservlet</url-pattern>
</servlet-mapping>
映射的话是对于下一波转发的URL的设置,<url-pattern>/myservlet</url-pattern>则为web访问该servlet的方法
(2):javaBean的作用:分离并处理业务逻辑,拓展结构
“`
package com.seLvlet.deMo_a;
import java.sql.*;
import com.seLvlet.deMo_a.*;
import com.serLvlet.cometure.dbConnection;
public class myBean {
private String message = “”;
public void connectDb(String name, String password) {
String driver = "com.mysql.jdbc.Driver";
String url = "jdbc:mysql://127.0.0.1:3306/test";
String user = "root";
String mysqlpassword = "root";
String sqlUpdate = "INSERT INTO test_aa(NAME,PASSWORD) VALUES('admin','admin')";
String sqlQueryC = "SELECT NAME,PASSWORD FROM test_aa WHERE NAME='admin'AND PASSWORD='admin'";
int rowNumber = 0;
String sqlQuery = "SELECT * FROM test_aa";
try {
Class.forName(driver);
Connection con = DriverManager.getConnection(url, user,
mysqlpassword);
if (!con.isClosed()) {
System.out.println("数据库连接成功");
}
Statement st1, st2 = null, st3;
st1 = con.createStatement();// st1查询语句
st1.executeUpdate(sqlUpdate);
ResultSet rs1 = st1.executeQuery(sqlQuery);
// ResultSet rs3=st2.executeQuery(sqlQueryPassW);
/*
* st2=con.createStatement();// st3=con.createStatement();//
*/
rowNumber = this.rowNu_Next(rs1);
ResultSet rs2 = st1.executeQuery(sqlQueryC);
// -------------开始数据库数据校验
while (rs2.next()) {
if (name.equals(rs2.getString("NAME"))
&& password.equals(rs2.getString("PASSWORD"))) {
message = "successed to login";
}else{
message="failed to login";
}
}
} catch (ClassNotFoundException e1) {
// TODO: handle exception
e1.printStackTrace();
} catch (SQLException e2) {
// TODO Auto-generated catch block
e2.printStackTrace();
}
}
public int rowNu_Next(ResultSet rs) {
int Nu = 0;
try {
while (rs.next()) {
Nu++;
}
rs.first();
} catch (SQLException e3) {
// TODO Auto-generated catch block
e3.printStackTrace();
}
return Nu;
}
public int rowNu_last(ResultSet rs) {
int Nu = 0;
try {
rs.last();
Nu = rs.getRow();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return Nu;
}
public String getMessage() {
System.out.println(message);
return message;
}
}
(3):jsp页面只是单纯的显示页面并不做过多的说明