JavaWeb-08-JSP

JavaWeb-08-JSP

1.概述

JSP全称Java Server Pages,是一种动态网页开发技术。它使用JSP标签在HTML网页中插入Java代码。标签通常以<%开头以%>结束。
JSP是一种Java servlet,主要用于实现Java web应用程序的用户界面部分。

2.JSP原理

  • 找到jsp编译后的文件

    image-20210316155526471

    //本人电脑上的jsp目录
    C:\Users\用户\AppData\Local\JetBrains\IntelliJIdea2020.1\tomcat\Unnamed_JavaWeb-05-SesoinAndCookie\work\Catalina\localhost\c\org\apache\jsp
    

    image-20210316160331145

    结论:jsp最后变成了java文件

  • 打开index_jsp.java分析

    浏览器向服务器发送请求,不管是什么资源,其本质都是在访问Servlet

    image-20210316155840772

    处理请求和响应

    image-20210316160930195

    内置对象

    image-20210316161343879

    HTML转换

    image-20210316161938866

    在JSP页面中,Java代码都会被原样输出,是HTML代码则会经过上图式转换(自动)

3.流程总结

image-20210316162928226

4.JSP基础语法

JSP表达式

<%--
JSP表达式
将程序的输出,输出到客户端
<%= 变量/表达式%>
--%>
<%= new java.util.Date()%>
<hr>

JSP代码片段

<%
    int sum = 0;
    for (int i = 1; i <= 100; i++) {
        sum+=i;
    }
    out.println("<h1>1-100的和:"+sum+"</h1>");
%>

在代码中嵌入HTML元素

<%for (int i = 0; i < 10; i++) {%>
<h1>我重复了<%= i%></h1>
<%}%>

JSP声名

<%--
JSP声名 +!
定义全局变量,超脱JspService()
--%>
<%!
    static {
        System.out.println("loading servlet!");
    }
    private int globalVar = 0;
    public void test(){
        System.out.println("进入了方法test!");
    }
%>

JSP注释

查看网页源代码时
<%--JSP注释--%> 不会再客户端显示
<!--HTML注释--> 会在客户端显示    

5.JSP指令

<%--定制错误页面--%>
<%@ page errorPage="error/500.jsp" %>
<%--显式的声名这是错误界面--%>
<%@ page isErrorPage="true" %>
    
//公共组件,include嵌入    
<%--@include 将三个页面合一--%>
<%@include file="common/header.jsp"%>
<h1>content</h1>
<%@include file="common/footer.jsp"%>

<%--jsp:include 拼接,本质还是3个界面(推荐,灵活性更高)--%>
<%--标签体--%>
<jsp:include page="/common/header.jsp"/>
<h1>content</h1>
<jsp:include page="/common/footer.jsp"/>
<!--错误界面的配置法,在web.xml配置-->
<error-page>
    <error-code>404</error-code>
    <location>/error/404.jsp</location>
</error-page>

6.九大内置对象

  • PageContext
  • Request
  • Reponse
  • Session
  • Application ------->ServletContext 存公共东西
  • config -------> ServletConfig
  • out
  • page
  • exception

作用域

image-20210317104727671

<%
    //页面范围,跳转后失效
    pageContext.setAttribute("name1","void1");//保存的数据只在一个页面中有效
    request.setAttribute("name2","void2");//保存的数据只在一次请求中有效,请求转发会携带这个数据
	//整个会话有效,别的页面可取得以下值
    session.setAttribute("name3","void3");//保存的数据只在一次会话中有效
    application.setAttribute("name4","void4");//保存的数据只在服务器中有效,从打开浏览器到关闭浏览器
%>

<%
    //从PageContext 取出,通过寻找的方式(也可以直接通过getAttribution)
    //类似双亲委派机制
    //从底层到高层(作用域)page->request->session->application
    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");
