JSP速成

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 TagsDesciption
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隐式对象

objecttypeobjecttype
outJspWritersessionHttpSession
requestHttpServletRequestpageContextPageContext
responseHttpServletResponsepageObject
configServletConfigexceptionThrowable
applicationServletContext
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描述
pageScopepage 作用域
requestScoperequest 作用域
sessionScopesession 作用域
applicationScopeapplication 作用域
paramRequest 对象的参数,字符串
paramValuesRequest对象的参数,字符串集合
headerHTTP 信息头,字符串
headerValuesHTTP 信息头,字符串集合
cookiecookie值
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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值