MVC概念
Model (模型)、View(视图)、Controller(控制器)构成了MVC,是一种把数据、页面、业务逻辑分开实现的一种开发思想。
Model:处理应用程序数据逻辑或实体类,使用javaBean实现。
View:进行交互。使用html、css、JavaScript、jquery等前端代码实现。
Controller:实现业务逻辑:可以用JSP实现,一般使用Servlet实现。
MVC的使用
Controller层(Servlet):
package com.Test.mvcTest;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.UnsupportedEncodingException;
import java.security.Principal;
import java.util.Collection;
import java.util.Enumeration;
import java.util.Locale;
import java.util.Map;
import javax.servlet.AsyncContext;
import javax.servlet.DispatcherType;
import javax.servlet.RequestDispatcher;
import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.ServletInputStream;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import javax.servlet.http.HttpUpgradeHandler;
import javax.servlet.http.Part;
public class userServlet extends HttpServlet {
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
req.setCharacterEncoding("utf-8");
String uname = req.getParameter("uname");
String upwd = req.getParameter("upwd");
userBean ub = new userBean(uname,upwd);
userDao ud = new userDao();
int num = ud.contion(ub);
if (num==1) {
resp.sendRedirect("Hello.jsp");
}else {
resp.sendRedirect("login.jsp");
}
}
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
doGet(req,resp);
}
}
View层(JSP):
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<form action="userServlet" method="post">
用户名:<input type="text" name="uname" />
密码:<input type="password" name="upwd" />
<input type="submit" value="登录"/>
</form>
</body>
</html>
Modol层(javaBean):
package com.Test.mvcTest;
public class userBean { //javaBean
private String uname;
private String upwd;
public userBean(String uname, String upwd) {
this.uname = uname;
this.upwd = upwd;
}
public String getUname() {
return uname;
}
public void setUname(String uname) {
this.uname = uname;
}
public String getUpwd() {
return upwd;
}
public void setUpwd(String upwd) {
this.upwd = upwd;
}
}
package com.Test.mvcTest;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import javax.servlet.http.HttpServlet;
public class userDao { //实现数据库连接,和对数据库进行操作
Connection con;
String name = "root";
String passwd = "123456";
String url = "jdbc:mysql://localhost:3306/text";
String sql = "select count(*) from student where student_name=? and student_possword=?";
ResultSet re;
PreparedStatement pstm;
public int contion(userBean user) {
int count=0;
try {
Class.forName("com.mysql.jdbc.Driver");
con=DriverManager.getConnection(url,name,passwd);
pstm=con.prepareStatement(sql);
pstm.setString(1, user.getUname());
pstm.setString(2, user.getUpwd());
re=pstm.executeQuery();
if(re.next()) {
int i = re.getInt(1);
if (i>0) {
count =1;
}else {
count = 0;
}
}
return count;
} catch (ClassNotFoundException e) {
e.printStackTrace();
return -1;
}catch(SQLException e) {
e.printStackTrace();
return -1;
}finally {
try {
if(re!=null)re.close();
if(pstm!=null)pstm.close();
if(con!=null)con.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
}
Servlet
当Java的类符合一定的规范:
1、必须继承javax.servlet.http.HttpServlet
2、重写doGet()、doPost()方法。
(1)、doGet()方法接收并处理所有的get提交方式
(2)、doPost()方法接受并处理所有的post提交方式
Servlet的使用,必须进行配置:
Servlet2.5:配置web.xml
Servlet3.0:@WebServlet,该注解只属于对应的Servlet,所以只能设置该Servlet对应的参数,不能设置全局参数,例如用web.xml文件设置的Web容器全局参数:
<context-param>
<param-name>WebContextParam</param-name>
<param-value>WebContextValue</param-value>
</context-param>
Servlet2.5的web.xml的配置方式:
<servlet>
<servlet-name>a</servlet-name>
<servlet-class>com.servlettest.Welcome</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>a</servlet-name>
<url-pattern>/Welcome</url-pattern>
</servlet-mapping>
Servlet的执行流程:
请求 —> <url-pattern>/Welcome</url-pattern>
-->通过<servlet-mapping>
中的<servlet-name>a</servlet-name>
匹配<servlet>
中的<servlet-name>a</servlet-name>
,之后找到<servlet-class>
中的对应包中的类。
’ / ’ 在web.xml和JSP中的意义:
web.xml中 ’ / ’ 代表的是项目根路径(项目名为:ServletTest):
http://localhost:8080/ServletTest/
JSP中的 ’ / '代表的是服务器根路径:
http://localhost:8080/
Servlet的生命周期:
加载
初始化:init()
服务:service() - >doGet() doPost()
销毁:destory()
卸载
init():默认在第一次访问Servlet的时候执行(只执行一次)
但是修改xml文件
<servlet>
<load-on-startup>1<load-on-startup> //1代表第一个执行
</servlet>
destory():在关闭Tomcat服务器时,执行一次。
Servlet的API
Servlet的API:由两个软件包组成,对应于HTTP协议的软件包,对应除了HTTP协议以外的其他软件包。即Servlet API可以适用所有的通信协议
我们学习的Servlet是javax.servlet.http中的类和接口,shi基础的HTTP协议。
Servlet的继承关系
ServletConfig接口:
ServletContext getServletContext():获取Servlet上下文对象 (application)
String getInitParameter(String name):在当前Servlet范围中,获取name的值
ServletContext接口:
getContentPath():相对路径
getRealPath():绝对路径
setAttribute()、getAttribute()
String getInitParameter(String name):在当前Web容器中,获取名为name的值
Servlet中使用JSP对应对象的方法
out : PrintWriter out =response.getWriter();
Session : request.getSession();
application : request.getServeltContext();