JSP速成

发布于:2024-09-18 ⋅ 阅读:(16) ⋅ 点赞:(0)

JSP速成

有点像php,了解一下就行

1. 简介

JSP(Java Server Pages),是Java的一种动态网页技术。

JSP可以看作一个Java Servlet,主要用于实现Java web应用程序的用户界面部分。网页开发者们通过结合HTML代码、XHTML代码、XML元素以及嵌入JSP操作和命令来编写JSP。

当第一次访问JSP页面时,Tomcat服务器会将JSP页面翻译成一个java文件,并将其编译为.class文件。JSP通过网页表单获取用户输入数据、访问数据库及其他数据源,然后动态地创建网页。

JSP生命周期:JSP页翻译->编译JSP页面->类加载->实例化(生成Servlet的对象被创建)->初始化(容器调用jspInit())->请求处理(容器调用jspService())->销毁(容器调用jspDestroy())

2. jsp演示

idea新建java项目,进该项目设置,添加web模块,依次点击create artifact->apply->ok

在这里插入图片描述

在新出现的web目录下新建index.jsp和index.html

index.jsp

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
    <h1>hello World</h1>
    <%!
        int x=50;int y=50;
        int add(int a,int b){return a+b;}
    %>
    <%= "数据是"+add(x,y) %>
    <%
        String name=request.getParameter("uname");
        out.println("welcome "+name);
    %>
</body>
</html>

index.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
    <form action="index.jsp">
        <input type="text" name="uname">
        <input type="submit" value="go"></br>
    </form>
</body>
</html>

pom.xml添加

<dependencies>
        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>javax.servlet-api</artifactId>
            <version>3.1.0</version>
            <scope>provided</scope>
        </dependency>
</dependencies>

点击edit configurations,添加个tomcat服务器,tomcat的安装配置这里就不赘述了。

在这里插入图片描述在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

3. jsp元素(标签)

1. jsp脚本元素

在JSP中,可以使用脚本元素在jsp页面内编写java代码。脚本元素提供了在jsp中插入Java代码的能力。有三种类型的脚本元素:

//脚本标签
<% java source code %>
    等价于xml语句:<jsp:scriptlet>代码片段</jsp:scriptlet>

//表达式标签
<%= statement %>

//声明标签,用于定义类级别的变量和方法
<%! field or method declaration %>

2. jsp指令元素

告诉web容器如何在jsp页面翻译成相应的servlet的消息。

//页面指令,设置jsp页面属性
<%@ page attribute="value" %>
    比如:<%@ page contentType="text/html;charset=UTF-8" language="java" %>
//包含指令
<%@ include file="filename" %>
    比如:<%@ include file="index.html" %>
//标签库指令,用于引入自定义标签库
<%@ taglib uri="uriofthetaglibrary" prefix="prefixoftaglibrary" %> 
    比如:<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %> 
    //前缀是c,用法:<c:out value="taglib demo"></c:out>

3. jsp操作标签

或称动作标签

用于控制页面之间流动并使用java Bean

所有的动作要素都有两个属性:id属性和scope属性。

  • id属性是动作元素的唯一标识,可以在JSP页面中引用。动作元素创建的id值可以通过PageContext来调用。
  • scope属性用于识别动作元素的生命周期。 id属性和scope属性有直接关系,scope属性定义了相关联id对象的寿命。 scope属性有四个可能的值: (a) page, (b)request, ©session, 和 (d) application。
JSP Action Tags Desciption
jsp:forward 将请求转发到其他页面,通常用于实现请求的重定向
jsp:include 包含另一个资源
jsp:useBean 在页面中创建或定位一个 JavaBean 实例,使得页面可以使用该 JavaBean 中的属性和方法
jsp:setProperty 设置 JavaBean 实例的属性值
jsp:getProperty 获取 JavaBean 实例的属性值
jsp:plugin 用于嵌入 Applet 或者其他对象到生成的页面中
jsp:param 用于在包含其他页面或转发请求时,传递参数给被包含的页面或转发的目标页面
jsp:fallback 在组件出现故障的错误时发送给用户错误信息
<jsp:forward page="pt.jsp"> <!--重定向至pt.jsp页面 -->
<jsp:include page="date.jsp" flush="true" />
    
<jsp:useBean id="name" class="package.class" />
<!--class指定Bean的完整包名,id指定Bean的名字-->
    
<jsp:useBean id="user" class="com.codingman.jspdemo.User"  scope="session">
   <jsp:setProperty name="user" property="name" value="lihua"/>
    <jsp:setProperty name="user" property="pass" value="123456"/>
    <jsp:getProperty name="user" property="pass" />
</jsp:useBean>
    
