小白学习Java第三十五天

今日内容

  1. JSP概述
  2. JSP核心

三大指令

九大内置对象

四大作用域

EL表达式

JSTL标签

  1. 学生项目完善查询、详情、修改、删除
  • JSP简介

JSP(全称JavaServer Pagesjava服务器页面。 是一种动态网页技术标准。JSP部署于网络服务器上,可以响应客户端发送的请求,并根据请求内容动态地生成HTMLXML或其他格式文档的Web网页,然后返回给请求者。

JSP技术以Java语言作为脚本语言,为用户的HTTP请求提供服务,并能与服务器上的其它Java程序共同处理复杂的业务需求,是简化版的Servlet

执行的过程为  xxx.jsp---->xxx.java---->xxx.class

  • 使用策略

1.纯碎的HTML使用

语法和使用HTML的用法完全一样,可以包含css,javaScript,Jquery

2.纯粹的Servlet使用

<% java代码片段 %>写法显示在jsp页面,相当于Servlet中的service方法

但是我们需要注意:

         jsp 只用来显示数据,不处理业务

         Servlet 只处理业务

案例演示:

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

<html>

<head>

 <title>Title</title>

 <style>

     div{

         border:1px solid red;

         height: 200px;

         width: 200px;

     }

 </style>

</head>

<body>

 <!--纯粹的html演示-->

 <div>div区域块</div>

 <!--servlet使用演示-->

 <% Date d = new Date();

     System.out.print(d);

 %>

 <%=new Date()%>

 <%=d%>

</body>

</html>

通过以上案例可以看出在jsp中的html内容和java代码都生效了,编译之后的文件看下图:

 

查看jsp文件对应生成的java源文件路径:

 

 

  • Jsp核心

Jsp的内容包含除了以上的htmlcssjsjqueryjava代码外,还可以包含三大指令,九大内置对象,四大作用域,EL表达式,JSTL标签库。

  • 三大指令

JSP包含三个指令:page(描述页面)、 include(页面包含) taglib(表达式引入)

语法:<%@ 指定名称  属性名=””,........%>

1、page(描述页面)

<%@page import="java.util.ArrayList"%>

<%@page import="java.util.List"%>

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

用来设置JSP页面的基本描述信息,主要属性如下:

language : 定义页面语言 java

contentType:定义页面返回值的类型及语言(服务器返回response

pageEncoding:定义页面语言(浏览器的)

errorPage:一旦页面发生未知错误  定义一个跳转的页面errorPage="error.jsp"

import java

2、include(页面包含)

页面包含说的是一个页面可以包含另一个页面的内容,并且能正常加载。

语法:<%@include file=”被包含的页面名称” %>

案例:

top.jsp页面代码:

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

    pageEncoding="UTF-8"%>

<h2>我是头部页面内容</h2>

bottom.jsp页面代码:

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

    pageEncoding="UTF-8"%>

<h2>我是底部页面内容</h2>

index..jsp页面代码(包含top.jspbottom.jsp):

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

    pageEncoding="UTF-8"%>

<!DOCTYPE html>

<html>

<head>

<meta charset="UTF-8">

<title>首页</title>

</head>

<body>

         <!-- 头部包含外部top.jsp页面 -->

         <div><%@include file="top.jsp" %></div>

        

         <div>

                  <h3>我是页面主体</h3>

         </div>

         <!-- 底部包含外部bottom.jsp页面 -->

         <div><%@include file="bottom.jsp" %></div>

</body>

</html>

index.jsp页面运行效果:

 

三个文件最后会被翻译成一个java文件,index_jsp.java代码:

 

include指令的主要作用:可以将页面公共的部分提取出来,让每个页面包含这个公共的页面,一是为了减少代码量,二是易于后续的维护。

3、taglib(表达式引入)

后面使用JSTL标准标签库时使用。

语法:<%@taglib prefix="简称" uri="具体的表达式的连接" %>

  • 九大内置对象

内置对象:也称隐式对象,在jsp中,已经初始化好并且给我们封装好了,不需要程序员创建,可以直接使用的对象就是内置对象。

  对象名 = new 类();

对象名                  功能                                 类型

Out                                      页面输出对象                            JspWriter

Exception                   异常处理对象                            Throwable

Page(this)                            描述页面的对象                           Object

PageContext                       页面的全局对象【作用域】                  PageContext

Request                               请求对象【作用域】                       HttpServletRequest  

Response                   响应对象                               HttpServletResponse

Session                                会话对象【作用域】                       HttpSession

Config                                  配置                                   ServletConfig

Application                         服务器对象【作用域】                      ServletContext

这些内置对象在Jsp页面都是存在的,我们可以直接使用;

这里默认能显示的内置对象共8个,还有一个特殊的对象Exception关于异常的,只有在page指令中设置isErrorPage="true"时才会显示。

可以通过以下方式获取:

pageContext.getException() //获取异常对象

1.application 对象可将信息保存在服务器中,直到服务器关闭,否则application对象中保存的信息会在整个应用中都有效。该对象的类型是SevletContext类型,它的生命周期在tomcat服务器启动时创建,关闭时销毁。其作用范围为整个Web应用。

2.request 对象是 javax.servlet.HttpServletRequest类型的对象。该对象代表了客户端的请求信息,主要用于接受通过HTTP协议传送到服务器的数据。request对象的作用域为一次请求。

3.response 对象是 javax.servlet.HttpServletRsponse类型的对象。该对象代表客户端的响应信息,主要是将JSP容器处理过的对象信息返回到客户端。

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

5.page:当前jsp页面的实例,相当于this关键字。

6.session会话对象。session 对象是由服务器自动创建与用户请求相关的对象。服务器为每个用户都生成一个session对象,用于保存该用户的信息,跟踪用户的操作状态。其作用范围为一次会话。

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

8.out 对象用于在Web浏览器内输出信息,并且管理应用服务器上的输出缓冲区。JSP中的out对象是JspWriter类型。

9.pageContext 对象的作用是取得任何范围的参数,通过它可以获取 JSP页面的outrequestreponsesessionapplication 等对象。pageContext对象的创建和初始化都是由容器来完成的,可以获取项目的根目录,还可通过getXXX()获取其他内置对象

  • 四大作用域
  1. 作用

为了在页面、请求、和用户之间传递和共享数据,JSP提供了四个不同的作用域:pageContext(页面作用域)、request(请求作用域)、session(会话作用域)、application(应用程序作用域),这些作用域就规定了数据可以传递和共享的范围以及数据的存活时间。

  1. 作用域详解

1.application 作用域

  如果把变量放到application里,就说明它的作用域是application,它的有效范围是整个应用。 整个应用是指从应用启动,到应用结束。我们没有说从服务器启动,到服务器关闭,是因为一个服务器可能部署多个应用,当然你关闭了服务器,就会把上面所有的应用都关闭了。 application作用域里的变量,它们的存活时间是最长的,如果不进行手工删除,它们就一直可以使用。

2.session作用域

    session作用域比较容易理解,同一浏览器对服务器进行多次访问,在这多次访问之间传递信息,就是session作用域的体现。如果把变量放到session里,就说明它的作用域是session,它的有效范围是当前会话。所谓当前会话,就是指从用户打开浏览器开始,到用户关闭浏览器这中间的过程。这个过程可能包含多个请求响应。也就是说,只要用户不关浏览器,服务器就有办法知道这些请求是一个人发起的,整个过程被称为一个会话(session),而放到会话中的变量,就可以在当前会话的所有请求里使用。

         session的开始时刻比较容易判断,它从浏览器发出第一个HTTP请求即可认为会话开始。但结束时刻就不好判断了,因为浏览器关闭时并不会通知服务器,所以只能通过如下这种方法判断:如果一定的时间内客户端没有反应,则认为会话结束。Tomcat的默认值为30分钟,是在web.xml文件配置的,但这个值也可以通过HttpSessionsetMaxInactiveInterval()方法来设置:

void setMaxInactiveInterval(int interval),这里设置的时间单位是秒

         如果想主动让会话结束,例如用户单击注销按钮的时候,可以使用 HttpSession invalidate()方法,用于强制结束当前sessionvoid invalidate()

3.request作用域

  一个HTTP请求的处理可能需要多个Servlet合作,而这几个Servlet之间可以通过某种方式传递信息,但这个信息在请求结束后就无效了。request里的变量可以跨越forward前后的两页。但是只要刷新页面,它们就重新计算了。如果把变量放到request里,就说明它的作用域是request,它的有效范围是当前请求周期。 所谓请求周期,就是指从http请求发起,到服务器处理结束,返回响应的整个过程。在这个过程中可能使用forward的方式跳转了多个jsp页面,在这些页面里你都可以使用这个变量。

4.pageContext作用域

         page对象的作用范围仅限于用户请求的当前页面,对于page对象的引用将在响应返回给客户端之后被释放,或者在请求被转发到其他地方后被释放。page里的变量只要页面跳转了,它们就不见了。如果把变量放到pageContext里,就说明它的作用域是page,它的有效范围只在当前jsp页面里。从把变量放到pageContext开始,到jsp页面结束,你都可以使用这个变量。

  1. 作用域范围案例
  1. 在本页面(one.jsp)中放四个作用域的值, 分别在本页面取值

<%

                  pageContext.setAttribute("pc", "pageContext");

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

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

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

         %>

         <p>pc的值:${pc }</p>

         <p>req的值:${req }</p>

         <p>ses的值:${ses }</p>

         <p>app的值:${app }</p>

页面显示结果:

 

  1. 新建一个JSPtwo.jsp),在第二个页面取这四个值(不再存值)

<p>pc的值:${pc }</p>

         <p>req的值:${req }</p>

         <p>ses的值:${ses }</p>

         <p>app的值:${app }</p>

  1. 通过转发的方式从one.jsp页面跳转到two.jsp页面

<% request.getRequestDispatcher("two.jsp").forward(request, response); %>

页面显示效果:

 

  1. 通过重定向的方式从one.jsp页面跳转到two.jsp页面

<% response.sendRedirect("two.jsp"); %>

页面显示效果:

 

结论:pageContext作用域范围仅限于当前页面,只要换一个页面数据立马消失。而request作用域仅在一次请求范围内,通过请求转发的方式跳转到第二个页面,数据可以共享,而重定向则无法共享。

3、关闭浏览器重新打开,再次访问two.jsp


结论:

 

session域数据消失的原因,session是浏览器会话对象,作用范围是当前的浏览器,一旦浏览器关闭这个会话对象就无法找到,暂时当消失处理 ,所以数据也无法获取到。

4、关闭服务器,重新启动,再次直接访问two.jsp

 

结论:application域的数据在没有关闭服务器之前一直没有消失,是因为这个是服务器作用域,而当服务器关闭后又重启后,值消失,说明application域只要存了值,一直到服务器停止才消失。

  • EL表达式

1、简介

ELExpression Language 是为了使JSP写起来更加简单。表达式语言的灵感来自于 ECMAScript XPath 表达式语言,它提供了在 JSP 中简化表达式的方法,让Jsp的代码更加简化。

2、作用

是一种在JSP页面获取数据的简单方式(只能获取数据,不能设置数据)通过以下方式:
JSP页面的任何静态部分均可通过:${expression}来获取到指定表达式的值
包含以下几种方式:
${绑定名} 获取javaBean对象或者其他类型数据
${绑定名.属性名} 获取javaBean中对应的属性名
${绑定名[索引值]} 获取集合或者数组中对应的值
${绑定名["key"]} 通过key的值获取在Map中对应的value
同样也可以在el表达式内部做一些简单的运算:

 

代码示例

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

<html>

<head>

 <title>el基本运算</title>

</head>

<body>

  <!--基本运算-->

  加法运算:${3+2} <br>

  减法运算:${3-2} <br>

  乘法运算:${3*2} <br>

  除法运算:${3/2} <br>

  取余运算:${3%2} <br>

  <!--逻辑运算-->

  与:${5>4 && 7>8} <br>

  或:${5>4 || 7>8} <br>

  非:${! 5>4 } <br>

  非:${not (5>4) } <br>

  <!--三元运算-->

  三元运算:${5>4?"呵呵":"哈哈"}

 <!-- 空运算符 判断是否为空,如果为空则为true,否则为false-->

 ${empty uname}

</body>

</html>

演示效果:

 

3、原理

    依次从四大作用域对象检索对应的绑定名,如果在某一个对象中获取到了,则不再去其他对象检索,否则继续检索,如果都没有查找到则返回的是一个空字符串,而不是null
   
例如如下操作时:以表达式${user.name}为例
EL表达式会根据nameUser类里寻找这个nameget方法,此时会自动把name首字母大写并加上get前缀,一旦找到与之匹配的方法,El表达式就会认为这就是要访问的属性,并返回属性的值。
所以,想要通过EL表达式获取对象属性的值,那么这个属性就必须有与之对应的get方法。

可以通过指定检索四大作用域对象来提升检索速度,如下:
application-->applicationScope
session-->sessionScope
request-->requestScope
pageContext-->pageScope

比如:
${requestScope.user} 表示直接去request对象中获取user绑定名对应的值

4、案例

分别获取javaBean,javaBean属性,Map值,List,数组类型的值
代码示例:

ElDemoServlet

package com.ujiuye.servlet;

import com.ujiuye.bean.User;

import javax.servlet.ServletException;

import javax.servlet.annotation.WebServlet;

import javax.servlet.http.HttpServlet;

import javax.servlet.http.HttpServletRequest;

import javax.servlet.http.HttpServletResponse;

import java.io.IOException;

import java.util.ArrayList;

import java.util.HashMap;

import java.util.List;

import java.util.Map;

@WebServlet("/elDemo")

public class ElDemoServlet extends HttpServlet {

 @Override

 protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {

     //解决乱码问题的两行代码

     req.setCharacterEncoding("utf-8");

     resp.setContentType("text/html;charset=utf-8");

     //开始绑定数据

     //1.绑定一个字符串数据

     req.setAttribute("uname","邓紫棋");

     //2.绑定一个Map对象数据

     Map<String,String> map = new HashMap<>();

     map.put("name","张飒");

     req.setAttribute("map",map);

     //3.绑定一个List集合数据

     List<String> list = new ArrayList<>();

     list.add("三国演义");

     list.add("红楼梦");

     req.setAttribute("list",list);

     //4.绑定一个数组对象

     int[] arr ={12,89,10};

     req.setAttribute("arr",arr);

     //5.绑定一个javaBean对象

     User u = new User("李思思","666666");

     req.setAttribute("user",u);

     //转发

     req.getRequestDispatcher("06-el表达式常用方式.jsp").forward(req,resp);

 }

}

页面06-el表达式常用方式.jsp

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

<html>

<head>

 <title>el表达式常用方式</title>

</head>

<body>

 el获取字符串数据:${uname} <br>

 el获取Map对象中name对应的value值:${map["name"]} <br>

 el获取List集合中第二个数组:${list[1]} <br>

 el获取数组的第一个数据:${arr[0]} <br>

 el获取javaBeand的username属性值:${user.username}

</body>

</html>

  • JSTL标签库

1.JSTL简介

JSTLJavaServer Pages Standard Tag LibraryJSP标准标签库)是一个不断完善的开放源代码的JSP标签库。它主要提供给JavaWeb开发人员一个标准通用的标签,开发人员可以利用这些标签取代JSP页面上的Java代码,从而提高程序的可读性,降低程序的维护难度。

