JSP基础详解

1. 什么是 jsp

        1)说明:jsp 的全称是 Java servlet pages,Java 的服务器页面。主要作用是代替 servlet 程序回传 html 页面的数据。

        2)本质:jsp 页面本质上是一个 Servlet 程序。


2. jsp 的三种语法

1)jsp 头部的 page 指令

page 指令可以修改 jsp 页面中的一些重要属性,或者行为。

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

        i)language属性:表示 jsp 翻译后是什么语言文件,暂时只支持 java。

        ii)contentType属性:表示 jsp 返回的数据类型,也是源码中 resp.setContentType参数值。

        iii)pageEncoding属性:表示当前 jsp 页面文件本身的字符集,默认 utf-8。

        iv)import属性:用于导包导类。

        v)autoFlush属性:设置当 out 输出流缓冲区满了之后,是否自动刷新缓冲区,默认为true。

        vi)buffer属性:设置 out 输出流缓冲区的大小,默认是 8kb。

        vii)errorPage属性:设置当 jsp 页面运行时出错,自动跳转去的错误页面。

        viii)isErrorPage属性:设置当前 jsp 页面是否是错误信息页面,默认是 false。

        ix)session属性:设置访问当前 jsp 页面,是否会创建 HttpSession 对象,默认是 true。

        x)extends属性:设置 jsp 翻译出来的 java 类,默认继承谁。

2)jsp 中常用的脚本

        i)声明脚本(极少使用)

                格式:<%!  声明Java代码  %>

                作用:可以给 jsp 翻译出来的 Java 类定义属性和方法,甚至是静态代码块、内部类等。

                练习:a)声明类属性

    <%--a)声明类属性--%>
    <%!
        private Integer id;
        private String name;
        private String password;
        private static Map<String, Object> map;
    %>

                          b)声明static静态代码块

    <%--b)声明static静态代码块--%>
    <%!
        static {
            map = new HashMap<String, Object>();
            map.put("key1", "value1");
            map.put("key2", "value2");
        }
    %>

                         c)声明类方法

<%--c)声明类方法--%>
    <%!
        public String add(){
            return "name + password";
        }
    %>

                          d)声明内部类

<%--d)声明内部类--%>
    <%!
        public static class A {
            private Integer Aid = 12;
            private String Aname = "AAA";
        }
    %>

        ii)表达式脚本(常用)

                格式:<%=表达式%>

                作用:在 jsp 页面上输出数据

                特点:a)所有的表达式脚本都会被翻译到 _japService 方法中 

                           b)所有的表达式脚本都会被翻译成为 out.print() 输出到页面上

                           c)由于表达式脚本翻译的内容都在 _japService 方法中,所有 _japService 方法中的对象都可以直接使用

                           d)表达式脚本中的表达式不能以分号结束

                练习:a)输出整形

<%--a)输出整形--%>
    <%=12%><br>

                           b)输出浮点型

<%--b)输出浮点型--%>
    <%=12.12%><br>

                           c)输出字符串

<%--c)输出字符串--%>
    <%="这是字符串12.12"%><br>

                           d)输出对象

<%--d)输出对象--%>
    <%=map%><br>

对应的页面显示和翻译内容:

        iii)代码脚本

                格式:<% java 语句 %>

                作用:可以在 jsp 页面编写需要的功能(基本是 java 语句)

                特点:a)代码脚本翻译之后都在 _jspService 方法中

                           b)由于代码脚本翻译的内容都在 _japService 方法中,所有 _japService 方法中的对象都可以直接使用

                           c)还可以有多个代码脚本块完成一个完整的 Java 语句

                           d)代码脚本还可以与表达式脚本一起使用,在 jsp 页面输出数据

                练习:a)代码脚本 --- if 语句

                           b)代码脚本 --- for循环语句

                           c)jsp 被翻译后的 Java 文件中 _jspService 方法内的代码都可以写

<%--a)代码脚本 --- if 语句--%>
    <%
        int i = 12;
        if (i == 21) {
            System.out.println("correct!");
        } else {
            System.out.println("error!");
        }
    %>

<%--b)代码脚本 --- for循环语句--%>
    <%
        for (int j=0; j<10; j++) {
            System.out.println(j);
        }
    %>

