学习视频来自于:秦疆(遇见狂神说)Bilibili地址
他的自学网站:kuangstudy
我们缺乏的不是知识,而是学而不厌的态度
java过滤器能够对目标资源的请求和响应进行截取。过滤器的工作方式分为四种。request过滤器、forward过滤器、include过滤器、error过滤器。
解决中文乱码问题
public class CharacterEncodingFilter implements javax.servlet.Filter {
// 初始化:web服务器启动,就已经初始化了,对视等待过滤对象。
@Override
public void init(FilterConfig filterConfig) throws ServletException {
System.out.println("过滤器准备好了");
}
//Chain : 链
/*
1. 过滤中的所有代码,在过滤特定请求的时候都会执行
2. 必须要让过滤器继续同行
chain.doFilter(request,response);
*/
@Override
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
System.out.println("进入过滤器");
request.setCharacterEncoding("utf-8");
response.setCharacterEncoding("utf-8");
response.setContentType("text/html;charset=utf-8");
chain.doFilter(request, response);//让我们的请求继续走,如果不写,程序到这里就被拦截停止!
System.out.println("通过过滤器");
}
// 销毁:web服务器关闭的时候,过滤器会销毁
@Override
public void destroy() {
System.out.println("过滤器关闭");
}
}
配置web.xml
<filter>
<filter-name>CharacterEncodingFilter</filter-name>
<filter-class>pers.tianyu.filter.CharacterEncodingFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>CharacterEncodingFilter</filter-name>
<url-pattern>/f1/*</url-pattern>
</filter-mapping>
java中的监听器是指:监听并负责处理事件的方法,也叫事件监听器。Java中的监听涉及三个部分:1、事件;2、事件监听器;3、事件源。用户对组件的一个操作称之为一个事件。
统计网站在线人数
public class ListenerDamo implements HttpSessionListener {
//创建session监听: 看你的一举一动
//一旦创建Session就会触发一次这个事件!
@Override
public void sessionCreated(HttpSessionEvent se) {
ServletContext context = se.getSession().getServletContext();
// 打印sessionID
System.out.println(se.getSession().getId());
// 获取context中储存的在线人数
Integer onlineCount = (Integer) context.getAttribute("OnlineCount");
if (onlineCount == null) {
onlineCount = 1;
}else{
onlineCount = onlineCount+1;
}
context.setAttribute("OnlineCount",onlineCount);
}
//销毁session监听
//一旦销毁Session就会触发一次这个事件!
@Override
public void sessionDestroyed(HttpSessionEvent se) {
ServletContext context = se.getSession().getServletContext();
// 打印sessionID
System.out.println(se.getSession().getId());
// 获取context中储存的在线人数
Integer onlineCount = (Integer) context.getAttribute("OnlineCount");
if (onlineCount == null) {
onlineCount = 0;
}else{
onlineCount = onlineCount-1;
}
context.setAttribute("OnlineCount",onlineCount);
}
}
xml
<!--注册监听器-->
<listener>
<listener-class>pers.tianyu.listener.ListenerDamo</listener-class>
</listener>
public class TestPanel {
public static void main(String[] args) {
Frame frame = new Frame("中秋节快乐"); //新建一个窗体
Panel panel = new Panel(null); //面板
frame.setLayout(null); //设置窗体的布局
frame.setBounds(300,300,500,500);
frame.setBackground(new Color(0,0,255)); //设置背景颜色
panel.setBounds(50,50,300,300);
panel.setBackground(new Color(0,255,0)); //设置背景颜色
frame.add(panel);
frame.setVisible(true);
//监听事件,监听关闭事件
frame.addWindowListener(new WindowListener() {
@Override
public void windowOpened(WindowEvent e) {
}
@Override
public void windowClosing(WindowEvent e) {
System.exit(0);
}
@Override
public void windowClosed(WindowEvent e) {
}
@Override
public void windowIconified(WindowEvent e) {
}
@Override
public void windowDeiconified(WindowEvent e) {
}
@Override
public void windowActivated(WindowEvent e) {
}
@Override
public void windowDeactivated(WindowEvent e) {
}
});
}
}
思路
过滤器
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
HttpServletRequest req = (HttpServletRequest)request;
HttpServletResponse resp = (HttpServletResponse) response;
String level = (String)req.getSession().getAttribute("level");
System.out.println("过滤器:"+level);
if(level == null){
resp.sendRedirect(req.getContextPath()+"/loginerreo.jsp");
}
chain.doFilter(req,resp);
}
登录jsp
<form action="${pageContext.request.contextPath}/Login2" method="post">
<table>
<tr>
<td>用户</td>
<td><input type="text" name="username" ></td>
</tr>
<tr><td><input type="submit" value="登录"></td></tr>
</table>
</form>
登录servlet
req.setCharacterEncoding("utf-8");
resp.setCharacterEncoding("utf-8");
resp.setContentType("text/html;charset=utf-8");
// 获取数据
String username = (String)req.getParameter("username");
// 后台查询
HttpSession session = req.getSession();
if(username.equals("admin")){
session.setAttribute("level","vip1");
resp.sendRedirect(req.getContextPath()+"/level/WeCome.jsp");
}else {
session.removeAttribute("level");
resp.sendRedirect(req.getContextPath()+"/loginerreo.jsp");
}
注销
HttpSession session = req.getSession();
if (session != null) {
session.removeAttribute("level");
resp.sendRedirect(req.getContextPath() + "/Login.jsp");
}else{
resp.sendRedirect(req.getContextPath() + "/Login.jsp");
}