JAVA 2022.7.28课程总结(JAVAWEB)

一、JSTL

1.1 概念

JSP标准标签库(JSTL)是一个JSP标签集合,它封装了JSP应用的通用核心功能。

JSTL支持通用的、结构化的任务,比如迭代,条件判断,XML文档操作,国际化标签,SQL标签。 除了这些,它还提供了一个框架来使用集成JSTL的自定义标签。

首先,将jstl jar包放到web app libraries下,这样就导入jar包了

 1.2 使用

在一个jsp下,taglib标签注明引入的标签,在使用引入标签的方法标签进行使用,页面显示效果如下

<%@taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>   

<c:out value="你好">你好</c:out>
<c:set var="text" value="你好111" scope="session"></c:set>
${sessionScope.text}

	<table>
	<tr><td>ID</td><td>账号</td><td>密码</td></tr>
	<c:forEach items="${userlist}" var="user">
		<tr><td>${user.id }</td><td>${user.username}</td><td>${user.userpass}</td></tr>
	</c:forEach>
	</table>  
	
	<h1>
	<c:if test="${empty LOGINUSER}">
		请登录	
	</c:if>
	<c:if test="${!empty LOGINUSER}">
		${LOGINUSER.username}
	</c:if>
	</h1>
	
	<c:forEach begin="0" end="9" step="1" var="temp">
	${temp }
	</c:forEach>

 

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
 <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
 <%@ taglib uri="http://java.sun.com/jsp/jstl/sql" prefix="sql" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<c:forTokens items="12345123412341212" delims="3" var="str">
	${str }
</c:forTokens>
<c:set var="it" value="文本" scope="request"></c:set>
<c:choose>
	<c:when test='${it eq "数字" }'>
		这是一个数字
	</c:when>
		<c:when test='${it eq "文本" }'>
		这是一个文本
	</c:when>
	<c:otherwise>
		我也不知道是啥
	</c:otherwise>
</c:choose>

<sql:setDataSource driver="com.mysql.cj.jdbc.Driver"
	url="jdbc:mysql://localhost:3306/mydata?useSSL=false&characterEncoding=utf8"
	user="root"
	password="123456" var="ds" scope="request"
	/>
<sql:query sql="select * from t_user" dataSource="${ds }" var="list" scope="request"></sql:query>
<c:forEach items="${list.rows }" var="row">
 	${row.username }
 </c:forEach>
</body>


</html>

 

 二、jsp生命周期

 

三、Filter 过滤

 

以LoginFilter为例,当访问到/pages/cart时,就会执行该filter,根据条件判断是否通过,当通过时,执行 chain.doFilter(request, response); 通过过滤 执行下一阶段

@WebFilter("/pages/cart")
public class LoginFilter implements Filter{
    public void destroy() {
        //销毁时执行的方法
    }
    public void doFilter(ServletRequest req, ServletResponse resp, FilterChain chain)
            throws IOException, ServletException {
        //登陆验证? 登陆不登陆有何区别 
        //登录后的账号的session中存在LOGINUSER的值
        //获取session对象,从中取LOGINUSER对应的值,取得到就登陆过

        if(req instanceof HttpServletRequest) {
            HttpServletRequest request=(HttpServletRequest) req;
            HttpServletResponse response=(HttpServletResponse) resp;
            HttpSession session=request.getSession();
            Object obj=session.getAttribute("LOGINUSER");
            if(obj!=null) {
                chain.doFilter(request, response);
            }else {
                String path = request.getContextPath();
                String basePath = request.getScheme() + "://"
                + request.getServerName() + ":" + request.getServerPort()
                + path + "/";
                response.sendRedirect(basePath+"index.html");
            }
        }
        return;
    }
    public void init(FilterConfig arg0) throws ServletException {
        //初始化的方法
    }

PageServlet是一个跳转器 过滤完就会执行到servlet,这里就执行到该servlet,然后通过servlet跳转到web-inf下的jsp文件


//跳转器
@WebServlet("/pages/*")
public class PageServlet extends HttpServlet{
    /**
     * 跳转页面用的服务
     * 规范page/cart        跳转到cart.jsp
     */
    protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
            
            String uri=request.getRequestURI();
            //xiangmu/page/cart
            int index=uri.lastIndexOf("/");
            //获取最后分路径
            String page=uri.substring(index+1);
            request.getRequestDispatcher("../WEB-INF/page/"+page+".jsp").forward(request, response);
}
}

在添加一个编码格式的过滤器,凡是经过/*的网页 都需要经过该过滤器,执行该过滤器的doFilter方法

@WebFilter("/*")
public class CharterFilter implements Filter{
    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
            throws IOException, ServletException {
        //设置请求对象的编码格式
        request.setCharacterEncoding("UTF-8");
        response.setCharacterEncoding("UTF-8");
        chain.doFilter(request, response);
    }
    public void destroy() {}
    public void init(FilterConfig filterConfig) throws ServletException {} }

四、监听

 

以MySessionListener 为例,创建一个session监听器,当创建该session对象时,执行sessioncreated方法,销毁该session对象时,执行sessiondestroyed方法

@WebListener
public class MySessionListener implements HttpSessionListener,HttpSessionAttributeListener{

	public void sessionCreated(HttpSessionEvent se) {
		HttpSession session=se.getSession();
		ServletContext sc=session.getServletContext();
		Integer onlineNum=(Integer)sc.getAttribute("ONLINE_NUM");
		if(onlineNum==null) {
			sc.setAttribute("ONLINE_NUM", 1);                       
		}else {                                                                  
			sc.setAttribute("ONLINE_NUM", onlineNum+1);
		}	                                                                        
	}
	public void sessionDestroyed(HttpSessionEvent se) {
		HttpSession session=se.getSession();
		ServletContext sc=session.getServletContext();
		Integer onlineNum=(Integer)sc.getAttribute("ONLINE_NUM");
		sc.setAttribute("ONLINE_NUM", onlineNum-1);
		//System.out.println("=-----saiodjnioas");
	}
	@Override
	public void attributeAdded(HttpSessionBindingEvent event) {
		HttpSession session=event.getSession();
		ServletContext sc=session.getServletContext();
		Integer onlineNum=(Integer)sc.getAttribute("ONLINE_LOGIN_NUM");
		if("LOGINUSER".equals(event.getName())) {
			if(onlineNum==null) {
				sc.setAttribute("ONLINE_LOGIN_NUM", 1);
			}else {
				sc.setAttribute("ONLINE_LOGIN_NUM", onlineNum+1);
			}
		}
	}

	@Override
	public void attributeRemoved(HttpSessionBindingEvent event) {

		
	}

	@Override
	public void attributeReplaced(HttpSessionBindingEvent event) {
		
	}

五、一些html语句

<%@ 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>
<link rel="icon" href="static/img/back.jpg"> 
</head>
<body>
<img src='static/img/back1.jpg' alt="图片不见了">
<a href="https://www.baidu.com" target="_blank">百度</a>
<a href="javascript:void(0);">空链接</a>
<a href="javascript:;">空链接</a>
<a href="mailto:"></a>
<div>34</div>
<span></span>
<h1>h1标题大 </h1><h6>h6标题小</h6>
<p>段落</p>
</body>
</html>

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值