Java 二阶段 Jsp

Jsp

Java Server Pages, Java服务器页面。和Servlet一样,是一种动态网页开发技术。基于HTML模板。适用于页面展示。

脚本

<%--    脚本--%>
    <%
        //局部变量,方法里面
        int num =100;
        String name = "小轩";
        Date date = new Date();
        List<String> list = new ArrayList<>();
        list.add("西瓜");
        list.add("苹果");

        //输出
//        out.write(num);
//        out.write("<br/>");
//        out.write(name);
//        out.write("<br/>");
//        out.write(date.toString());
//        out.write("<br/>");
//        out.write(list.toString());
    %>
    <%--脚本表达式--%>
    <%=name%><br/>
    <%=date%><br/>
    <%=num%><br/>
    <%=list%><br/>
    
    <%--声明成员变量,方法,类里面--%>
    <%!
        //声明成员变量
        private String name = "轩儿";
        private int age = 20;

        //声明方法
        public String getName(){
            return name;
        }
    %>
    <%=name%><br/>
    <%=age%><br/>
    <%=getName()%><br/>

Jsp注释(java文件看不到,浏览器也看不到)

在这里插入图片描述

<%--jsp注释,是看不到的--%>
<%--    <%=name%><br/>--%>
<%--    <%=age%><br/>--%>
<%--    <%=getName()%><br/>--%>
<%--    <p>我爱Java,Java爱我</p>--%>

根目录是以端口号为起点。

Jsp和Servlet的关系

在这里插入图片描述

Jsp工作原理

在这里插入图片描述

Jsp指令

在这里插入图片描述

page指令

在这里插入图片描述
pageEncoding是jsp翻译成java文件的编码格式。
Buffer=“8k”。设置缓冲

include

在这里插入图片描述
静态包含不会生成被包含的java文件。

<!--相对路径-->
<body>
  <%@ include file="header.jsp"%>
  <h2>这是中间</h2>
  <%@include file="footer.jsp"%>
</body>

tablib指令

在这里插入图片描述

动作标签

在这里插入图片描述
生成了相应的java文件。

<body>
    <jsp:include page="header.jsp"></jsp:include>
    <h2>主界面</h2>
    <jsp:include page="footer.jsp"></jsp:include>
</body>

在这里插入图片描述
class=""全限定名。

<body>
	<jsp:useBean id="student" class="com.qf2002.Student"></jsp:useBean>
	<jsp:setProperty name="student" property="address" value="北京"></jsp:setProperty>
	<jsp:setProperty name="student" property="age" value="13"></jsp:setProperty>
	<jsp:setProperty name="student" property="name" value="小轩"></jsp:setProperty>
	<%=student.toString()%><br/>
	<jsp:getProperty name="student" property="age"/><br/>
	<jsp:getProperty name="student" property="name"/><br/>
	Z	jsp:getProperty name="student" property="address"/>
</body>

在这里插入图片描述
在这里插入图片描述
这个需要处理中文乱码问题,需要在当前页面设置request.setCharacterEncoding(“utf-8”);

  <%
    request.setCharacterEncoding("utf-8");
  %>
<jsp:forward page="index2.jsp?username=小轩">
  <jsp:param name="address" value="北京"/>
</jsp:forward>

内置对象

jsp翻译成java文件,生成了九个内置对象。
在这里插入图片描述
口诀:RRSACEOPP

out对象

out的类型是JspWriter,先输出到buffer缓冲区。

<body>
    <h2>out输出</h2>
    <%
        out.print("苹果");
        out.print("苹果");
        out.print("西瓜");
        
        response.getWriter().write("java是世界上最好的语言...");
    %>

这样就会出一个问题。
在这里插入图片描述

所以

out.print("苹果");
out.print("苹果");
out.print("西瓜");
//刷新一下
out.flush();
response.getWriter().write("java是世界上最好的语言...");

在这里插入图片描述

在这里插入图片描述

pageContext对象(页面上下文)

在这里插入图片描述

作为域

//作为域
//设置数据
pageContext.setAttribute("username", "admin");
pageContext.setAttribute("password", "123");
//得到数据
out.print(pageContext.getAttribute("username"));
out.print(pageContext.getAttribute("password"));
//移出数据
pageContext.removeAttribute("username");
pageContext.removeAttribute("password");

对其他域对象进行操作

//2.操作其他三个域对象,request session application
pageContext.setAttribute("requestData", "小轩轩",PageContext.REQUEST_SCOPE);
pageContext.setAttribute("sessionData", "小明",PageContext.SESSION_SCOPE);
pageContext.setAttribute("applicationData", "小红",PageContext.APPLICATION_SCOPE);
//各自的域获取pageContext设置的各自的数据
String requestData = (String) request.getAttribute("requestData");
String sessionData = (String) session.getAttribute("sessionData");
String applicationData = (String) application.getAttribute("applicationData");