<jsp:plugin type="applet" codebase="dirname" code="MyApplet.class"
                           width="60" height="80">
   <jsp:param name="fontcolor" value="red" /><!--param元素可用于向Applet 或 Bean 传递参数-->
   <jsp:param name="background" value="black" />
 
   <jsp:fallback>
      Unable to initialize Java Plugin
   </jsp:fallback>
 
</jsp:plugin>

4. JSP隐式对象

object type object type
out JspWriter session HttpSession
request HttpServletRequest pageContext PageContext
response HttpServletResponse page Object
config ServletConfig exception Throwable
application ServletContext
out.println(666);
out.flush();

request.getParameter("name");
request.getHeader("headername");

response.sendRedirect("https://baidu.com");//重定向
response.setContentType("text/html");
response.setHeader("headerName", "headerValue");

//config 表示JSP页面的配置对象,包含初始化参数和Servlet上下文。
config.getInitParameter("dname");
ServletContext context = config.getServletContext();

//application 表示Web应用程序的上下文,可以在整个应用中共享数据。
application.setAttribute("appName", "MyApp");
String app = (String) application.getAttribute("appName");

//session 表示一个用户会话,用于在多个请求间保持用户数据。
session.setAttribute("username", "John");
String user = (String) session.getAttribute("username");
session.invalidate();

//pageContext 提供对各种范围对象(如page、request、session、application)的统一访问。
pageContext.setAttribute("age",18,PageContext.SESSION_SCOPE);
pageContext.getAttribute("age",PageContext.SESSION_SCOPE);

//page 表示当前的JSP页面对象,等同于this关键字。
page.getClass().getName()

web目录下新建hello目录

hello目录下新建error.jsp,index.html,second.jsp,welcome.jsp

error.jsp

<%@ page contentType="text/html;charset=UTF-8" language="java" isErrorPage="true" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
<h3>Sorry, an exception occured!</h3>
Exception is:
<%= exception%>
</body>
</html>

index.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<form action="welcome2">
    n1: <input type="text" name="n1"></br>
    n2: <input type="text" name="n2"></br>
    <input type="submit" value="除法"></br>
</form>
</body>
</html>

second.jsp

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
    <p>second page</p></br>
    <%= "appName: "+application.getAttribute("appName")%>
    <%= "uname: "+session.getAttribute("uname")%>
    <%= "age: "+pageContext.getAttribute("age",PageContext.SESSION_SCOPE) %>
    <%= page.getClass().getName()%>
    <% this.log("message");%>
</body>
</html>

welcome.jsp

<%@ page contentType="text/html;charset=UTF-8" language="java"  errorPage="error.jsp" %>
<html>
<head>
    <title>Title</title>
</head>
<body>


<%
    out.println("dname is "+config.getInitParameter("dname"));
    String n1=request.getParameter("n1");
    String n2=request.getParameter("n2");
    int a=Integer.parseInt(n1);
    int b=Integer.parseInt(n2);
    int c=a/b;
    out.println("division of numbers is "+c);
    application.setAttribute("appName","myApp");
    session.setAttribute("uname","zhangsan");
    pageContext.setAttribute("age",18,PageContext.SESSION_SCOPE);
%>
<a href="second.jsp">second jsp page</a>

</body>
</html>

/web/WEB-INF/web.xml参考如下

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
         version="4.0">
    <servlet>
        <servlet-name>aaa</servlet-name>
        <jsp-file>/hello/welcome.jsp</jsp-file>
        <init-param>
            <param-name>dname</param-name>
            <param-value>lihua</param-value>
        </init-param>
    </servlet>
    <servlet-mapping>
        <servlet-name>aaa</servlet-name>
        <url-pattern>/hello/welcome2</url-pattern>
    </servlet-mapping>
</web-app>

在这里插入图片描述

5. 表达式(EL)语言

简化了存储在Java Bean组件中的数据的可访问性,以及其他对象如请求,会话,应用程序等。在EL中,有许多隐含的对象,运算符和保留字。

${expression}

Object 描述
pageScope page 作用域
requestScope request 作用域
sessionScope session 作用域
applicationScope application 作用域
param Request 对象的参数,字符串
paramValues Request对象的参数,字符串集合
header HTTP 信息头,字符串
headerValues HTTP 信息头,字符串集合
cookie cookie值
initParam 获取上下文初始化参数
pageContext 当前页面的pageContext
${sessionScope.username}

${param["username"]}
${param.username}
${paramValues.arr1[0]} <!--访问数组第一个元素-->
${header["user-agent"]}
${headerValues["user-agent"]}


${cookie.JSEESSIONID.value}
${initParam.root} <!--获取web应用初始化参数-->
${pageContext.request.queryString}

6. JSP中的MVC

MVC代表模型视图合控制器。

