JavaBean
实体类
JavaBean有特定的写法:
- 必须要有一个无参构造
- 属性必须私有化
- 必须有对应的get/set方法;
一般用来和数据库的字段做映射ORM;
ORM:对象关系映射
- 表—>类
- 字段—>属性
- 行记录—>对象
public class User {
private int id;
private String name;
private int age;
public User() {
}
public User(int id, String name, int age) {
this.id = id;
this.name = name;
this.age = age;
}
public void setId(int id) {
this.id = id;
}
public void setName(String name) {
this.name = name;
}
public void setAge(int age) {
this.age = age;
}
public int getId() {
return id;
}
public String getName() {
return name;
}
public int getAge() {
return age;
}
}
jsp代码
<%--
Created by IntelliJ IDEA.
User: 17469
Date: 2022/5/23
Time: 20:33
To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Title</title>
</head>
<body>
<%-- 创建一个JavaBean 作用域:page --%>
<jsp:useBean id="user01" class="com.yovx.pojo.User" scope="page"/>
<%-- 为JavaBean赋值 --%>
<jsp:setProperty name="user01" property="name" value="Yovx"/>
<jsp:setProperty name="user01" property="age" value="22"/>
<jsp:setProperty name="user01" property="id" value="01"/>
<%-- 取值 --%>
id:<jsp:getProperty name="user01" property="id"/><br>
name:<jsp:getProperty name="user01" property="name"/><br>
age:<jsp:getProperty name="user01" property="age"/>
</body>
</html>
处理404/500跳转其他页面
<!-- 处理404 500页面 -->
<error-page>
<error-code>404</error-code>
<location>/error.jsp</location>
</error-page>
<error-page>
<error-code>500</error-code>
<location>/error500.jsp</location>
</error-page>
MVC三层框架
什么是mvc:Model,view,Controller 模型,视图,控制器
Model
- 业务处理:业务逻辑(Service)
- 数据持久层:CRUD(Dao)
View - 展示数据
- 提供链接发起Servlet请求(a,form,img…)
Controller(Servlet) - 接收用户的请求:(req:请求参数,Session信息…)
- 交给业务处理对应的代码
- 控制视图的跳转
登录--->接收用户的登录请求--->处理用户的请求(获取用户登录的参数,username,password)---->交给业务层处理登录业务(判断用户名密码是否正确:事务)--->dao层查询用户名和密码是否正确-->数据库
Filter
Filter:过滤器,用来过滤网站的数据;
- 处理中文乱码
- 登录验证。。。
实现Filter接口,重写对应的方法
import javax.servlet.*;
import java.io.IOException;
public class CharacterEncodingFilter implements Filter {
// 初始化:web服务器启动时,就初始化,随时等待过滤对象
@Override
public void init(FilterConfig filterConfig) throws ServletException {
System.out.println("CharacterEncodingFilter初始化");
}
// FilterChain 链
/*
1.过滤中的所有代码,在特定的过滤条件下都会执行
2.必须让过滤继续同行
filterChain.doFilter(servletRequest,servletResponse);
*/
@Override
public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
// 设置编码
servletRequest.setCharacterEncoding("utf-8");
servletResponse.setCharacterEncoding("utf-8");
servletResponse.setContentType("text/html;charset=UTF-8");
System.out.println("CharacterEncodingFilter执行前");
filterChain.doFilter(servletRequest,servletResponse);
System.out.println("CharacterEncodingFilter执行后");
}
// 销毁:web服务器关闭时,过滤会被销毁
@Override
public void destroy() {
System.out.println("CharacterEncodingFilter销毁");
}
}
xml配置文件
<!-- 配置过滤器 -->
<filter>
<filter-name>CharacterEncodingFilter</filter-name>
<filter-class>com.yovx.filter.CharacterEncodingFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>CharacterEncodingFilter</filter-name>
<url-pattern>/Servlet/*</url-pattern>
</filter-mapping>
<servlet>
<servlet-name>FilterServlet</servlet-name>
<servlet-class>com.yovx.Servlet.FilterServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>FilterServlet</servlet-name>
<url-pattern>/Servlet/FilterServlet</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>FilterServlet</servlet-name>
<url-pattern>/filterServlet</url-pattern>
</servlet-mapping>
Listener
监听
package com.yovx.listener;
import javax.servlet.ServletContext;
import javax.servlet.http.HttpSessionEvent;
import javax.servlet.http.HttpSessionListener;
// 统计网站在线人数,统计session
public class OnlineCountListener implements HttpSessionListener {
// 创建Session监听:看你的一举一动
// 一旦创建Session就会触发一次这个事件
@Override
public void sessionCreated(HttpSessionEvent se) {
ServletContext ctx = se.getSession().getServletContext();
System.out.println(se.getSession().getId());
Integer onlineCount = (Integer) ctx.getAttribute("onlineCount");
System.out.println("onlineCount==========="+onlineCount);
if (onlineCount == null){
onlineCount = new Integer(1);
}else {
onlineCount = new Integer(onlineCount+1);
}
ctx.setAttribute("onlineCount",onlineCount);
}
// 销毁 一旦销毁Session就会触发这个事件
@Override
public void sessionDestroyed(HttpSessionEvent se) {
ServletContext ctx = se.getSession().getServletContext();
System.out.println(se.getSession().getId());
Integer onlineCount = (Integer) ctx.getAttribute("onlineCount");
if (onlineCount == null){
onlineCount = new Integer(0);
}else {
onlineCount = new Integer(onlineCount-1);
}
ctx.setAttribute("onlineCount",onlineCount);
}
}
xml配置
<listener>
<listener-class>com.yovx.listener.OnlineCountListener</listener-class>
</listener>
jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>$Title$</title>
</head>
<body>
<h1>
当前有:
<span style="color: blue">
<%=this.getServletConfig().getServletContext().getAttribute("onlineCount")%>
</span>
人在线
</h1>
</body>
</html>