out.println(requestData);
out.println(sessionData);
out.println(applicationData);

//pageContext获取其他域的信息
out.print(pageContext.getAttribute("requestData",PageContext.REQUEST_SCOPE));
out.print(pageContext.getAttribute("sessionData",PageContext.SESSION_SCOPE));
out.print(pageContext.getAttribute("applicationData",PageContext.APPLICATION_SCOPE));

//findAttribute();从四个域中国查找满足条件的数据,pageContext-->request-->session-->application,找到就停止
String requestData1 = (String) pageContext.findAttribute("requestData");
String sessionData1 = (String)  pageContext.findAttribute("sessionData");
String applicationData1 = (String) pageContext.findAttribute("applicationData");
out.print(requestData1);
out.print(sessionData1);
out.print(applicationData1);

//移除所有域中满足条件的数据 pageContext-->request-->session-->application
pageContext.removeAttribute("requestData");

//移出某个域中的数据
pageContext.removeAttribute("sessionData", PageContext.SESSION_SCOPE);

获取其他八个对象

public static void getAllObject(PageContext pageContext) {
    //获取request对象
    HttpServletRequest request = (HttpServletRequest) pageContext.getRequest();
    //获取response对象
    HttpServletResponse response = (HttpServletResponse) pageContext.getResponse();
    //获取session对象
    HttpSession session = pageContext.getSession();
    //获取ServletContext对象
    ServletContext application = pageContext.getServletContext();
    //获取ServletConfig对象
    ServletConfig cig = pageContext.getServletConfig();
    //获取Exception对象
    Exception exception = pageContext.getException();
    //获取JspWriter对象
    JspWriter out = pageContext.getOut();
    //获取Servlet对象
    Servlet page = (Servlet) pageContext.getPage();
}

四大域对象

在这里插入图片描述

EL表达式

在这里插入图片描述
如果只写域中的变量,不也属于哪个域的变量,就逐级查找

获取特定的域的值

requestScope, sessionScope, applicationScope

<%
    pageContext.setAttribute("username", "小轩",PageContext.SESSION_SCOPE);
    pageContext.setAttribute("password", "12345",PageContext.APPLICATION_SCOPE);
%>
${sessionScope.username}<br/>
${applicationScope.password}<br/>

EL表达式操作普通变量

 <%
        //向域中添加数据
        pageContext.setAttribute("username", "小轩");
        pageContext.setAttribute("password", "123");
        pageContext.setAttribute("address", "北京",PageContext.REQUEST_SCOPE);
        pageContext.setAttribute("email", "zhangsan@qq.com",PageContext.SESSION_SCOPE);
        pageContext.setAttribute("age", "18",PageContext.SESSION_SCOPE);
    %>
<%--不使用EL表达式--%>
    <%=pageContext.findAttribute("username")%><br/>
    <%=pageContext.findAttribute("password")%><br/>
    <%=pageContext.findAttribute("address")%><br/>
    <%=pageContext.findAttribute("email")%><br/>
    <%=pageContext.findAttribute("age")%><br/>
<%--    如果没找到,会返回null--%>
    <%=pageContext.findAttribute("lala")%><br/>

<%-- 使用EL表达式--%>
    <%--带引号相当于字符串--%>
    ${"username"}<br/>
    <%--变量,查不到不返回任何数据--%>
    ${username}<br/>
    ${password}<br/>
    ${address}<br/>
    ${email}<br/>
    ${age}<br/>
<%--    没有找到不会返回任何值--%>
    ${lala}<br/>

EL表达式操作对象

    <h2>使用EL表达式获取对象</h2>
    <%
        Student student = new Student("小红",12,"北京");
        student.setScore(new Score(new BigDecimal(24),new BigDecimal(45)));
        pageContext.setAttribute("student", student);
    %>
<%--    不需要强转--%>
    ${student}<br/>
    ${student.name}<br/>
    ${student.address}<br/>
    ${student.age}<br/>
<%--    对象里面还有对象,直接调就可以--%>
    ${student.score}<br/>
    ${student.score.mathScore}<br/>
    ${student.score.englishScore}<br/>

EL表达式操作集合

<%--获取List集合--%>
    <%
        List<String> list = new ArrayList<>();
        list.add("苹果");
        list.add("香蕉");
        list.add("西瓜");
        list.add("桃子");
        //添加到域
        pageContext.setAttribute("list", list);
    %>
<%--    获取list集合中的数据--%>
    ${list}<br/>
    ${list[0]}<br/>
    ${list[1]}<br/>
    ${list[2]}<br/>
    ${list[3]}<br/>