JSTL的使用步骤:

1、导包:standard.jar   jstl.jar

2、标签的引用:

<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>

prefix:前缀,指的是为当前的这个标签起一个别名;

uri:标签的路径;

3、使用

注意:JSTL不能独立使用,需要结合EL表达式。

2.JSTL之核心标签

1、通用标签:

set标签:声明标签

<c:set var="name" value="张三"></c:set>

out标签:输出标签

<c:set var="score1" value="80"></c:set>

<c:set var="score2" value="90"></c:set>

<c:out value="${score1+score2 }"></c:out>

 

2、分支标签

1if单分支判断

<c:set var="score" value="70"></c:set>

<c:if test="${score>=60 }">及格</c:if>

 

2choose多分支判断

<c:set var="score" value="70"></c:set>

<c:choose>

    <c:when test="${score>=90 }">优秀</c:when>

    <c:when test="${score>=80 }">良好</c:when>

    <c:when test="${score>=70 }">中等</c:when>

    <c:when test="${score>=60 }">及格</c:when>

<c:otherwise>不及格</c:otherwise>

</c:choose>

 

3、循环标签forEach

 

  • 完善学生系统功能
  • 查询
  1. dao

 

  1. serivce

 

  1. servlet

分析:由于考虑到一个servlet需要处理多种业务,所以将每种业务操作封装成一个功能方法,在请求这个servlet时,根据请求url中传递的方法名,通过反射机制来确定我们要执行的方法是哪个类的哪个方法。