<%--c)jsp 被翻译后的 Java 文件中 _jspService 方法内的代码都可以写--%>
    <%
        String username = request.getParameter("username");
        System.out.println(username);
    %>

3. jsp 九大内置对象


4. jsp 四大域对象 

        1)在上述九大内置对象中,有四大域对象,分别是:pageContext(PageContextImpl类)、request(HttpServlerRequest类)、session(HttpSession类)、application(ServletContext类)

        2)域对象是可以像 Map 一样存取数据的对象。四个域对象功能一样,不同的是它们对数据的存取范围。

        3)四大域对象存取范围:分别给四个对象存入数据,并取出

pageContext(PageContextImpl类) --- 当前 jsp 页面范围内有效。

request(HttpServlerRequest类) --- 一次请求内有效。

session(HttpSession类) --- 一次会话范围内有效(浏览器访问服务器,直到浏览器关闭,数据都在)。

application(ServletContext类) --- 整个 web 工程范围内都有效(只要web不停止,数据都在)。

四大域对象存入数据,并取出:

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>四大域对象</title>
</head>
<body>
    <h1>四大域对象</h1>
    <%
        //给四大域对象存入数据
        pageContext.setAttribute("pageContextKey","pageContextValue");
        request.setAttribute("requestKey","requestValue");
        session.setAttribute("sessionKey","sessionValue");
        application.setAttribute("applicationKey","applicationValue");
    %>
    pageContext域中是否有值:
    <%=
        // 取出四大域对象中的值
        pageContext.getAttribute("pageContextKey")
    %><br>
    request域中是否有值:
    <%=
    // 取出四大域对象中的值
            request.getAttribute("requestKey")
    %><br>
    session域中是否有值:
    <%=
    // 取出四大域对象中的值
            session.getAttribute("sessionKey")
    %><br>
    application域中是否有值:
    <%=
    // 取出四大域对象中的值
            application.getAttribute("applicationKey")
    %><br>

    <%
        //一次请求
        request.getRequestDispatcher("/四大域对象范围测试.jsp").forward(request,response);
    %>
</body>
</html>

四大域对象不存入数据,直接取出:

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>四大域对象</title>
</head>
<body>
    <h1>四大域对象范围测试</h1>

    pageContext域中是否有值:
    <%=
        // 取出四大域对象中的值
        pageContext.getAttribute("pageContextKey")
    %><br>
    request域中是否有值:
    <%=
    // 取出四大域对象中的值
            request.getAttribute("requestKey")
    %><br>
    session域中是否有值:
    <%=
    // 取出四大域对象中的值
            session.getAttribute("sessionKey")
    %><br>
    application域中是否有值:
    <%=
    // 取出四大域对象中的值
            application.getAttribute("applicationKey")
    %><br>
</body>
</html>

        4)四大域对象在使用上的优先顺序:pageContext > request > session > application,有效范围越小,若数据不使用,就会在越短的时间,数据释放就会越快,从而减轻服务器内存的压力。


5. out 和 response 输出的区别

 当 jsp 页面所有代码执行完成后会做以下两个操作:

        1)执行 out.flush() 操作,会把 out 缓冲区中的数据追加写入到 response 缓冲区末尾。

        2)会执行 response 的刷新操作,把全部数据写给客户端。


6. jsp 的常用标签

        1)jsp 静态包含

                格式:<%@ file="/" %> ,file 属性指定要包含的 jsp 页面路径               

        2)jsp 动态包含

                格式:<jsp:include page=""></jsp:include>,page 属性指定要包含的 jsp 页面路径

                特点:动态包含可以在标签内添加内容<jsp:param name=""  value=""><jsp:param>,用于传递参数

        3)jsp 标签-转发

                格式:<jsp:forward page=""></jsp:forward>,page 属性指定要转发到的 jsp 页面路径

                用法:


7. jsp 练习题

        1)在 jsp 页面输出九九乘法表

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>九九乘法表</title>
</head>
<body>

    <%
        for (int i=1; i<=9; i++) {
            for (int j=9 ;j>=i; j--) {
    %>
    <%=i + "*" + j + "=" + (i*j)%>
    <%
            }
            %>
    <br>
    <%
        }
    %>
