右击项目名称 添加框架支持 web
JavaBean
pojo/实体类
无参构造器
属性私有化
对应的get/set
一般用来和数据库的字段做映射 ORM
ORM:对象关系映射
表 ------类
字段 -----属性
行记录 ------对象
MVC三层架构
Servlet和JSP都可以写Java代码 ,为了易于维护和使用, servlet 专注于处理请求,以及控制试图跳转 JSP专注于显示数据
Controller 控制器 --------- Servlet 1.接受用户的请求 2.响应给客户端内容3.重定向或转发(视图跳转)
Model 模型 ---------- JavaBean ----》JDBC《------ 数据库
View 试图 --------- JSP 1.展示数据2.提供可以供我们操作的请求
用户访问控制层,控制层直接操作数据库
JDBC
Controller 控制器 --------- Servlet 1.接受用户的请求 2.交给业务层去做3.视图跳转
↓ 转发或者重定向 操作↑ Model 模型 service(业务层)(login、logout、查询) --------> JavaBean ----》DAO ----> JDBC《------ 数据库
View 试图 --------- JSP 1.展示数据2.提供用户操作
Model
业务处理:业务逻辑(Service)
数据持久层 CRUD (Dao)
View
展示数据
提供链接发起Servlet请求
Controller(Servlet)
接受用户的请求:
交给业务层处理对应的代码
控制试图的跳转
登录 —》接受用户的登录请求-----》处理用户的请求(获取用户登录的参数)-----》交给业务层处理登录业务(判断用户名密码是否正确:事务)-----》Dao层查询用户名和密码是否正确----》数据库
过滤器 Filter
过滤器 :用来过滤网站的数据;
处理中文乱码
用户验证
Filter开发步骤
1.导依赖 javax.servlet
2.编写过滤器 实现Filter接口 导包不要错javax.servlet.Filter
public class CharacterEncodingFilter implements Filter {
//初始化
public void init(FilterConfig filterConfig) throws ServletException {
}
//Chain链
// 1.过滤中的所有代码,在过滤特定请求的时候都会执行
//2.必须要让过滤器继续通行
//chain.doFilter(request,response);
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
request.setCharacterEncoding("utf-8");
response.setCharacterEncoding("utf-8");
response.setContentType("text/html;charset=UTF-8");
System.out.println("执行前");
chain.doFilter(request,response);//让我们的请求继续走,若不写 程序就会被拦截停止
System.out.println("执行后");
}
//销毁 Web服务器关闭才被销毁
public void destroy() {
}
}
3.在web.xml中配置Filter
filter
com.zxw.filter.CharacterEncodingFilter
filter
<url-pattern>/servlet/*</url-pattern>
</filter-mapping>
监听器 Listener
每个事件中都有监听
1.编写一个监听器
public class OnlineCountListener implements HttpSessionListener {
//创建session监听:一旦创建session就会触发一次这个事件
public void sessionCreated(HttpSessionEvent se) {
ServletContext ctx = se.getSession().getServletContext();
Integer onlineCount = (Integer) ctx.getAttribute(“OnlineCount”);
if (onlineCount == null) {
onlineCount = new Integer(1);
} else {
int count = onlineCount.intValue();
onlineCount = new Integer(count + 1);
}
ctx.setAttribute("OnlineCount", onlineCount);
}
//一旦销毁session就会触发一次这个事件
public void sessionDestroyed(HttpSessionEvent se) {
ServletContext ctx = se.getSession().getServletContext();
Integer onlineCount = (Integer) ctx.getAttribute("OnlineCount");
if (onlineCount == null) {
onlineCount = new Integer(1);
} else {
int count = onlineCount.intValue();
onlineCount = new Integer(count - 1);
}
ctx.setAttribute("OnlineCount", onlineCount);
}
}
2.注册监听器 web.xml
com.zxw.listener.OnlineCountListener
3.看情况是否使用
监听器使用场景
用户登录
1.用户登录之后,向Session中放入用户的数据
2.进入主页的时候要判断用户是否已经登录(在锅炉其中实现)
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
HttpServletRequest request1 = (HttpServletRequest) request;
HttpServletResponse response1 = (HttpServletResponse) response;
if(request1.getSession().getAttribute("USER_SESSION") == null){
response1.sendRedirect("/sys/error.jsp");
}
将项目中经常用到的常量封装到一个类里面
User
id
name
grade 等级
VIP1
VIP2
VIP3
VIP4
Filter 权限管理
if(request1.getSession().getAttribute(“USER_SESSION”).grade == VIP1){
response1.sendRedirect("/vip1/index.jsp");
}
if(request1.getSession().getAttribute(“USER_SESSION”).grade == VIP2){
response1.sendRedirect("/vip2/index.jsp");
}
if(request1.getSession().getAttribute(“USER_SESSION”).grade == VIP3){
response1.sendRedirect("/vip3/index.jsp");
}