jsp学习笔记之MVC模式(四)
四. MVC设计模式MVCModelViewController模型视图控制器1. Model一个功能用JavaBean实现2. Controller接收 请求,将请求跳转到模型进行处理;模型处理完毕后,再将结果 返回 给请求处。3. View用于展示、与用户交互。用html、js、css、jsp、jquery等前端技术实现4.Servlet符合规范的Java类a. 必须继承 javax.serv
四. MVC设计模式
| M | V | C |
|---|---|---|
| Model | View | Controller |
| 模型 | 视图 | 控制器 |
1. Model
一个功能
用JavaBean实现
2. Controller
接收 请求,将请求跳转到模型进行处理;
模型处理完毕后,再将结果 返回 给请求处。
3. View
用于展示、与用户交互。
用html、js、css、jsp、jquery等前端技术实现
4.Servlet
符合规范的Java类
- a. 必须继承 javax.servlet.http.HttpServlet
- b. 必须重写其中的doGet()或doPost()方法
doGet ():接收 并 处理 所有g e t 提交的请求
doPost():接收 并 处理 所有post 提交的请求
a. Servlet要使用必须配置:
-
Servlet2.5:web.xml

👇映射关系流程:
请求 👉<url-pattern>拦截 👉 根据<servlet-name>配对<servlet>中的name 👉 请求交由<servlet-class> -
Servlet3.0:@WebServlet
不需要在web.xml中配置,只需要在Servlet类的定义处写上注解:@WebServlet(“url-pattern值”)
注意:
-
如果.jsp文件不是根目录就需要用
../来返回根目录,类似:<a href="../../WelcomeServlet"> -
.xml文件中的 / 代表: localhost:8081/项目名 /
.jsp文件中的 / 代表: localhost:8081 /
b.Servlet的生命周期
五个阶段
加载 👉 初始化 👉 服务 👉 销毁 👉 卸载

加载:
初始化:init() ,该方法会在Servlet被加载并实例化的以后执行
服务:service()👉doGet()、doPost()
销毁:destory(),Servlet被系统回收时
卸载:
init():默认第一次访问时会被执行(只执行一次)
修改执行时间为服务一开启就执行init():
- Servlet2.5:

- Servlet3.0:

service()👉doGet()、doPost():调用几次执行几次
destory():关闭服务时,执行一次
5.Servlet API
由两个软件包组成:对应HTTP协议的软件包,对应于除了HTTP协议以外的其他软件包
即Servlet API可适用于任何通信协议
6. Servlet的继承关系

ServletConfig:接口
a. ServletContext getServletContext () :
获取Servlet.上下文对象 可用于创建application
ServletContext中的常见方法(application):
- getContextPath() :相对路径
- getRealPath(): 绝对路径
- setAttribute() 、getAttribute()
- String getInitParameter (String name) ;在当前Web容器范围内,获取名为name的参数值(初始化参数)
servlet2.5:

servlet3.0:
@WebServlet(value = "/WelcomeServlet",loadOnStartup = 1,initParams = {@WebInitParam(name="servletparaname30" ,value="servletparavalue30")})
注解只隶属于某一个具体的Servlet
全局参数还是在web.xml中配置
b. String getInitParameter (String name) :
在当前Servlet范围内,获取名为name的参数值(初始化参数)
HttpServletRequest中的方法:同request,

HttpServletResponse同上
7. MVC案例
login.jsp👇
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>登录页</title>
</head>
<body>
<form action="../../LoginServlet" method="post">
用户名:<input type="text" name="uname"><br/>
密码:<input type="password" name="upwd"><br/>
<input type="submit" value="登陆">
<input type="reset" value="取消"><br>
</form>
</body>
</html>
welcome.jsp👇
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>欢迎页面</title>
</head>
<body>
登陆成功!
</body>
</html>
Login.java👇
package qsx;
/**
* @Author: qsX
* @Time: 2020-05-03 17:07
* @Description:封装数据JavaBean,用于放置要传递的数据
*/
public class Login {
private int id ;
private String uname ;
private String upwd ;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
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;
}
public Login(int id, String uname, String upwd) {
this.id = id;
this.uname = uname;
this.upwd = upwd;
}
public Login(String uname, String upwd) {
this.uname = uname;
this.upwd = upwd;
}
public Login() {
}
}
LoginServlrt.java👇
package qsx;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
/**
* @Author: qsX
* @Time: 2020-05-03 21:20
* @Description: 控制器层,用于接收view中的请求,并分发给model
*/
@WebServlet("/LoginServlet")
public class LoginServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//处理登陆
req.setCharacterEncoding("utf-8");
String name = req.getParameter("uname");
String pwd = req.getParameter("upwd");
Login login = new Login(name,pwd);
//调用模型层的登录功能
int result = LoginDao.login(login);
if ( result == -1) {
//系统异常
resp.sendRedirect("/demo/mvc/login.jsp");
} else if (result == 0) {
//账号密码错误!
resp.sendRedirect("/demo/mvc/login.jsp");
} else if (result == 1) {
//登陆成功
resp.sendRedirect("/demo/mvc/welcome.jsp");
}
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
doGet(req, resp);
}
}
LoginDao.java👇
package qsx;
import javax.servlet.annotation.WebServlet;
import java.sql.*;
/**
* @Author: qsX
* @Time: 2020-04-29 23:28
* @Description:模型层,用于处理登陆操作
*/
public class LoginDao {
public static int login(Login login) {
String URL = "jdbc:oracle:thin:@localhost:1521:ORCL";
String USERNAME = "scott";
String PWD = "tiger";
Connection connection = null;
Statement statement = null;
ResultSet rs = null;
PreparedStatement preparedStatement = null;
try {
// a. 导入驱动,加载具体的驱动类
Class.forName("oracle.jdbc.OracleDriver");//加载具体的驱动类
// b. 与数据库建立连接
connection = DriverManager.getConnection(URL, USERNAME, PWD);
// c. 发送sql,执行(查)
String sql = "SELECT count(*) FROM login where uname=? and upwd=? group by uname";
preparedStatement = connection.prepareStatement(sql);
preparedStatement.setString(1, login.getUname());
preparedStatement.setString(2, login.getUpwd());
// 返回值表示,查询内容
rs = preparedStatement.executeQuery();
// d. 处理结果集(查询)(可选操作,没有返回就忽略)
int count = -1;
if (rs.next()) {
count = rs.getInt(1);
return count;
}
return count + 1;
} catch (ClassNotFoundException e) {
e.printStackTrace();
return -1;
} catch (SQLException e) {
e.printStackTrace();
return -1;
} catch (Exception e) {
e.printStackTrace();
return -1;
} finally {
try {
//执行完后关闭,后开先关
if (rs != null) {
rs.close();
}
if (preparedStatement != null) {
preparedStatement.close();
}
if (connection != null) {
connection.close();
}
} catch (SQLException e) {
e.printStackTrace();
}
}
}
}
更多推荐



所有评论(0)