创建BaseServlet实现service方法

package com.ujiuye.servlet;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.lang.reflect.Method;

public class BaseServlet extends HttpServlet {
    @Override
    protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //处理乱码
        req.setCharacterEncoding("utf-8");
        resp.setContentType("text/html;charset=utf-8");
        //获取执行的方法名findAllStudent
        String method = req.getParameter("method");
        //获取BaseServlet以及其子类的字节码对象clazz-->StudentServlet类字节码对象
        Class<? extends BaseServlet> clazz = this.getClass();
        try {
            //根据方法名或方法的参数获取要执行的方法对象
            Method mh = clazz.getMethod(method, HttpServletRequest.class, HttpServletResponse.class);
            //执行方法
            mh.invoke(this,req,resp);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

StudentServlet继承BaseServlet,StudentServlet中只需要写业务方法即可,不需要重写service方法,当请求StudentServlet时,必须在请求的url地址中传入要执行的方法名。

例如:我们在登录验证成功时,需要跳转到列表页做显示,这里在进入index.jsp页面前必须先请求StudentServlet做查询,所以登录判断成功后,跳转路径需要这样写:

 

package com.ujiuye.servlet;

import com.ujiuye.bean.Student;
import com.ujiuye.service.StudentService;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.List;

@WebServlet("/student")
public class StudentServlet extends BaseServlet {
    private StudentService ss = new StudentService();
    //添加学员
    public void addStudent(HttpServletRequest req, HttpServletResponse resp) throws IOException {
        //获取页面传递过来数据
        String sname = req.getParameter("sname");
        String sex = req.getParameter("sex");
        String age = req.getParameter("age");
        String degree = req.getParameter("degree");
        String pic = req.getParameter("pic");
        String mark = req.getParameter("mark");
        //封装学生对象
        Student stu = new Student(sname,sex,Integer.parseInt(age),degree,pic,mark);
        //调用service层的添加方法
        int row = ss.addStudent(stu);
        PrintWriter out = resp.getWriter();
        //判断
        if(row > 0){
            out.print("添加成功");
        }else{
            out.print("添加失败");
        }
    }
    //查询全部学生信息
    public void findAllStudent(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //调用serivce层查询方法
        List<Student> list = ss.findAllStudent();
        //将查询到的数据保存到域中
        req.setAttribute("slist",list);
        //转发到index.jsp页面
        req.getRequestDispatcher("index.jsp").forward(req,resp);
    }
}

  1. index.jsp页面:使用jstl+el显示数据,首先将jstljar包以及jsp-api.jar包导入到项目中

index.jsp页面开头引入链接库:

<%@taglib prefix="c"  uri="http://java.sun.com/jsp/jstl/core" %>

再使用forEach循环显示数据:

 

完整代码如下:

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@taglib prefix="c"  uri="http://java.sun.com/jsp/jstl/core" %>
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>学员列表展示</title>
    <script src="js/jquery-3.6.0.min.js"></script>
    <script>
        $(function () {
            $("tr:first").css("background","gray");
        })
    </script>
</head>
<body>
<table border="1px" width="600px" align="center">
    <caption><h2>学员信息列表展示</h2></caption>
    <tr>
        <th>学号</th>
        <th>姓名</th>
        <th>性别</th>
        <th>年龄</th>
        <th>学历</th>
        <th>头像</th>
        <th>备注</th>
    </tr>
    <c:forEach items="${slist}" var="stu">
        <tr>
            <td>${stu.sid}</td>
            <td>${stu.sname}</td>
            <td>${stu.sex}</td>
            <td>${stu.age}</td>
            <td>${stu.degree}</td>
            <td>${stu.pic}</td>
            <td>${stu.mark}</td>
        </tr>
    </c:forEach>
</table>
</body>
</html>

效果图:

 

  • 详情查询
  1. dao

 

  1. service

 

  1. servlet

 

  1. 页面:details.jsp

<%--
  Created by IntelliJ IDEA.
  User: dell
  Date: 2021/4/29
  Time: 20:28
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>详情页面</title>
    <script src="js/jquery-3.6.0.min.js"></script>
    <script>

        $(function () {
            $("#back").click(function () {
                //返回列表页
                history.back();
            });
        })
    </script>
</head>
<body>
    <table border="1px" width="400px" cellspacing="0" align="center" cellpadding="5">
        <caption><h2>${stu.sname}的详细信息如下</h2></caption>
        <tr>
            <th>学号</th>
            <td>${stu.sid}</td>
        </tr>
        <tr>
            <th>姓名</th>
            <td>${stu.sname}</td>
        </tr>
        <tr>
            <th>性别</th>
            <td>${stu.sex}</td>
        </tr>
        <tr>
            <th>年龄</th>
            <td>${stu.age}</td>
        </tr>
        <tr>
            <th>学历</th>
            <td>${stu.degree}</td>
        </tr>
        <tr>
            <th>头像</th>
            <td>${stu.pic}</td>
        </tr>
        <tr>
            <th>备注</th>
            <td>${stu.mark}</td>
        </tr>
        <tr align="center">
            <td colspan="2">
                <input type="button" value="返回" name="back" id="back">
            </td>
        </tr>
    </table>
</body>
</html>

效果图:

 

  • 修改
  1. 信息回显:底层同根据学号查询,在servlet中创建一个回显方法

 

效果

 

  1. 修改操作

dao:

 

service:

 

servlet:

 

页面:updatestudent.jsp

<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>修改学员信息</title>
    <style>
        span{
            color: red;
            font-size: 12px;
        }
    </style>
</head>
<body>
<form id="login" action="student" method="POST">
    <table border="1px" cellpadding="10px" cellspacing="0" align="center" width="500px">
        <caption><h2>修改学员信息</h2></caption>
        <tr>
            <td>姓名</td>
            <td>
                <input type="text" name="sname" value="${stu.sname}">
                <!--
                隐藏域绑定要执行的方法名
                -->
                <input type="hidden" name="method" value="updateStudent">
                <input type="hidden" name="sid" value="${stu.sid}">
            </td>
        </tr>
        <tr>
            <td>性别</td>
            <td>
                <input type="radio" name="sex" value="男" <c:if test="${stu.sex == '男'}">checked</c:if>>男
                <input type="radio" name="sex" value="女" <c:if test="${stu.sex == '女'}">checked</c:if>>女
            </td>
        </tr>
        <tr>
            <td>年龄</td>
            <td>
                <input type="text" name="age" value="${stu.age}">
            </td>
        </tr>
        <tr>
            <td>学历</td>
            <td>
                <select name="degree">
                    <option value="专科" <c:if test="${stu.degree == '专科'}">selected</c:if>>专科</option>
                    <option value="本科" <c:if test="${stu.degree == '本科'}">selected</c:if>>本科</option>
                    <option value="硕士" <c:if test="${stu.degree == '硕士'}">selected</c:if>>硕士</option>
                    <option value="博士" <c:if test="${stu.degree == '博士'}">selected</c:if>>博士</option>
                </select>
            </td>
        </tr>
        <tr>
            <td>头像</td>
            <td>
                <input type="file" name="pic">
                <%--保存旧头像--%>
                <input type="hidden" name="pic" value="${stu.pic}">
            </td>
        </tr>
        <tr>
            <td>备注</td>
            <td>
                <textarea name="mark" rows="4" cols="40">${stu.mark}</textarea>
            </td>
        </tr>
        <tr align="center">
            <td colspan="2">
                <input type="submit" value="修改">
                <input type="button" id="back" value="返回">
            </td>
        </tr>
    </table>
</form>
</body>
</html>

  • 删除
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值