%>
<%--使用EL表达式取值自动处理空值--%>
<h1>取出的值:</h1>
<h2>${name1}</h2>
<h2>${name2}</h2>
<h2>${name3}</h2>
<h2>${name4}</h2>
<h2>${name5}</h2>       不显示
<hr>
<h2><%= name5%></h2>    null
 
    
<%
    //也可以这样设置作用域
    pageContext.setAttribute("hello","value of hello",PageContext.SESSION_SCOPE);
    //等价于 session.setAttribute("hello","value of hello");
%>
    
<%
    //页面跳转
    pageContext.forward("/pageContextDemo01.jsp");//一般在前端
    request.getRequestDispatcher("/pageContextDemo01.jsp").forward(request,response);//后端一般用这个
%>

实际应用场景

request:客户端向服务端发送请求,产生的数据,用户看完就没用了

session:客户端向服务端发送请求,产生的数据,用户看完,可能还会再用,(购物车)

application::客户端向服务端发送请求,产生的数据,一个用户看完,其他用户可能还会用

7.JSP标签,JSTL标签,EL表达式

依赖

<!--    jstl表达式的依赖-->
<dependency>
    <groupId>javax.servlet.jsp.jstl</groupId>
    <artifactId>jstl-api</artifactId>
    <version>1.2</version>
</dependency>
<!--    standard标签库-->
<dependency>
    <groupId>taglibs</groupId>
    <artifactId>standard</artifactId>
    <version>1.1.2</version>
</dependency>
</dependencies>

EL表达式:${}

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

JSP标签

<%--jsp标签--%>
<%--拼接界面--%>
<%--<jsp:include page=""></jsp:include>--%>
<%--localhost:8080/jsp/jspTag.jsp?name=void&id=000001--%>
<%--转发时携带参数--%>
<jsp:forward page="/jspTag2.jsp">

    <jsp:param name="name" value="void"/>
    <jsp:param name="id" value="000001"/>

</jsp:forward>

JSTL标签

JSTP标签库的使用是为了弥补HTML标签的不足,它可以自定义许多标签,可以供我们使用,功能和java代码一样

核心标签

导入

<%--引入jstl核心标签库,才能使用--%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<c:out>
<c:set>用于保存数据
<c:remove>用于删除数据
<c:catch>用来处理产生错误的异常状况,并且将错误信息储存起来
<c:if>与我们在一般程序中用的if一样
<c:choose>本身只当做<c:when>和<c:otherwise>的父标签
<c:when><c:choose>的子标签,用来判断条件是否成立
<c:otherwise><c:choose>的子标签,接在<c:when>标签后,当<c:when>标签判断为false时被执行
<c:import>检索一个绝对或相对 URL,然后将其内容暴露给页面
<c:foreach>基础迭代标签,接受多种集合类型
<c:forTokens>根据指定的分隔符来分隔内容并迭代输出
<c:param>用来给包含或重定向的页面传递参数<c:out>
<c:redirect>重定向至一个新的URL.
<c:url>使用可选的查询参数来创造一个URL

测试c:if

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%--引入jstl核心标签库,才能使用--%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
<h3>if 测试</h3>
<hr>
<form action="/jsp/jstlCore.jsp" method="get">
<%--
EL表达式
获取表单中的数据
${param.name}
--%>
    <input type="text" name="username" value="${param.username}">
    <input type="submit" value="登录">
</form>
<%--java代码--%>
<%--判断如果登录的名字是管理员,则登录成功--%>
<%if(request.getParameter("username").equals("admin")){
    out.print("login success");
}%>
    
<hr>
<%--核心标签库--%>
<c:if test="${param.username=='hello'}" var="isHello">
    <c:out value="hello~~~ 是彩蛋"/>
</c:if>
<c:out value="${isHello}"/>

</body>
</html>

测试c:choose c:when

