石一歌的JavaWeb笔记

转发和重定向

Jsp内置对象和作用域

九大对象

  • PageContent 可存值
  • Requst 可存值
  • Response
  • Session 可存值
  • Application(ServletContext) 可存值
  • Config (ServletConfig)
  • out
  • page
  • exception

四大作用域

pageContext.setAttribute("name1", "1");

当前页面有效

request.setAttribute("name2", "2");

转发有效,重定向失效

session.setAttribute("name3", "3");

关闭浏览器前有效

application.setAttribute("name4", "4");

服务器共享
可通过setAttribute的第三个参数设置Attribute的作用域
拓展-双亲委派机制

jsp语法

jsp语法

  • jsp表达式

  • 程序输出到客户端

    <%=	
        new java.util.Date()
    %>
    
  • jsp脚本片段

    <% 
        int sum=0; 
        for (int i=0; i < 100; i++) 
        { 
            sum +=i; 
        } 
        System.out.println(sum);
        out.println("<h1>Sum" + sum + "</h1>");
    %>
    
  • jsp声明
    会被编译到jsp生成的java类中,其他会被放置到jspservlet方法

    <%! 
        static { 
            System.out .println("loading!!!"); 
        } 
        private int globalVar=0; 
        public void han()
        { 
            System.out.println("进入函数"); 
            } 
    %>
    
  • 注释

    <%-- Jsp注释在客户端会被直接删除,安全性高--%>
    <!-- HTML注释会被保存下来-->
    
  • 扩展el表达式

Jsp指令

  • 配置错误页面

    1. 直接指向错误页
    <%@ page errorPage="error/500.jsp" %>
    

    2.web.xml配置错误页

    <error-page>
      <error-code>404</error-code>
      <location>/error/404.jsp</location>
    </error-page>
    <error-page>
      <error-code>500</error-code>
      <location>/error/500.jsp</location>
    </error-page>
    
  • 提取公共页面

    1. <%@include file=“”%>将页面组合起来
    <%@include file="common/header.jsp" %>
    <h1>主题</h1>
    <%@include file="common/footer.jsp" %>
    
    2. <-jsp:include page=“”->拼接页面,还是三个页面,常用(变量互不影响)
    
    <jsp:include page="/common/header.jsp"/>
    <h1>主题</h1>
    <jsp:include page="/common/footer.jsp"/>
    

Jsp标签&JSTL标签&EL表达式

EL表达式:$

  • 获取数据
  • 执行运算
  • 获取web开发常用对象

Jsp标签

<jsp:include page="Jsp02.jsp"></jsp:include>
<%--包含--%>
<jsp:forward page="/Jsptag02.jsp">
    <%--转发--%>
    <jsp:param name="value1" value="1"/>
    <%--传参--%>
    <jsp:param name="value2" value="2"/>
</jsp:forward>

JSTL标签

为了弥补html标签的不足,jstl标签库

核心标签

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

引用核心标签库的语法

<form action="coreif.jsp" method="get">
    <input type="text" name="username" value="${param.username}">
    <input type="submit" value="login">
</form>
<%--<%--%>
<%--    if (request.getParameter("username").equals("admin"))--%>
<%--        out.println("登陆成功");--%>
<%--%>--%>


<c:if test="${param.username=='admin'}" var="isAdmin" scope="request">
    <c:out value="管理员欢迎您"></c:out>
</c:if>
<c:out value="${isAdmin}"></c:out>



<c:set var="score" value="100"></c:set>
<c:choose>
    <c:when test="${score>=90}">
        优秀
    </c:when>
    <c:when test="${score<60}">
        不及格
    </c:when>
</c:choose>



<%--var是每次变量--%>
<%--items是被遍历的对象--%>
<%--begin是起点--%>
<%--end是终点--%>
<%--step是步长--%>
<%--遍历常用--%>
<c:forEach begin="1" end="2" step="1" var="people" items="${list}">
    <c:out value="${people}"></c:out>
    <br>
</c:forEach>

过滤器

过滤网站数据

  • 处理中文乱码
  • 登陆验证

开发步骤

  1. 导包

  2. 编写过滤器

    实现Filter接口,重写方法

@Override
    //初始化
    public void init(FilterConfig filterConfig) throws ServletException {
        System.out.println("初始化完成");
    }

    @Override
//    chain:链
//    过滤中所有代码,在特定请求时执行
//    必须要过滤器执行
    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("正在过滤");
        filterChain.doFilter(servletRequest, servletResponse);//请求继续执行
        System.out.println("过滤完成");
    }

    @Override
//    销毁
    public void destroy() {
        System.out.println("过滤器已销毁");
    }
  1. web.xml配置过滤器

监听器

实现一个监听器

  1. 编写监听器

    实现接口

    //统计网站在线人数(session)
    public class OnlineCountListener implements HttpSessionListener {
        @Override
    //    创建session监听
        public void sessionCreated(HttpSessionEvent se) {
            //获取session并提权
            ServletContext ctx = se.getSession().getServletContext();
    
            System.out.println(se.getSession().getId());
    //        获取session值
            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);
        }
    
        @Override
    //    销毁session监听
        public void sessionDestroyed(HttpSessionEvent se) {
            //获取session并提权
            ServletContext ctx = se.getSession().getServletContext();
            se.getSession().invalidate();
    //        获取session值
            Integer onlinecount = (Integer) ctx.getAttribute("OnlineCount");
    //处理减一
            if (onlinecount == null)
                onlinecount = new Integer(0);
            else {
                int count = onlinecount.intValue();
                onlinecount = new Integer(count - 1);
            }
    
            ctx.setAttribute("OnlineCount", onlinecount);
        }
    }
    
    1. 注册监听器
     <listener>
            <listener-class>com.nuc.listener.OnlineCountListener</listener-class>
        </listener>
    

JavaBean

  • 必须无参构造
  • 属性必须私有化
  • 必须要有get/set方法

一般用来和数据库字段做映射 ORM

ORM 对象关系映射
表->类
字段->属性
行记录->对象

Jabc事务

事务

ACID原则

开启事务 start transaction
事务提交 commit()
事务回滚 rollback()
关闭事务
posted @   Faetbwac  阅读(41)  评论(0编辑  收藏  举报
编辑推荐:
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
点击右上角即可分享
微信分享提示