jsp_jsplumb - CSDN
jsp 订阅
JSP(全称JavaServer Pages)是由Sun Microsystems公司主导创建的一种动态网页技术标准。JSP部署于网络服务器上,可以响应客户端发送的请求,并根据请求内容动态地生成HTML、XML或其他格式文档的Web网页,然后返回给请求者。JSP技术以Java语言作为脚本语言,为用户的HTTP请求提供服务,并能与服务器上的其它Java程序共同处理复杂的业务需求。JSP将Java代码和特定变动内容嵌入到静态的页面中,实现以静态页面为模板,动态生成其中的部分内容。JSP引入了被称为“JSP动作”的XML标签,用来调用内建功能。另外,可以创建JSP标签库,然后像使用标准HTML或XML标签一样使用它们。标签库能增强功能和服务器性能,而且不受跨平台问题的限制。JSP文件在运行时会被其编译器转换成更原始的Servlet代码。JSP编译器可以把JSP文件编译成用Java代码写的Servlet,然后再由Java编译器来编译成能快速执行的二进制机器码,也可以直接编译成二进制码。 展开全文
JSP(全称JavaServer Pages)是由Sun Microsystems公司主导创建的一种动态网页技术标准。JSP部署于网络服务器上,可以响应客户端发送的请求,并根据请求内容动态地生成HTML、XML或其他格式文档的Web网页,然后返回给请求者。JSP技术以Java语言作为脚本语言,为用户的HTTP请求提供服务,并能与服务器上的其它Java程序共同处理复杂的业务需求。JSP将Java代码和特定变动内容嵌入到静态的页面中,实现以静态页面为模板,动态生成其中的部分内容。JSP引入了被称为“JSP动作”的XML标签,用来调用内建功能。另外,可以创建JSP标签库,然后像使用标准HTML或XML标签一样使用它们。标签库能增强功能和服务器性能,而且不受跨平台问题的限制。JSP文件在运行时会被其编译器转换成更原始的Servlet代码。JSP编译器可以把JSP文件编译成用Java代码写的Servlet,然后再由Java编译器来编译成能快速执行的二进制机器码,也可以直接编译成二进制码。
信息
外文名
Java Server Pages
本    质
JSP
中文名
JAVA服务器页面
JSP特点
收起全文
精华内容
参与话题
  • 学会jsp环境的安装与配置,jsp基础,jsp的9大内置对象应用,servlet技术,几种乱码处理方法;javabean,数据库操作,连接池,自定义标签,标准标签库,监听器和过滤器,文件上传,分页技术,MVC开发模式应用,投票...
  • Jsp&Servlet学习笔记(一)

    千次阅读 多人点赞 2020-08-27 11:57:15
    Jsp&Servlet学习笔记(一) 第一章 问候 Jsp&Servlet 他大爷 第一节:Jsp 概述 第二节:B/S vs C/S B/S系统是 浏览器/服务器(瘦客户端); C/S系统是 客户端/服务器(胖客户端)。 第三节:...

    Jsp&Servlet学习笔记(一)

     

    第一章 问候 Jsp&Servlet 他大爷

    第一节:Jsp 概述

     

    第二节:B/S vs C/S

    B/S系统是 浏览器/服务器(瘦客户端); C/S系统是 客户端/服务器(胖客户端)。

     

    第三节:Tomcat 服务器

    简介:百度百科。

    安装及配置:百度。

    目录结构:

     

    第五节:问候他大爷

    第一个Jsp程序:

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

        pageEncoding="UTF-8"%>

    <!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>问候Jsp他大爷</title>

    </head>

    <body>

    问候Jsp他大爷

    </body>

    </html>

    (在Tomcat服务器上运行,具体实现略)

     

    第二章 Jsp 基础语法

    第一节:page 指令介绍

    Language : 用来定义要使用的脚本语言;

    contentType:定义 JSP 字符的编码和页面响应的 MIME 类型;

    pageEncoding:Jsp 页面的字符编码

     

     

    第二节:scriptlet 标签

    通过 scriptlet 标签我们可以在 Jsp 里嵌入 Java 代码;

     

    脚本程序:可以包含任意量的Java语句、变量、方法或表达式。

    语法格式:<% 代码片段 %>

     

    JSP声明:一个声明语句可以声明一个或多个变量、方法,供后面的Java代码使用。

    语法格式:<%! declaration; [ declaration; ]+ ... %>

    JSP表达式:一个JSP表达式中包含的脚本语言表达式,先被转化成String,然后插入到表达式出现的地方。

    语法格式:<%= 表达式 %>

     

    第三节:Jsp 注释

    <!-- --> Html 注释 客户端源码可见

    <%-- --%> Jsp 注释 客户端源码不可见

    // java 单行注释

    /* */ java 多行注释

     

     

    第四节:Jsp 包含指令

    <%@ include file=”要包含的文件”%> 静态包含:先包含,后编译处理;

    <h1>静态包含</h1>

    <%@ include file="common/head.jsp" %>

    <p>content</p>

    <%@ include file="common/foot.jsp" %>

    <jsp:include page=”要包含的文件”/> 动态包含:先编译处理,后包含;

    <h1>动态包含</h1>

    <jsp:include page="common/head.jsp"/>

    <p>content</p>

    <jsp:include page="common/foot.jsp"/>

    (建议开发用动态包含。)

     

    第五节:Jsp 跳转指令

    <jsp:forward page=” ”>

    <jsp:param value=”” name=””>

    </jsp:forward>

    服务器内部跳转,可带参数;

     

    <title>Jsp 跳转指令</title>

    </head>

    <body>

    <jsp:forward page="target.jsp">

        <jsp:param value="huang" name="userName"/>

        <jsp:param value="123" name="password"/>

    </jsp:forward>

    </body>

    -----------------------------------------------------------

    <title>Jsp 跳转后页面target</title>

    </head>

    <body>

    服务器内部跳转后的页面<br>

    userName:<%=request.getParameter("userName") %><br>

    password:<%=request.getParameter("password") %><br>

    </body>

    第三章 JSP 九大内置对象及四个作用域

     

    第一节:Jsp 九大内置对象及四大作用域概述

    在Jsp开发中,Jsp提供了9个内置对象,这些内置对象将由容器为用户进行实例化,用户直接使用即可。

    这9个内置对象分别是:

    pageContext,request,response,session,application,config,out,page,exception;常用的是前面 5个,需要熟练掌握。

    在Jsp开发中,可以保存数据,Jsp提供了四种数据保存范围;分别是 page,request,session,application。

     

     

    第二节:Jsp 四大作用域

    Page 范围:

    只在一个页面中保存数据; javax.servlet.jsp.PageContext(抽象类)

    <body>

    <%

        // 设置两个page范围的数据 key->value

        pageContext.setAttribute("name","page王二小");

        pageContext.setAttribute("age",12);

    %>

    <%

        // 取值

        String name=(String)pageContext.getAttribute("name");

        int age=(Integer)pageContext.getAttribute("age");

    %>

    <font>姓名:<%=name %></font>

    <font>年龄:<%=age %></font>

     

    Request 范围:

    只在一个请求中保存数据; javax.servlet.http.HttpServletRequest(接口)

    RequestScope.jsp

    <body>

    <%

        // 设置两个request范围的数据 key-> value

        request.setAttribute("name","request王二小");

        request.setAttribute("age",12);

    %>

    <jsp:forward page="requestTarget.jsp"></jsp:forward>

    </body>

    RequestTarget.jsp

    <body>

    <%

        // 取值

        String name=(String)request.getAttribute("name");

        int age=(Integer)request.getAttribute("age");

    %>

    <font>姓名:<%=name %></font>

    <font>年龄:<%=age %></font>

    </body>

     

    Session 范围:

    在一次会话范围中保存数据,仅供单个用户使用;

    javax.servlet.http.HttpSession(接口)

    sessionScope.jsp

    <body>

    <%

        // 设置两个session范围的数据 key-> value

        session.setAttribute("name","session王二小");

        session.setAttribute("age",12);

    %>

    <h1>session值设置完毕!</h1>

    </body>

    sessionTarget.jsp

    <%

        // 取值

        String name=(String)session.getAttribute("name");

        int age=(Integer)session.getAttribute("age");

    %>

    <font>姓名:<%=name %></font>

    <font>年龄:<%=age %></font>

     

    Application 范围:

    在整个服务器上保存数据,所有用户共享;javax.servlet.ServletContext(接口)

    applicationScope.jsp

    <body>

    <%

        // 设置两个application范围的数据 key-> value

        application.setAttribute("name","application王二小");

        application.setAttribute("age",12);

    %>

    <h1>application值设置完毕!</h1>

    </body>

     

    applicationTarget.jsp

    <body>

    <%

        // 取值

        String name=(String)application.getAttribute("name");

        int age=(Integer)application.getAttribute("age");

    %>

    <font>姓名:<%=name %></font>

    <font>年龄:<%=age %></font>

    </body>

     

     

    第三节:response 对象

    response内置对象和request内置对象是相对应的,response内置对象用于响应客户请求,向客户端输出信息;javax.servlet.HttpServletResponse 接口。

    1. 自动刷新应用

    <body>

    <%

        // 每隔一秒刷新一次页面

        response.setHeader("refresh","1");

        // 获取当前时间

        Date myDate=new Date();

    %>

    当前时间:<%= myDate.toLocaleString() %>

    </body>

    2,页面重定向应用客户端跳转

    <%

        // 重定向,客户端跳转,网址会变

        response.sendRedirect("index.html");

    %>

    3,操作cookie应用  post、get方法比较:post放数据包里;get放Url后面,get数据量小,不安全;

    //response03.jsp

    <title>登录页面</title>

    <script type="text/javascript">

        function resetValue(){

           document.getElementById("userName").value="";

           document.getElementById("pwd").value="";

        }

    </script>

    <%

        String userName=null;

        String pwd=null;

        Cookie[] cookies=request.getCookies();

        for(int i=0;cookies!=null &&i<cookies.length;i++){

           if(cookies[i].getName().equals("userNameAndPwd")){

               userName=cookies[i].getValue().split("-")[0];

               pwd=cookies[i].getValue().split("-")[1];

           }

        }

       

        if(userName==null){

           userName="";

        }

       

        if(pwd==null){

           pwd="";

        }

    %>

    </head>

    <body>

    <form action="userLogin.jsp" method="post">

        <table>

           <tr>

               <td>用户名:</td>

               <td><input type="text" id="userName" name="userName" value="<%=userName%>"/></td>

           </tr>

           <tr>

               <td>密码:</td>

               <td><input type="password" id="pwd" name="pwd" value="<%=pwd %>" /></td>

           </tr>

           <tr>

               <td>记住密码:</td>

               <td><input type="checkbox" id="remember" name="remember" value="remember-me"/></td>

           </tr>

           <tr>

               <td><input type="submit" value="登录"/></td>

               <td><input type="button" value="重置" onclick="resetValue()"/></td>

           </tr>

        </table>

    </form>

    </body>

    //userLogin.jsp

    <body>

    <%

        String userName=request.getParameter("userName");  // 获取用户名

        String pwd=request.getParameter("pwd");  // 获取密码

        String remember=request.getParameter("remember");  // 获取记住密码

       

        if("remember-me".equals(remember)){

           Cookie userNameAndPwd=new Cookie("userNameAndPwd",userName+"-"+pwd);

           userNameAndPwd.setMaxAge(1*60*60*24*7); // cookie记录一个星期

           response.addCookie(userNameAndPwd);  // 保存cookie

           System.out.println("设置Cookie成功");

        }

        // response.sendRedirect("response03.jsp");

    %>

    登录成功

    </body>

    4,cookie和session的比较:cookie信息是存客户端的,session 信息是存服务器的;

     

    第四节:out 对象

    Out 内置对象主要用来向客户端输出各种类型的数据,同时还可以管理应用服务器上的输出缓冲区。所以out内置对象的方法是向客户端输出数据和管理缓冲区; 底层javax.servlet.jsp.JspWriter 抽象。

    <body>

    <%

        int totalbuffer=out.getBufferSize();  // 获取总缓冲区的大小

        int available=out.getRemaining(); // 获取未使用的缓冲区的大小

        int user=totalbuffer-available;  // 获取使用的缓冲区大小

        out.println("总共缓冲区的大小:"+totalbuffer);

        out.println("未使用的缓冲区的大小:"+available);

        out.println("使用的缓冲区大小:"+user);

    %>

    </body>

     

    第五节:config 对象

    config 内置对象是JSP页面通过JSP容器进行初始化时被传递的对象。javax.servlet.ServletConfig 。

    在Servlet初始化的时候,JSP引擎通过config 向它传递信息。这种信息可以是属性名和属性值匹配的参数,也可以是通过ServletContext对象传递的服务器的有关信息。

    //web.xml

    <servlet>

        <servlet-name>init</servlet-name>

        <jsp-file>/sysInit.jsp</jsp-file>

        <init-param>

           <param-name>jdbcName</param-name>

           <param-value>com.mysql.jdbc.Driver</param-value>

        </init-param>

        <init-param>

           <param-name>dbUrl</param-name>

           <param-value>jdbc:mysql://localhost:3306/db_xx</param-value>

        </init-param>

      </servlet>

     

      <servlet-mapping>

        <servlet-name>init</servlet-name>

        <url-pattern>/init</url-pattern>

      </servlet-mapping>

     

    //sysInit.jsp

    <body>

    <%

        String jdbcName=config.getInitParameter("jdbcName");

        String dbUrl=config.getInitParameter("dbUrl");

    %>

    <h1>驱动名称:<%=jdbcName %></h1>

    <h1>连接地址:<%=dbUrl %></h1>

    </body>

     

    请求地址:http://localhost:8081/JspServlet/init

     

    第六节:exception 对象

    exception 内置对象用来处理JSP文件在执行时发生的所有异常,它是java.lang.Throwable 类的一个对象。

    //exception01.jsp

    <%@ page errorPage="error.jsp"%>

    ...

    <body>

    <%

        int a=1;

        int b=0;

        out.println(a/b);

    %>

    </body>

     

    //error.jsp

    <%@ page isErrorPage="true"%>

    ...

    <body>

    <%

        if(exception!=null){

           out.println("程序错误信息:");

           out.println(exception.getMessage());

        }

    %>

    </body>

    第七节:pageContext 对象

    pageContext 内置对象是一个比较特殊的对象。它相当于页面中所有对象功能的集合,即使用它可以访问到本页面中所有对象。pageContext 内置对象由Jsp 容器创建并初始化,pageContext 对象提供了对JSP 页面所有对象及控件的访问。

    <body>

    <%

        pageContext.setAttribute("name0", "pageInfo");

        request.setAttribute("name1", "requestInfo");

        session.setAttribute("name2", "sessionInfo");

        application.setAttribute("name3", "applicationInfo");

       

        out.println("使用pageContext<br/>");

        out.println("page中的属性值:"+pageContext.getAttribute("name0")+"<br/>");

        out.println("request中的属性值:"+pageContext.getRequest().getAttribute("name1")+"<br/>");

        out.println("session中的属性值:"+pageContext.getSession().getAttribute("name2")+"<br/>");

        out.println("application中的属性值:"+pageContext.getServletContext().getAttribute("name3")+"<br/>");

    %>

    </body>

     

    第四章 JavaBean组件

    第一节:Javabean 组件引入

    JavaBean 是使用Java 语言开发的一个可重用的组件,在JSP 开发中可以使用JavaBean 减少重复代码,使整个JSP 代码的开发更简洁。

     

    第二节:jsp:useBean 创建javabean

    <jsp:useBean id="实例化对象名称" scope="保存范围" class="类完整名称"/>

    Scope一共有page,request,session和application 4个属性范围,默认是page;

    <jsp:useBean id="student" scope="page" class="com.java1234.model.Student"/>

    <%

        student.setName("王二小2");

        student.setAge(12);

    %>

    <h1>姓名:<%=student.getName() %></h1>

    <h1>年龄:<%=student.getAge() %></h1>

    </body>

    第三节:jsp:setProperty 设置javabean 属性值

    <jsp:setProperty property="属性名称" name="实例化对象的名称" value="属性值" param="参数名称"/>

    当 property=”*” 时,自动匹配所有属性。

    <body>

    <% request.setCharacterEncoding("utf-8"); %>

    <jsp:useBean id="student" scope="page" class="com.java1234.model.Student"/>

    <jsp:setProperty property="*" name="student"/>   <!--  自动匹配所有属性 -->

    <h1>姓名:<%=student.getName() %></h1>

    <h1>年龄:<%=student.getAge() %></h1>

    </body>

    当属性名不匹配时,使用param属性

    <body>

    <% request.setCharacterEncoding("utf-8"); %>

    <jsp:useBean id="student" scope="page" class="com.java1234.model.Student"/>

    <jsp:setProperty property="name" name="student" param="userName"/>

    <jsp:setProperty property="age" name="student" value="100"/>

    <h1>姓名:<%=student.getName() %></h1>

    <h1>年龄:<%=student.getAge() %></h1>

    </body>

     

    第四节:jsp:getProperty 获取javabean 属性值

    <jsp:getProperty property="属性名称" name="实例化对象的名称"/>

    <body>

    <jsp:useBean id="student" scope="page" class="com.java1234.model.Student"/>

    <%

        student.setName("王二小2");

        student.setAge(12);

    %>

    <h1>姓名:<jsp:getProperty property="name" name="student"/></h1>

    <h1>年龄:<jsp:getProperty property="age" name="student"/></h1>

    </body>

     

    第五节:javabean 的保存范围

    Javabean 的保存范围有page,request,session.application,默认是page;

    举例request范围:

    <body>

    <jsp:useBean id="student" scope="request" class="com.java1234.model.Student"/>

    <jsp:setProperty property="name" name="student" value="王八蛋"/>

    <jsp:setProperty property="age" name="student" value="12"/>

    <jsp:forward page="target01.jsp"/>

    </body>

    //target01.jsp

    <body>

    <jsp:useBean id="student" scope="request" class="com.java1234.model.Student"/>

    <h1>姓名:<jsp:getProperty property="name" name="student"/></h1>

    <h1>年龄:<jsp:getProperty property="age" name="student"/></h1>

    </body>

    第六节:javabean 删除

    page 范围:pageContext.removeAttribute(“javaBean Name”);

    request 范围:request.removeAttribute(“javaBean Name”);

    session 范围:session.removeAttribute(“javaBean Name”);

    application 范围:application.removeAttribute(“javaBean Name”);

    <body>

    <jsp:useBean id="student" scope="session" class="com.java1234.model.Student"/>

    <jsp:setProperty property="name" name="student" value="王八蛋"/>

    <jsp:setProperty property="age" name="student" value="12"/>

    <h1>Session数据设置完毕!</h1>

    </body>

    //javabeanDelete.jsp

    <body>

    <% session.removeAttribute("student"); %>

    <h1>javabean已删除!</h1>

    </body>

     

    第五章Servlet 开发

    第一节:问候servlet 他大爷

    Web.xml配置servlet名称、映射等,此处略。

    package com.java1234.web;

     

    import java.io.IOException;

    import java.io.PrintWriter;

     

    import javax.servlet.ServletException;

    import javax.servlet.http.HttpServlet;

    import javax.servlet.http.HttpServletRequest;

    import javax.servlet.http.HttpServletResponse;

     

    public class HelloWorldServlet extends HttpServlet{

     

        /**

         *

         */

        private static final long serialVersionUID = 1L;

     

        @Override

        protected void doGet(HttpServletRequest request, HttpServletResponse response)

               throws ServletException, IOException {

           System.out.println("get");

           this.doPost(request, response);

        }

     

        @Override

        protected void doPost(HttpServletRequest request, HttpServletResponse response)

               throws ServletException, IOException {

           response.setCharacterEncoding("gbk");

           PrintWriter out=response.getWriter();

           out.println("<html>");

           out.println("<head><title>问候大爷</title></head>");

           out.println("Servlet大爷你好!");

           out.println("</html>");

           out.close();

        }

     

    }

    第二节:servlet 生命周期

    Servlet 的生命周期,简单的概括这就分为四步:servlet 类加载--->实例化--->服务--->销毁。

     

    第三节:客户端跳转VS 服务器端跳转

    1,在Servlet 中获取session,application

    2,客户端跳转response.sendRedirect("目标地址");

    //web.xml配置同上

        @Override

        protected void doPost(HttpServletRequest request, HttpServletResponse response)

               throws ServletException, IOException {

           request.setAttribute("requestKey", "request");

           HttpSession session=request.getSession();  // 获取session

           session.setAttribute("sessionKey", "session");

           ServletContext application=this.getServletContext(); // 获取application

           application.setAttribute("applicationKey", "application");

           response.sendRedirect("target.jsp"); // 客户端跳转/重定向

        }

    //target.jsp

    <body>

    <h1>目标地址</h1>

    request值:<%=request.getAttribute("requestKey") %><br/>

    session值:<%=session.getAttribute("sessionKey") %><br/>

    application值:<%=application.getAttribute("applicationKey") %><br/>

    </body>

    (sendRedirect重定向不携带request参数)

    3,服务器跳转:RequestDispatcher rd=request.getRequestDispatcher("目标地址"); rd.forward(request, response);

        @Override

        protected void doPost(HttpServletRequest request, HttpServletResponse response)

               throws ServletException, IOException {

           request.setAttribute("requestKey", "request");

           HttpSession session=request.getSession();  // 获取session

           session.setAttribute("sessionKey", "session");

           ServletContext application=this.getServletContext(); // 获取application

           application.setAttribute("applicationKey", "application");

            RequestDispatcher rd=request.getRequestDispatcher("target.jsp");

           rd.forward(request, response); // 服务器跳转/转发

        }

    //target.jsp

    <body>

    <h1>目标地址</h1>

    request值:<%=request.getAttribute("requestKey") %><br/>

    session值:<%=session.getAttribute("sessionKey") %><br/>

    application值:<%=application.getAttribute("applicationKey") %><br/>

    </body>

    (携带request参数)

    第四节:Jsp&Servlet 用户登录功能实现

    代码太多…

    第五节:Servlet 过滤器

    过滤用户(非法)请求

    Web,xml配置filter,此处略。下面贴核心代码:

    public class LoginFilter implements Filter {

     

        @Override

        public void destroy() {

           // TODO Auto-generated method stub

          

        }

     

        @Override

        public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain)

               throws IOException, ServletException {

           // TODO Auto-generated method stub

           HttpServletRequest request=(HttpServletRequest)servletRequest;

           HttpSession session=request.getSession();

           Object o=session.getAttribute("currentUser");

           String path=request.getServletPath();  //获取请求路径

           if(o==null&&path.indexOf("login")<0){  // 排除登录请求的过滤

               request.getRequestDispatcher("login.jsp").forward(servletRequest, servletResponse);

           }else{

               filterChain.doFilter(servletRequest, servletResponse);

           }

        }

     

        @Override

        public void init(FilterConfig arg0) throws ServletException {

           // TODO Auto-generated method stub

          

        }

    }

     

    第六节:Servlet 监听器

    监听web 事件;如application,session,request

    示例(session)

    Web.xml配置

    <listener>

      <listener-class>com.java1234.listener.SessionAttributeListener</listener-class>

    </listener>

     

    // SessionAttributeListener.java

    package com.java1234.listener;

     

    import javax.servlet.http.HttpSessionAttributeListener;

    import javax.servlet.http.HttpSessionBindingEvent;

     

    public class SessionAttributeListener implements HttpSessionAttributeListener{

     

        public void attributeAdded(HttpSessionBindingEvent httpSessionBindingEvent) {

           // TODO Auto-generated method stub

           System.out.println("添加的属性名:"+httpSessionBindingEvent.getName()+",属性值:"+httpSessionBindingEvent.getValue());

        }

     

        public void attributeRemoved(HttpSessionBindingEvent httpSessionBindingEvent) {

           // TODO Auto-generated method stub

           System.out.println("删除的属性名:"+httpSessionBindingEvent.getName()+",属性值:"+httpSessionBindingEvent.getValue());

        }

     

        public void attributeReplaced(HttpSessionBindingEvent httpSessionBindingEvent) {

           // TODO Auto-generated method stub

          

        }

    }

     

    展开全文
  • JSP介绍(一)

    万次阅读 多人点赞 2018-09-05 07:17:43
    一、JSP是什么,它有什么作用? Java Server Page,它是用于展示信息操作。 为了servlet展示信息的不方便,引入了JSPJSP本质上也是一个servlet!!!!!! JSP就是在HTML页面中嵌入了java代码。 二、JSP...

    一、JSP是什么,它有什么作用?

    Java Server Page,它是用于展示信息操作。

    为了servlet展示信息的不方便,引入了JSP。

    JSP本质上也是一个servlet!!!!!!

    JSP就是在HTML页面中嵌入了java代码。

    二、JSP原理

    在Tomcat中的web.xml中,有一个默认的servlet,处理不可以处理的请求,还有一个JSPservlet,又叫servlet引擎,所有后缀为.jsp的文件都处理。

    当浏览器访问http://localhost:8080/day9_1/index.jsp。服务器发现后缀为.jsp,它会根据路径找到index.jsp文件,会将index.jsp翻译成index_jsp.java文件,对这个java文件进行编译,产生一个index_jsp.class文件,将class文件加载运行。将JSP翻译成java文件,它是将JSP中的所有的HTML代码通过流进行输出,也就是说最终翻译成class,被虚拟机加载,它本质是servlet,它就会往回响应,响应回去就是把JSP中的HTML代码以流的方式写回浏览器。所以在JSP中展示出了HTML代码。

    当请求过来,这是第一步,到服务器端,服务器端处理了,找到hello.jsp,服务器怎么处理的,就是在Tomcat中的web.xml配置了一个JSP servlet引擎,根据后缀名,处理了,处理之后会找到这个JSP,然后对这个JSP做一个翻译的过程,把它翻译成了一个java文件,这个java文件会进行编译,编译以后变成class,而后被加载,加载后就执行,就把原来JSP里面的代码,即HTML代码以流的方式写回浏览器。

    work --->  catalina -----> localhost ------> day9_1 ------> index_JSP.java

    三、怎么在JSP中书写java代码

    标签 语法 用途
    声明标签 <%! 变量或方法声明%> 声明JSP内所使用的全局变量或方法或内部类(它用于定义成员)(写的内容在成员位置上)
    表达式 <%= 表达式 %> 输出java中变量或者表达式的值到页面上(它用于输出) out.print(内容)
    程序代码标签 <%程序代码%> 编写java程序代码,但不可以定义代码(它用于定义局部)(声明的变量在局部位置_jspService方法中)
    <%@ page language="java" contentType="text/html; charset=UTF-8"
        pageEncoding="UTF-8"%>
    <!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 i = 10; %> <!-- 成员变量 -->
    <%! public void show(){} %> <!-- 成员方法 -->
    <% int i = 100; %>
    <%= "hello" %>
    </body>
    </html>

    注意:<%! %>中的内容,作为类的成员变量和成员函数,写在类的成员位置。

    <% %>中的内容,写在_jspService函数中。

    <%@ page language="java" contentType="text/html; charset=UTF-8"
        pageEncoding="UTF-8"%>
    <!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 i = 10;
    %> <!-- 成员变量 -->
    <%! 
    	public void show(){} 
    %> <!-- 成员方法 -->
    <% int i = 100; %>
    输出函数中的i:<%=i%>
    输出成员变量i:<%=this.i %>
    </body>
    </html>

    上面声明,下面可以直接用,因为被编译到一个类中,知道被编译的位置,就可以直接正确使用。

    如果把一个数据存在request域中(因为_jspService方法参数就是request和response,所以可以直接用),取值操作如下:

    <%@ page language="java" contentType="text/html; charset=UTF-8"
        pageEncoding="UTF-8"%>
    <!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>
    <%request.setAttribute("name","tom"); %>
    <%=request.getAttribute("name")==null ? "" : request.getAttribute("name") %><br>
    ${requestScope.name}
    </body>
    </html>

    java代码和JSP代码一起使用,在开发中不要这样写,不便于维护

    <%@ page language="java" contentType="text/html; charset=UTF-8"
        pageEncoding="UTF-8"%>
    <!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>
    <%
    	for(int i = 0; i < 10; i++){
    		%>
    		hello&nbsp;<%=i %><br>
    		<%
    	}
    %>
    </body>
    </html>
    <%
    String path=request.getContextPath();
    String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
    %>
    <%@ page language="java" contentType="text/html; charset=UTF-8"
        pageEncoding="UTF-8"%>
    <%
    String path=request.getContextPath();
    String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
    %>
    <!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>
    <%=path %><br>
    <%=basePath %>
    <form action="<%=path %>/login">
    	<input type="submit">
    </form>
    <form action="<%=basePath%>login">
    	<input type="submit">
    </form>
    </body>
    </html>

    建议使用<%=path%>/login

     

    展开全文
  • JSP的基本使用

    万次阅读 多人点赞 2018-09-03 18:25:00
    今天给大家分享一下,修真院官网JAVA任务二,扩展思考中的知识点——JSP基本知识 一、背景介绍   JSP(Java Server Pages),其根本是一个简化的Servlet设计,它实现了在Java中使用HTML标签。JSP是一种动态网页技术...

    大家好,我是IT修真院郑州分院第十期学员,一枚正直纯洁善良的JAVA程序员。

    今天给大家分享一下,修真院官网JAVA任务二,扩展思考中的知识点——JSP基本知识

    一、背景介绍  

           JSP(Java Server Pages),其根本是一个简化的Servlet设计,它实现了在Java中使用HTML标签。JSP是一种动态网页技术标准,也是JavaEE的标准。JSP和Servlet一样,是在服务器端执行的。JSP是在Servlet技术发展之后为了让开发者写html标签更方便而发展起来的技术,JSP实际上就是Servlet。

           人们通常把Servlet作为Web应用中的控制组件来使用,只负责响应请求产生数据,并把数据通过转发技术带给jsp,而把jsp技术作为数据显示模板来使用。这样使程序结构更清晰,可读性和可维护性更高。

    二、知识剖析(JSP页面元素构成)

          1.JSP页面的三大指令

         (1)<%@ page ... %>    定义网页依赖属性,比如脚本语言、error页面、缓存需求等等;

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

           page指令一般在表头位置,用来设置本页面的语法,编码格式,导包等信息,page指令可以合并在一行,也可以分为多行,这个可以根据自己的需求编写。

         (2)<%@ include ... %>    包含其他文件(静态包含);

           有两个页面一个是index.jsp(左)页面,一个是include.jsp(右)页面,在同级目录,如下所示;

          初始页面:

             

          显示:

             

          在index.jsp中加入include指令:

          

          显示:

          

         (3)taglib指令:引入标签库的定义。

          <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
           prefix:指定标签前缀,这个东西可以随意起名
           uri:指定第三方标签库的uri(唯一标识)

          2.表达式

          在JSP页面中执行的表达式 <%=表达式%>,注意表达式不以分号结束。例如,当前时间:<%= new java.util.Date() %>;

          在页面输出指定格式的当前时间:

    <%=new SimpleDateFormat("yy年MM月dd日 HH:mm:ss").format(new Date())%>

     

          3.脚本片段

          在JSP页面中插入多行java代码 <% Java代码 %>,JSP引擎在翻译JSP页面时,会将JSP脚本片段中的Java代码原封不动的放到Servlet的_jspServlet方法中,所以,<% %>中的Java代码必须严格遵循java语法。

        脚本即 Scriptlet , 也就是 JSP 中的代码部分 , 是一段 Java 代码 , 几乎可以使用任何 Java 语法 , 它是在请求时期执行的 , 可以使用 JSP 页面所定义的变量、方法、表达式或 JavaBean . 脚本定义的变量和方法在当前整个页面内有效 , 但不会被其他线程共享 , 用户对该变量的作用不会影响其他用户 , 当变量所在页面关闭时 , 该变量会被销毁

      语法格式如下 :

      <%scriptlet%>

    <%! String str ="为中华之崛起而读书";%>
    <%
        if(true){
    %>
            <%=str%>
    <%
        }
    %>

          4.注释(3种方式)

         (1) HTML注释:<!--html注释,且客户端可见-->;

         (2)JSP注释:<%--JSP注释,客户端不可见--%>;

         (3)JSP脚本注释:即java注释 //单行 , /*多行 */。

          5.声明:

          在JSP页面中,可以声明一个或者多个合法的变量和方法 , 声明后的变量和方法可以在本 JSP 页面的任何位置使用 , 并将在 JSP 页面初始化时被初始化。

     语法格式如下 :

      <!%declaration; [declaration;] ...%>

         在声明时需要注意 :

    1. 声明以 "<%!" 开头 , 以 "%>" 结尾 , "%!" 必须紧挨
    2. 变量和方法的命名规则应与 Java 的命名规则相同
    3. 可以直接使用在 "<@page %>" 中被包含进来的已经声明的变量和方法 , 不需要对其进行重新声明
    4. 一个声明仅在一个页面有效 , 如果想每个页面都用到一些声明 , 可以将它们写成一个单独的文件 , 用 "<%@ include%>" 指令 或 "<jsp:include>" 动作包含进来

    三、常见问题

          html和jsp的区别(见扩展思考)

    四、编码实战(见知识剖析)

    五、扩展思考

          html和jsp的区别:

          HTML(Hypertext Markup Language)文本标记语言,它是静态页面,和JavaScript一样解释性语言,为什么说是解释性语言呢?因为,只要你有一个浏览器那么它就可以正常显示出来,而不需要指定的编译工具,只需在TXT文档中写上HTML标记就OK。

          JSP(Java Server Page)是Java服务端的页面,所以它是动态的,它是需要经过JDK编译后把内容发给客户端去显示,我们都知道,Java文件编译后会产生一个class文件,最终执行的就是这个class文件,JSP也一样,它也要编译成class文件!JSP不止要编译,它还得要转译,首先把JSP转译成一个Servlet文件,然后在编译成class文件。当用户访问JSP时就执行了class文件

          1.HTML能直接打开,jsp只能发布到Tomact等服务器上才能打开;

          2.定义上HTML页面是静态页面可以直接运行,JSP页面是动态页它运行时需要转换成servlet;

          3.他们的表头不同,这个是JSP的头“ <%@ page language="java" import="java.util.*" pageEncoding="gbk"%>”在表头中有编码格式和导入包等;

          4.在jsp中用<%%>就可以写Java代码了,而html没有

     六、参考文献

          本文主要摘自https://www.cnblogs.com/rocomp/p/4822419.htmlhttps://www.cnblogs.com/yuanmiemie/p/6196906.html

    七、更多讨论

         1.jsp页面如何设置没有缓存?

        (1)清空tomcat缓存。

           server->tomcat->clean tomcat work directory.

        (2)设置页面Nocache方式,即每次访问此页面,均需要从服务器重新读取,而不是使用缓存中存在的此页面。

          在jsp页面的<head></head>中间添加如下代码。

    <meta http-equiv="pragma" content="no-cache"> 
    
    <meta http-equiv="cache-control" content="no-cache"> 
    
    <meta http-equiv="expires" content="0">   

        2.jsp怎么去关掉session?

          session.removeAttribute("username"); //注销session中的username对象
          session.removeAttribute("id"); //注销session中的id对象
          session.invalidate(); //关闭session

        3.jsp的内置对象有哪几个?

          JSP中一共预先定义了9个这样的对象,分别为:request、response、session、application、out、pagecontext、config、page、exception

         (1)request对象

          request 对象是 javax.servlet.httpServletRequest类型的对象。 该对象代表了客户端的请求信息,主要用于接受通过HTTP协议传送到服务器的数据。(包括头信息、系统信息、请求方式以及请求参数等)。request对象的作用域为一次请求。

         (2)response对象

          response 代表的是对客户端的响应,主要是将JSP容器处理过的对象传回到客户端。response对象也具有作用域,它只在JSP页面内有效。

          (3)session对象

           session 对象是由服务器自动创建的与用户请求相关的对象。服务器为每个用户都生成一个session对象,用于保存该用户的信息,跟踪用户的操作状态。session对象内部使用Map类来保存数据,因此保存数据的格式为 “Key/value”。 session对象的value可以使复杂的对象类型,而不仅仅局限于字符串类型。

          (4)application对象

           application 对象可将信息保存在服务器中,直到服务器关闭,否则application对象中保存的信息会在整个应用中都有效。与session对象相比,application对象生命周期更长,类似于系统的“全局变量”。

         (5)out 对象

          out 对象用于在Web浏览器内输出信息,并且管理应用服务器上的输出缓冲区。在使用 out 对象输出数据时,可以对数据缓冲区进行操作,及时清除缓冲区中的残余数据,为其他的输出让出缓冲空间。待数据输出完毕后,要及时关闭输出流。

         (6)pageContext 对象

          pageContext 对象的作用是取得任何范围的参数,通过它可以获取 JSP页面的out、request、reponse、session、application 等 对象。pageContext对象的创建和初始化都是由容器来完成的,在JSP页面中可以直接使用 pageContext对象。

          (7)config 对象

          config 对象的主要作用是取得服务器的配置信息。通过 pageConext对象的 getServletConfig() 方法可以获取一个config对象。当一个Servlet 初始化时,容器把某些信息通过 config对象传递给这个 Servlet。 开发者可以在web.xml 文件中为应用程序环境中的Servlet程序和JSP页面提供初始化参数。

          (8)page 对象

          page 对象代表JSP本身,只有在JSP页面内才是合法的。 page隐含对象本质上包含当前 Servlet接口引用的变量,类似于Java编程中的 this 指针。

          (9)exception 对象

           exception 对象的作用是显示异常信息,只有在包含 isErrorPage="true" 的页面中才可以被使用,在一般的JSP页面中使用该对象将无法编译JSP文件。excepation对象和Java的所有对象一样,都具有系统提供的继承结构。exception 对象几乎定义了所有异常情况。在Java程序中,可以使用try/catch关键字来处理异常情况; 如果在JSP页面中出现没有捕获到的异常,就会生成 exception 对象,并把 exception 对象传送到在page指令中设定的错误页面中,然后在错误页面中处理相应的 exception 对象。

    八、视频教程

    https://v.qq.com/x/page/f0761gtmhhp.html

    快点加入我们吧:http://www.jnshu.com/login/1/23284132

    展开全文
  • JSP开发环境的搭建,工具的使用,基础语法、变量、常量、数据类型、运算符、if语句、while语句、表单数据的获取、在线编辑器的使用、上传的使用等 开发工具:intellij idea 2020 开发环境:jdk1.8. + tomcat-8.5
  • JSP&Servlet学习笔记-3

    2019-11-12 23:35:56
    contentType:定义 JSP 字符的编码和页面响应的 MIME 类型; pageEncoding:Jsp 页面的字符编码 实例 <%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding="utf-8"%>...
    1. page 指令介绍

    Language : 用来定义要使用的脚本语言;
    contentType:定义 JSP 字符的编码和页面响应的 MIME 类型;
    pageEncoding:Jsp 页面的字符编码

    实例

    <%@ page language="java" contentType="text/html; charset=utf-8"
        pageEncoding="utf-8"%>
    <!DOCTYPE html>
    <html>
    <head>
    <meta charset="utf-8">
    <title>Insert title here</title>
    </head>
    <body>
    
    </body>
    </html>
    
    1. scriptlet 标签

    通过 scriptlet 标签我们可以在 Jsp 里嵌入 Java 代码;
    第一种:<%! %> 我们可以在里面定义全局变量、方法、类;
    第二种:<% %> 我们可以在里面定义局部变量、编写语句;
    第三种:<%= %> 我们可以在里面输出一个变量或一个具体内容;

    jsp本质最终都是Servlet。那什么时候jsp被编译成Servlet类呢?
    答:在第一次访问jsp时。

    全局的例子

    <%@ page language="java" contentType="text/html; charset=utf-8"
    	pageEncoding="utf-8"%>
    <!DOCTYPE html>
    <html>
    <head>
    <meta charset="utf-8">
    <title>Insert title here</title>
    </head>
    <body>
    	<%!String str = "一个全局变量";%>
    	<%!
    	   public void fun1(){
    		System.out.println("全局方法");
    	}
    	%>
    	<%!
    	class C{
    		private int a;
    		public void f(){
    			System.out.println("全局类");
    		}
    	}
    	%>
    </body>
    </html>
    

    局部的例子

    <%@ page language="java" contentType="text/html; charset=utf-8"
    	pageEncoding="utf-8"%>
    <!DOCTYPE html>
    <html>
    <head>
    <meta charset="utf-8">
    <title>Insert title here</title>
    </head>
    <body>
    	<%
    	    int a=123;
    	    String b="java";
    	    out.println(a+b+"局部变量");
    	%>
    </body>
    </html>
    
    1. Jsp 注释

    <!-- --> Html 注释 客户端可见
    <%-- --%> Jsp 注释 客户端不可见
    // java 单行注释
    /* */ java 多行注释

    1. Jsp 包含指令

    <%@ include file=”要包含的文件”%> 静态包含 先包含,后编译处理;
    <jsp:include page=”要包含的文件”> 动态包含 先编译处理,后包含;
    以后开发用动态包含;

    1. Jsp 跳转指令
    • forward.jsp
    <%@ page language="java" contentType="text/html; charset=utf-8"
        pageEncoding="utf-8"%>
    <!DOCTYPE html>
    <html>
    <head>
    <meta charset="utf-8">
    <title>forward</title>
    </head>
    <body>
    <jsp:forward page="target.jsp">
        <jsp:param value="BabyCat" name="userName"/>
        <jsp:param value="123456" name="password"/>
    </jsp:forward>
    </body>
    </html>
    
    • target.jsp
    <%@ page language="java" contentType="text/html; charset=utf-8"
        pageEncoding="utf-8"%>
    <!DOCTYPE html>
    <html>
    <head>
    <meta charset="utf-8">
    <title>target</title>
    </head>
    <body>
    服务器内部跳转后的页面<br/>
    userName:<%=request.getParameter("userName") %><br/>
    password:<%=request.getParameter("password") %><br/>
    </body>
    </html>
    


    客户端浏览器的地址没有改变。

    1. eclipse中的Tomcat server可以关联多个工程
    展开全文
  • JSP

    万次阅读 多人点赞 2018-09-17 16:16:44
    jsp简介 JSP(Java Server Pages)是JavaWeb服务器端的动态资源,它与html页面的作用是相同的,显示数据和获取数据。 jsp: 作为请求发起页面,例如显示表单、超链接。 : 作为请求结束页面,例如显示数据。 ...
  • jsp简介及工作原理

    万次阅读 2017-08-05 07:52:31
    什么是jsp JSP全名为Java Server Pages,中文名叫java服务器页面,是一种动态页面技术,逻辑从servlet中分离出来。在传统的网页HTML(标准通用标记语言的子集)文件(*.htm,*.html)中插入Java程序段(Scriptlet)和JSP...
  • JSP快速入门教程——全十讲

    万次阅读 多人点赞 2008-03-12 19:26:00
    第一讲(参考《Java Web程序设计基础教程》第1章)1 JSP 和 Java的关系 一般Java指的标注版 Java SE 另外两个版本:Java EE 和 Java ME JSP属于Java EE的一部分。 Java EE: 组件:Web层组件(JSP+Servlet)+...
  • jsp页面中把多个商品的详细信息传到另一个jsp页面中并显示该怎么做
  • JSP之换行的实现...

    万次阅读 2012-05-13 22:22:42
    JSP换行的实现,其实是通过html换行标签来实现的,这也说明了,JSP页面经服务器转换后, 最终变成了html页面... 效果截图如下: 代码如下: //输出数据库的路径,然后换行 out.println("数据库路径为:"+conn....
  • 一: <script> $(function () { location.href="${pageContext.request.contextPath}/pages/main.jsp"; }); </script>...jsp:forward page="/pages/main.jsp"></jsp:forward&g...
  • 如何在Jsp页面中导入JAVA类。

    万次阅读 2004-09-15 11:36:00
    BBS0010AF BBS0010 = (BBS0010AF) session.getAttribute("BBS0010");%>
  • jsp页面中如何使用超链接

    万次阅读 2017-04-01 16:16:10
    以下是一个例子 注册
  • JSP中大于号小于号的转义字符

    万次阅读 2010-08-18 16:04:00
    JSP 中大于号、小于号、单引号 分别为: > < " 
  • eclipse 不让验证jsp 设置

    万次阅读 2013-03-05 21:41:16
    windows->preferences->MyEclipse->Validation 勾选JSP Syntax Validator为Manual(去掉Build的勾) 如想验证语法时用在JSP文件中右键MyEclipse->Run Validation
  • JSP中引用JS文件的三种方法

    万次阅读 2016-11-11 10:57:24
    JSP中引用JS文件的三种方法:1、如果是直接访问JSP,则使用相对于JSP页面的相对路径:当项目目录如图所示时,则在NewFile.jsp中访问jquery-1.9.1.min.js的方法为:...则使用相对于W
  • jsp页面给字体加颜色

    万次阅读 2018-02-27 15:19:51
    jsp页面给字体加颜色&lt;span style="color:red"&gt;补件完成&lt;/span&gt;
  • 这个问题是因为tomcat在启动过程中jsp和servlet的jar包出了问题。 1. 如果你是用的maven,呢么你就看看有没有Jsp,Servlet,Jstl的包,没有添加上,有的话重新add一下。 2. 如果是使用的lib目录,看看里面有没有...
  • 从一个jsp页面向另一个jsp页面传值

    万次阅读 2012-10-12 15:32:39
    只要以下做法就可以实现:A.jsp :通过post 和get、连接都可以传 post和get 就不提了。 连接的: '>传递到B页面 B.jsp : B页面通过如下代码接收 String name=request.getParameter("name"); out.println("接收到:...
1 2 3 4 5 ... 20
收藏数 927,157
精华内容 370,862
关键字:

jsp