</body>
</html>

        2)jsp 输出一个表格,里面有十个同学的信息

<%@ page contentType="text/html;charset=UTF-8" language="java" import="com.ldyr.Student" %>
<html>
<head>
    <title>表格</title>
</head>
<body>

    <%
        Student student = new Student();
        for (int i=0; i<10; i++) {
            student.setName("name" + (i+1));
            student.setSex("女");
    %>

    <table border="1" style="border-collapse: collapse" >
        <tr>
            <td><%= student.getName() %></td>
            <td><%= student.getSex() %></td>
        </tr>
    </table>
    <%}%>
</body>
</html>

        3)通过 jsp 回传数据给客户端

Servlet程序将查询到的信息储存到request域中:

public class StudentRequestServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        List<Student> stuList = new ArrayList<Student>();
        for (int i=0; i<10; i++) {
            stuList.add(new Student("name" + (i+1),"男"));
        }
        req.setAttribute("stuList",stuList);

        req.getRequestDispatcher("/JSP回传数据给客户端.jsp").forward(req,resp);
    }
}

jsp页面查询request域中的值 ,进行显示:

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>jsp回传数据给客户端</title>
</head>
<body>
<%
        List<Student> stuList = (List<Student>) request.getAttribute("stuList");
%>

<table border="1" style="border-collapse: collapse" >
    <% for (Student student: stuList) {%>
    <tr>
        <td><%= student.getName() %></td>
        <td><%= student.getSex() %></td>
    </tr>
    <%}%>
</table>

</body>
</html>

8. Listener 监听器

        1)说明:

                Listener 监听器时 JavaWeb 三大组件之一。JavaWeb 三大组件分别是 Servlet程序、Listener监听器、Filter过滤器。

                Listener 是 JavaEE 的规范,就是接口。

                监听器的作用是 监听某种事物的变化,然后通过回调函数,反馈给客户(程序)做一些相应的处理。        

        2)ServletContextListener 监听器

ServletContextListener 可以监听 ServletContext对象的创建和销毁。

ServletContext对象在 web 工程启动的时候创建,在 web 对象停止的时候销毁。

监听到创建和销毁后会分别调用 ServletContextListener 监听器的两个方法进行反馈。

两个方法分别是:

public interface ServletContextListener extends EventListener {
    // ServletContext对象创建后马上调用,做初始化
    void contextInitialized(ServletContextEvent var1);
    
    // ServletContext对象销毁后马上调用,做销毁处理
    void contextDestroyed(ServletContextEvent var1);
}

使用步骤:

i)编写一个类实现 ServletContextListener

ii)实现两个方法回调

public class ContextListenerServlet implements ServletContextListener {
    @Override
    public void contextInitialized(ServletContextEvent servletContextEvent) {
        System.out.println("context_Init");
    }

    @Override
    public void contextDestroyed(ServletContextEvent servletContextEvent) {
        System.out.println("context_Destroy");
    }
}

iii)在web.xml中配置监听器

<listener>
        <listener-class>com.ldyr.ContextListenerServlet</listener-class>