<%--    越界也不会出异常,不做任何操作--%>
    ${list[5]}<br/>
<%--另一种方式获得集合中的数据--%>
    ${list}<br/>
<%--    这种方式不能越界--%>
    ${list.get(0)}<br/>
    ${list.get(1)}<br/>
    ${list.get(2)}<br/>
    ${list.get(3)}<br/>

EL表达式操作数组

    <%--EL表达式操作数组--%>
<%
    int[] nums = {1,3,5,2};
    pageContext.setAttribute("nums",nums);
%>
    ${nums[0]}
    ${nums[1]}
    ${nums[2]}
    ${nums[3]}

EL表达式操作Map

<%--EL表达式操作Map--%>
<%
    Map<String,String> map = new HashMap<>();
    map.put("水果", "西瓜");
    map.put("中国", "北京");
    map.put("日本", "东京");
    map.put("美国", "华盛顿");
    map.put("666", "双击");
    pageContext.setAttribute("map", map);
%>
    ${map}<br/>
    ${map.水果}<br/>
    ${map.get("中国")}<br/>
    ${map["日本"]}<br/>
    ${map['666']}<br/>

EL表达式运算符

在这里插入图片描述

+,-,*,/,%

 <h2>+ - * / %</h2>
    ${10+5}<br/>
    ${10-5}<br/>
    ${10*5}<br/>
    ${10/5}<br/>
<%--    取余--%>
    ${10%5}<br/>

== != < > <= >=

    <%
        pageContext.setAttribute("name", new String("张三"));
    %>
    ${100==122}<br/>
    ${"abc"=="abc"}<br/> true
<%--    这里eq 和 == 都是比较的值,不是地址--%>
    ${"张三" eq name}<br/> true
    ${"张三" == name}<br/> true
    ${100>122}<br/>
<%--    great than--%>
    ${100 gt 122}<br/>
    ${100 < 122}<br/>
    ${100 lt 122}<br/>
<%--    great than equal--%>
    ${100 >= 122}<br/>
    ${100 ge 122}<br/>
    ${100 <= 122}<br/>
    ${100 le 122}<br/>
    ${100 != 122}<br/>

&& ,|| ,!

<h2>&&、||,!</h2>
${true && false}<br/>
${true and false}<br/>
${true || false}<br/>
${true or false}<br/>
${!false}<br/>

?:

<h2>?:</h2>
<%
    pageContext.setAttribute("score", 90);
    pageContext.setAttribute("flag", 0);
    pageContext.setAttribute("gender", "1");
%>
${score >80 ? "优秀":"良好"}<br/> 优秀
${flag == 0 ? "没有激活":"激活成功"}<br/> 没有激活
${gender eq "1" ? "男" : "女"}<br/>

判断是否为空

<%
    pageContext.setAttribute("color", "black");
    pageContext.setAttribute("eye", null);
    pageContext.setAttribute("list", new ArrayList<>());
%>
${empty color}<br/> true
${empty eye}<br/> true
${empty list}<br/> true

EL隐式对象(11个)

在这里插入图片描述

param

<%
    out.print(request.getParameter("username"));
    out.print(request.getParameter("password"));
%>
${param.username}<br/>
${param.password}<br/>

paramValues

<%
    String[] hobbies = request.getParameterValues("hobby");
    for (String hobby : hobbies) {
        out.print(hobby);
    }
%>
${paramValues.hobby[1]}<br/>
${paramValues.get("hobby")[2]}<br/>
${paramValues["hobby"][2]}<br/>
${paramValues.hobby[0]}<br/>

header

<%
    out.print(request.getHeader("Accept"));
%>
${header.accept}<br/>

initParam

<%
    out.print(application.getInitParameter("username"));
%>
${initParam.username}

cookie

在这里插入图片描述

<%
    Cookie[] cookies = request.getCookies();
    for (Cookie cookie : cookies) {
        out.print(cookie);
    }
%>
${cookie.JSESSIONID.value}<br/>

pageContext

这样就能获得其他八个内置对象,就能调用他们的方法。

<%--获取上下文路径--%>
    ${pageContext.request.contextPath}<br/>
    ${pageContext.servletContext.contextPath}<br/>
    
    类似于/myweb

路径分类

在这里插入图片描述

//转发 "/" 表示上下文路径,地址是给服务器用的  相当于/myweb/
request.getRequestDispatcher("/aaa/mian.jsp").forward(request, response);
//重定向 "/"表示主机名或域名  地址是给浏览器用的,相当于http://localhost:8080/
response.sendRedirect(request.getContextPath()+"/aaa/mian.jsp");
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值