栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

JavaWeb-JSP

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

JavaWeb-JSP

JSP 什么是JSP

Java Service Pages:java服务器端页面,和servlet一样,用于动态web技术

最大的特点:

  • 写JSP和写HTML一样
  • 区别
    • HTML只给用户提供静态的数据
    • JSP页面中可以嵌入java代码,为用户提供动态数据
JSP原理
  • JSP本质上就是一个servlet
  • tomcat的work目录下存放的就是JSP文件自动生成的XXX_jsp.java文件(还有编译的class文件)
  • 打开xxx_jsp.java文件,发现调用的还是servlet
  • html语句全部都被out.write(),减少了程序员的操作
  • jsp里写的java代码和html输出语句代码都在java文件的同一个方法(_jspService)里面
  • 修改jsp后重新运行,会先删除原来的java和class,再生成新的

JSP基础语法
<%%>		中间可以写java代码
<%= %>		中间写的变量或者表达式会被输出
<%!%>		中间写的代码会被当作全局变量(生成的java类中的全局变量)
<%----%>	jsp的注释
JSP指令
<%@%>		注意一下page里的错误和include里的包含file
还可以写为
错误处理还可以在web.xml中配置
九大内置对象
  • pageContext 存东西
  • request 存东西
  • response
  • session 存东西
  • application 【servletContext】存东西
  • config 【servletconfig】
  • out
  • page
  • exception

创建pageDemo01.jsp

<%@ page contentType="text/html;charset=UTF-8" language="java" isELIgnored="false" %>


    Title



<%
    pageContext.setAttribute("name1","司南杓1");   //保存的数据只在那一个页面中生效
    request.setAttribute("name2","司南杓2");       //保存的数据只在那一次请求中生效,但是转发的时候也会携带这个数据,重定向不会
    session.setAttribute("name3","司南杓3");       //保存的数据在一个会话中生效,不关闭浏览器,就一直存在
    application.setAttribute("name4","司南杓4");   //保存的数据在服务器中有效,只要服务器不关闭,数据就一直存在

%>

<%
    String name1 = (String) pageContext.findAttribute("name1");
    String name2 = (String) pageContext.findAttribute("name2");
    String name3 = (String) pageContext.findAttribute("name3");
    String name4 = (String) pageContext.findAttribute("name4");
    String name5 = (String) pageContext.findAttribute("name5");

%>
取出的值为:
${name1}       <%--注意要让EL表达式生效,在最上面--%>
${name2}
${name3}
${name4}

${name5} <%--EL表达式取值的时候会自动过滤null--%> <%=name5%>

创建pageDemo02.jsp

<%@ page contentType="text/html;charset=UTF-8" language="java" isELIgnored="false" %>


    Title


<%
    String name1 = (String) pageContext.findAttribute("name1");
    String name2 = (String) pageContext.findAttribute("name2");
    String name3 = (String) pageContext.findAttribute("name3");
    String name4 = (String) pageContext.findAttribute("name4");
%>
取出的值为:
${name1}       <%--注意要让EL表达式生效,在最上面--%>
${name2}
${name3}
${name4}


创建pageDemo03.jsp

<%@ page contentType="text/html;charset=UTF-8" language="java" %>


    Title



<%
    pageContext.forward("/index.jsp");
%>



测试结果:访问http://localhost:8080/jsp00/

访问:http://localhost:8080/jsp00/pageDemo02.jsp

访问:(http://localhost:8080/jsp00/pageDemo01.jsp)

访问:(http://localhost:8080/jsp00/pageDemo02.jsp)

访问:(http://localhost:8080/jsp00/pageDemo03.jsp)

  • pageContext.setAttribute(“name1”,“司南杓1”); //保存的数据只在那一个页面中生效
  • request.setAttribute(“name2”,“司南杓2”); //保存的数据只在那一次请求中生效,但是转发的时候也会携带这个数据,重定向不会
  • session.setAttribute(“name3”,“司南杓3”); //保存的数据在一个会话中生效,不关闭浏览器,就一直存在
  • application.setAttribute(“name4”,“司南杓4”); //保存的数据在服务器中有效,只要服务器不关闭,数据就一直存在
JSP标签、JSTL标签、EL表达式

这三个都需要导包


    taglibs
    standard
    1.1.2


    javax.servlet.jsp.jstl
    jstl
    1.2

EL表达式:

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

JSP标签:



    

JSTL标签:

  • 需要导jstl包
  • 需要添加一个<%@taglib prefix=“c” uri=“http://java.sun.com/jsp/jstl/core” %>
  • 就是多了一些像java里的if,out等操作


    

一句话总结,稍微了解即可,以防遇见远古代码看不懂,这玩意已经被淘汰了,没必要去深入学习。

JavaBean

实体类

JavaBean的特定写法:

  • 必须有一个无参构造
  • 属性必须私有化
  • 必须有对应的get set方法

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

ORM:对象关系映射

  • 表–>类
  • 字段–>属性
  • 行记录–>对象

这个应该很好理解~~

MVC三层架构

什么是MVC三层架构

Model,View,Controller

模型,视图,控制器三者分离。

Model

  • 业务处理:业务逻辑(Service)
  • 数据持久化:CRUD(Dao)

View

  • 展示数据
  • 提供链接发起Servlet请求(a,form,img。。。)

Controller

  • 接收用户请求
  • 让业务层去处理相关业务
  • 控制试图跳转
Filter过滤器

在服务器和资源之间加一层或者多层过滤器

实现过滤器接口即可

package myFilter;

import jakarta.servlet.*;
import jakarta.servlet.annotation.WebFilter;

import java.io.IOException;
@WebFilter("/filter/*")
public class CharacterEncodingFilter implements Filter {

    @Override
    public void init(FilterConfig filterConfig) throws ServletException {
        System.out.println("过滤器初始化");
    }

    @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");
        System.out.println("过滤执行前");
        filterChain.doFilter(servletRequest,servletResponse);//固定写法,代表继续向下执行
        System.out.println("过滤执行后");
    }

    @Override
    public void destroy() {
        System.out.println("过滤器销毁");
    }
}

写一个servlet类

package myservlet;

import jakarta.servlet.ServletException;
import jakarta.servlet.http.HttpServlet;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;

import java.io.IOException;

public class filterDemo01 extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        resp.getWriter().write("你好,世界!!!");
    }
}

在web.xml中配置映射(或者使用注解)




  Archetype Created Web Application

  
    CharacterEncodingFilter
    myFilter.CharacterEncodingFilter
  
  
    CharacterEncodingFilter
    /filter/*
  

  
    filterDemo01
    myservlet.filterDemo01
  
  
    filterDemo01
    /show
  
  
    filterDemo01
    /filter/show
  



这里重点提一下,在tomcat 10之前,使用javax下的包而且好像对xml里的位置没有严格要求

在tomcat 10里,使用的是jakarta下的包,要求注册写在一起,映射写在一起,不能混着写,

而且filter的优先级高,需要写在servlet的前面。

还有一件事,javax和jakarta是不能共存的,jakarta不能在jsp里面使用内置对象的方法,必须使用javax。。。

所以终极解决方案,换回tomcat 9,完美解决一些问题。

监听器
  • 实现接听接口类
  • 在xml里注册
  • 基本不用,经典白学
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/390030.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号