</listener>

  • 8
    点赞
  • 56
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: JSP和SSM结合的系统开发一般分为以下步骤: 1. 确定系统需求:首先需要明确系统的功能、用户需求和技术要求等,以此为基础进行开发。 2. 搭建开发环境:需要安装配置Java开发环境、Tomcat服务器、MySQL数据库等必要的工具和软件。 3. 设计数据库:根据需求设计数据表和关系,确定表结构、字段类型、索引等。 4. 搭建SSM框架:使用Spring、SpringMVC和MyBatis搭建系统框架,包括配置文件、实体类、DAO、Service等。 5. 编写JSP页面:根据需求设计前端页面,使用HTML、CSS、JavaScript等技术进行编写。 6. 开发业务逻辑:在Service层编写业务逻辑代码,实现系统的核心功能。 7. 实现数据交互:使用MyBatis进行数据交互,将前端页面和后台数据进行交互。 8. 测试和调试:对系统进行测试和调试,确保系统满足需求并且运行稳定。 9. 部署上线:将系统部署到服务器上线,确保系统能够正常运行并且满足用户需求。 以上是JSP和SSM结合的系统开发的基本步骤,当然在实际开发中还需要根据具体情况进行调整和优化。 ### 回答2: JSPJavaServer Pages)和SSM(Spring + SpringMVC + MyBatis)是一种常用的Java Web开发框架,结合它们进行系统开发的步骤如下: 1. 确定需求:明确系统开发的功能和需求,包括页面展示、用户交互、数据处理等方面。 2. 环境搭建:搭建Java开发环境,安装并配置JDK、Tomcat服务器、数据库等必要软件,并确保它们能够正常运行。 3. 创建项目:使用IDE(例如Eclipse、IntelliJ IDEA等)创建一个新的Web项目,并配置好Java EE的相关组件。 4. 导入依赖:在项目的构建工具(例如Maven、Gradle)中导入SSM的依赖,包括Spring、SpringMVC、MyBatis等框架。 5. 配置框架:在项目中配置SSM框架的相关配置文件,包括Spring的配置文件、SpringMVC的配置文件、MyBatis的配置文件等。 6. 创建实体类:根据需求,创建Java实体类,用于封装和操作数据库中的数据。 7. 创建DAO层:编写数据库操作的接口和对应的实现类,使用MyBatis框架进行数据库访问操作。 8. 创建Service层:编写业务逻辑的接口和对应的实现类,使用Spring框架进行事务管理和业务处理。 9. 创建Controller层:编写控制器类,使用SpringMVC框架处理用户请求,并调用对应的Service层进行业务处理。 10. 创建JSP页面:根据需求,编写JSP页面来展示数据和处理用户的输入,使用JSTL和EL表达式进行页面的逻辑控制和数据展示。 11. 测试和调试:编写单元测试代码,通过各类测试用例来验证系统的功能和逻辑是否正常。 12. 部署和优化:将项目打包成WAR文件,部署到预先配置好的Tomcat服务器上,并进行必要的性能优化,如数据库连接池配置、页面静态化等。 13. 发布上线:进行系统的功能测试和线上环境测试,确保系统的稳定性和安全性,最后发布上线供用户使用。 通过以上步骤,结合JSP和SSM框架,可以完成一个基于JavaWeb的系统的开发。同时,使用Spring框架可以实现低耦合的模块化开发,使用MyBatis框架可以方便地与数据库进行交互,使用JSP可以轻松地实现页面的展示和交互。 ### 回答3: 结合JSP和SSM进行系统开发的步骤如下: 1. 确定需求:明确系统的功能需求和目标,制定开发计划。 2. 架构设计:设计系统的整体架构,确定所需的数据库表结构和各个模块之间的关系。 3. 搭建环境:安装和配置开发环境,包括安装JDK、Tomcat、MySQL等必要的软件。 4. 创建项目:使用Maven或其他工具创建一个新的SSM项目,配置相关依赖和文件结构。 5. 编写Java代码:根据系统需求,逐个编写各个模块的Java类,包括实体类、数据访问对象(DAO)、服务层(Service)和控制器(Controller)等。 6. 配置Spring:在Spring的配置文件中,配置数据源、事务管理器、扫描注解等,以及各个模块的依赖注入等。 7. 编写SQL语句:根据数据库设计,编写SQL语句创建相关表,并编写增删改查等操作的SQL语句。 8. 编写JSP页面:根据系统需求,编写各个模块的JSP页面,包括展示数据、提交表单、处理用户请求等。 9. 配置MVC:在web.xml文件中配置DispatcherServlet,并指定其对应的Spring配置文件。 10. 测试和调试:通过使用Tomcat等服务器进行调试,验证系统功能和逻辑的正确性,并进行必要的修复和改进。 11. 部署上线:在生产环境中部署系统,包括配置服务器、数据库和相关资源,并进行性能测试和安全审核。 12. 运维和维护:定期维护系统、监控性能、备份数据,并根据用户反馈不断进行更新和优化。 以上是JSP和SSM结合的系统开发的大致步骤,具体实施过程中还需根据项目特点和实际需求进行调整和细化。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值