<body>
<%--定义一个变量score值为85--%>
    <c:set var="score" value="85"></c:set>
    <c:choose>
        <c:when test="${score>=90}">
            <c:out value="你的成绩是优秀"/>
        </c:when>
        <c:when test="${score>=80}">
            <c:out value="你的成绩是良好"/>
        </c:when>
        <c:when test="${score>=70}">
            <c:out value="你的成绩是中等"/>
        </c:when>
        <c:when test="${score>=60}">
            <c:out value="你的成绩是及格"/>
        </c:when>
        <c:when test="${score<60}">
            <c:out value="你的成绩是不及格"/>
        </c:when>
    </c:choose>
</body>

测试c:foreach

<body>
<%
    ArrayList<String> peoples = new ArrayList<>();
    peoples.add("小明");
    peoples.add("小A");
    peoples.add("小B");
    peoples.add("小C");
    peoples.add("小D");
    request.setAttribute("list",peoples);
%>
<%--
var 遍历的每一个变量
items 遍历的对象
begin 开始
end  结束
step 步长
--%>
<c:forEach var="people" items="${list}">
    <c:out value="${people}"/><br/>
</c:forEach>
<hr>
<c:forEach var="people" items="${list}" begin="1" end="3" step="2">
    <c:out value="${people}"/><br/>
</c:forEach>
</body>
格式化标签
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>
SQL标签
<%@ taglib prefix="sql" uri="http://java.sun.com/jsp/jstl/sql" %>
XML标签
<%@ taglib prefix="x" uri="http://java.sun.com/jsp/jstl/xml" %>

8.JavaBean

实体类

JavaBean有特定的写法:

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

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

ORM:对象关系映射

  • 表---->类
  • 字段---->属性
  • 行记录---->对象
<%
    //java的方式
//    Person person = new Person();
//    person.setId();
//    person.setName();
//    person.setAge();
//    person.setAddress();
%>
<%----jsp标签的方式%>
<jsp:useBean id="person" class="com.cmy.pojo.Person" scope="page"/>
    
<jsp:setProperty name="person" property="id" value="1"/>
<jsp:setProperty name="person" property="name" value="void"/>
<jsp:setProperty name="person" property="age" value="20"/>
<jsp:setProperty name="person" property="address" value="福建"/>

id:<jsp:getProperty name="person" property="id"/>
姓名:<jsp:getProperty name="person" property="name"/>
年龄:<jsp:getProperty name="person" property="age"/>
地址:<jsp:getProperty name="person" property="address"/>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Java EE 项目的目录结构可以根据具体的需求进行灵活设计,但一般情况下,推荐使用以下的标准目录结构: ``` project ├── src │ ├── main │ │ ├── java │ │ │ └── com │ │ │ └── example │ │ │ ├── controller │ │ │ ├── dao │ │ │ ├── entity │ │ │ ├── service │ │ │ └── util │ │ ├── resources │ │ │ ├── mapper │ │ │ └── db.properties │ │ └── webapp │ │ ├── WEB-INF │ │ │ ├── classes │ │ │ ├── lib │ │ │ └── web.xml │ │ ├── css │ │ ├── js │ │ ├── images │ │ └── index.jsp │ └── test │ ├── java │ └── resources ├── target ├── pom.xml └── README.md ``` 其中,各个目录的作用如下: - `src/main/java`:存放项目的 Java 源代码,按照包名分层,一般包括 `controller`、`dao`、`entity`、`service` 和 `util` 等包; - `src/main/resources`:存放项目的配置文件和资源文件,一般包括数据库连接配置文件 `db.properties`、MyBatis 的 mapper 文件等; - `src/main/webapp`:存放 Web 应用的 Web 资源,包括 JSP 页面、CSS 样式表、JavaScript 脚本等; - `src/test/java`:存放项目的测试代码; - `src/test/resources`:存放测试代码所需要的资源文件; - `target`:存放编译后的 .class 文件、打包后的 .war 文件等; - `pom.xml`:Maven 项目管理工具的配置文件; - `README.md`:项目说明文件。 以上是一种常见的 Java EE 项目目录结构,但并不是唯一的标准。在实际开发中,可以根据项目的具体需求进行合理的调整和修改。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值