JSP

JSP全称是Java Server Pages
他和servlet技术一样 都是SUN公司定义的一种用于开发动态web资源的技术
JSP实际上就是Servlet
jsp = html + java

html:静态内容
servlet:适合编写java逻辑代码 不适合编写界面显示部分
jsp:适合编写输出动态内容 但不适合编写java逻辑

JSP 原理(编译执行过程)
访问jsp页面时 jsp页面会被翻译成.java文件
然后.java会被编译成.class文件(字节码文件)
获取当前系统时间的JSP
<% %>中 正常写java代码 write等价于print
date.toLocaleString() 可根据本地时间把Date对象转换为字符串,并返回结果
代码:
<body>
    <%
        Date date = new Date();
        out.write(date.toLocaleString());
    %>
</body>
jsp的最佳写法
传值时 如果是非表单提交的数据 可以保存在域对象中
       如果是表单提交过来的数据 直接使用请求转发就可以了
用纯jsp写出 登录 处理登录逻辑 登录成功(欢迎页) 页面

<body>
    <%
        // 显示数据  编译到service方法里面去了
        String msg = (String)request.getAttribute("msg");
        if(msg != null){
            out.write(msg);
        }
    %>
    <form action="/sh-web-jsp/dologin.jsp" method="post" >
        账号:<input type="text" name="username" >
        密码:<input type="text" name="password" >
        <input type="submit" value="登录">
    </form>
</body>


</head>
<body>
    <%
        String username = request.getParameter("username");
        String password = request.getParameter("password");

        if(username.equals("张飞") && password.equals("123")){
            session.setAttribute("username", username);
            response.sendRedirect(request.getContextPath() + "/success.jsp");
        }else{
            // 登录失败 返回登录页面
            // 相对服务器内 不用添加工程名 例如请求转发
            // 相对于服务器外(相对于网址的8080后面) 需要添加工程名 例如请求重定向
            // 失败后,在页面中显示错误信息
            // 使用请求转发 比较合适
            request.setAttribute("msg", "输入有误");
            request.getRequestDispatcher("/login.jsp").forward(request, response);
        }
    %>
</body>
</html>

</head>
<body>

    <%
         session = request.getSession();
         String username = (String)session.getAttribute("suername");
         out.write(username);
    %>
</body>
</html>
jsp基础语法
1.html标签
2.小脚本<% java代码 %>
表达式<%= 2+3 %>
声明 <%! %> 表示在类中定义全局成员变量 和 静态代码块

JSP注释 <%-- 被注释的内容 --%> 特点:安全
网页注释 <!-- 网页注释 --> 特点:不安全


<body>
    <%-- 这是jsp注释 --%>
    <!-- 这是网页注释 -->
    <%!
        int num2 = 10;
    %>
    <%
        int num1 = 10;
        num1++;
        num2++;

        out.print(num1);
        out.print(num2);
    %>
</body>
</html>
jsp的三个指令
page
import 和 java代码中的import是一样的
<%@ page import="java.util.Date,java.util.List"%>
或者:
<%@ page import="java.util.Date"%>
<%@ page import="java.util.List"%>
可以合在一起写 也可以分开写

JSP会自动导入以下的包:
import java.lang.*;
import javax.servlet.*;
import javax.servlet.http.*;
import javax.servlet.jsp.*;

session的默认值是true
<!-- 默认是true 相当于一个开关 -->
<%@ page session="true" %>

errorPage: 如果页面中有错误,则跳转到指定的资源
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ page errorPage="/error.jsp"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
    <%
        int num = 10/0;
    %>
</body>
</html>

<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
    <%
        out.write("捕获异常信息");
    %>
</body>
</html>
isErrorPage:是否创建throwable对象 默认是false
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ page errorPage="error.jsp" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
    <%
        int a = 10/0;
    %>
</body>
</html>

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ page isErrorPage="true" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
    <%
        String msg = exception.getMessage();
        out.write(msg);
    %>
    捕获异常信息
</body>
</html>
contextType 等同于 response.setContextType("text/html;charset=utf-8");
Include 
静态包含:把其它资源包含到当前页面中。
<%@ include file="/4.jsp" %>
动态包含:
<jsp:include page="/4.jsp"></jsp:include>

两者的区别:翻译的时间段不同
静态:在翻译时就把两个文件合并
动态:不会合并文件,当代码执行到include时,才包含另一个文件的内容。
原则:能用静的就不用动的。

<!-- taglib标签 导入jstl核心库 prefix="c" 代表给jstl标签库中的标签 起一个别名 -->
jsp的6个动作
<jsp:include > 动态包含
<jsp:forward> 请求转发
<jsp:param> 设置请求参数

<jsp:useBean> 创建一个对象
<jsp:setProperty> 给指定的对象属性赋值
<jsp:getProperty> 取出指定对象的属性值

</head>
<body>
    <%
        // 创建一个User对象
        User user = new User();
        user.setName("wanglong");
        user.setPwd("123");
        out.print(user.getName());
    %>

    <jsp:useBean id="user1" class="com.lanou3g.User" />
    <jsp:setProperty property="name" name="user1" value="123" />
    <jsp:setProperty property="pwd" name="user1" value="456" />
    <%=user1.getName() %>
    <br/>
    <jsp:getProperty property="name" name="user1"/>
</body>
</html>
Logo

CSDN联合极客时间,共同打造面向开发者的精品内容学习社区,助力成长!

更多推荐