控制器充当视图和模型之间的接口。控制器拦截所有传入的请求。比如:servlet

模型表示当前应用程序的状态,即数据。它还可以具有业务逻辑。比如:JavaBean

视图表示呈现,即UI(用户界面)。比如:jsp

在web目录下新建mvc目录

在mvc目录下新建index.jsp,loginSuccess.jsp,loginFail.jsp

index.jsp

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
    <form action="login" method="post">
        name: <input type="text" name="name"></br>
        pass: <input type="password" name="pass"></br>
        <input type="submit" value="login"></br>
    </form>
</body>
</html>

loginSuccess.jsp

<%@ page contentType="text/html;charset=UTF-8" language="java" import="com.jk.mvc.loginBean"%>
<html>
<head>
    <title>Title</title>
</head>
<body>
    <p>you are successfully logged in !</p>
    <%
        loginBean bean=(loginBean) request.getAttribute("bean");
        out.print("welcome, "+bean.getName());
    %>
</body>
</html>

loginFail.jsp

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
<p>you are fail logged in !</p>
<%@ include file="index.jsp" %>
</body>
</html>

/src/main/java/com.jk目录下新建Package,名为mvc

mvc下新建java文件loginBean和LoginServlet

loginBean.java,用于数据封装和校验

package com.jk.mvc;

public class loginBean {
    private String name,pass;
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public String getPass() {
        return pass;
    }
    public void setPass(String pass) {
        this.pass = pass;
    }
    public boolean validate(){
        if(pass.equals("123456")){
            return true;
        }else{
            return false;
        }
    }
}

LoginServlet.java,用于处理url请求

package com.jk.mvc;
import java.io.IOException;
import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.http.*;

import java.io.IOException;

public class LoginServlet extends HttpServlet{//Alt+Enter导入包
    @Override
    protected void doPost(HttpServletRequest req,HttpServletResponse resp)
            throws ServletException,IOException{
        String name = req.getParameter("name");
        String pass = req.getParameter("pass");

        loginBean bean=new loginBean();
        bean.setName(name);
        bean.setPass(pass);
        req.setAttribute("bean", bean);
        boolean status=bean.validate();
        if(status){
            RequestDispatcher rd=req.getRequestDispatcher("loginSuccess.jsp");
            rd.forward(req,resp);
        }else{
            RequestDispatcher rd=req.getRequestDispatcher("loginFail.jsp");
            rd.forward(req,resp);
        }
    }
}

web.xml添加一下LoginServlet类的url路径

<servlet>
    <servlet-name>s1</servlet-name>
    <servlet-class>com.jk.mvc.LoginServlet</servlet-class>
</servlet>
<servlet-mapping>
    <servlet-name>s1</servlet-name>
    <url-pattern>/mvc/login</url-pattern>
</servlet-mapping>

在这里插入图片描述

7. JavaBean

JavaBean 是特殊的 Java 类,使用 Java 语言书写,并且遵守 JavaBean API 规范。

JavaBean有默认无参构造函数,实现了serializable接口,可能有一系列可读写属性,可能有一系列的 getter 或 setter 方法。

src/main/java/com/jk/student/StudentsBean.java

package com.jk.student;

public class StudentsBean implements java.io.Serializable
{
    private String firstName = null;
    private String lastName = null;
    private int age = 0;

    public StudentsBean() {
    }
    public String getFirstName(){
        return firstName;
    }
    public String getLastName(){
        return lastName;
    }
    public int getAge(){
        return age;
    }

    public void setFirstName(String firstName){
        this.firstName = firstName;
    }
    public void setLastName(String lastName){
        this.lastName = lastName;
    }
    public void setAge(int age) {
        this.age = age;
    }
}

web目录下新建student文件夹

index.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
         pageEncoding="UTF-8" %>
<html>
<head>
    <title>get 和 set 属性实例</title>
</head>
<body>

<jsp:useBean id="students"
             class="com.jk.student.StudentsBean">
    <jsp:setProperty name="students" property="firstName"
                     value="小强"/>
    <jsp:setProperty name="students" property="lastName"
                     value="王"/>
    <jsp:setProperty name="students" property="age"
                     value="10"/>
</jsp:useBean>

<p>学生名字:
    <jsp:getProperty name="students" property="firstName"/>
</p>
<p>学生姓氏:
    <jsp:getProperty name="students" property="lastName"/>
</p>
<p>学生年龄:
    <jsp:getProperty name="students" property="age"/>
</p>

</body>
</html>

在这里插入图片描述

crud详见参考链接

参考

JSP详解,看这一篇就够了 OEC小胖胖

50分钟学习JSP #java #jsp

JSP JavaBean

Java安全学习——内存马 枫のBlog


网站公告

今日签到

点亮在社区的每一天
去签到