【学习笔记】Jsp与Servlet技术

简介: 【学习笔记】Jsp与Servlet技术

Jsp与Servlet技术

一.为什么要学习Jsp?

  • 我们以前学的都是静态网页的编程,比如 html之类的,我们希望静态网页能够有动态特性,则需要使用到 jsp技术。
  • Jsp页面大体由 html代码和 java代码组成。

【Demo01】使用Idea配置好Tomacat服务器,运行jsp项目。

<%--
  Created by IntelliJ IDEA.
  User: 编程小哥令狐
  Date: 2020/7/19
  Time: 14:42
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<!DOCTYPE html>
<html lang="en">
<head>
  <meta http-equiv="Content-Type" content="text/html" charset="GB2312">
  <title>第一个Jsp页面</title>
</head>
<body>
<table>
  <tr>
    <td>id</td>
    <td>姓名</td>
  </tr>
  <%
    String color1="99caff";
    String color2="88cc33";
    for(int i=1;i<=10;i++){
      String color="";
      if(i%2==0){
        color=color1;
      }else{
        color=color2;
      }
      out.println("<tr bgcolor="+color+">");
      out.println("<td>"+i+"</td>");
      out.println("<td>姓名"+i+"</td>");
      out.println("</tr>");
    }
  %>
</table>
</body>
</html>

1.1Jsp工作原理

  • Jsp的工作对象分为:客户端,服务器端(包含了jsp引擎)
  • Jsp动作方式: 请求响应
  • 工作流程与原理:
  1. 客户端发送数据请求,web服务器接收到,将这个页面请求交给Jsp引擎处理。【常见的引擎Tomacat】。
  2. Jsp引擎将提交过来的页面准换成java源文件,Jsp源文件。进行编译,解析后生成Html文件发送到服务器端。客户端接收到服务器端响应之后展示信息给用户

1.2实例—提交表单/发送数字/显示内容次数

1.2.1项目目录结构及其代码

  • **需求:**用户输入并提交Hello world打印的次数。
  • 一个html文件,一个jsp文件

html部分代码:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta http-equiv="Content-Type" content="text/html" charset="UTF-8">
    <title>理解JSP工作原理</title>
</head>
<body>
<p>请输入显示的次数:</p>
<form action="index.jsp" method="get">
    <input type="text" name="times">
    <input type="submit" value="提交">
</form>
</body>
</html>

jsp部分代码:

<%--
  Created by IntelliJ IDEA.
  User: 编程小哥令狐
  Date: 2020/7/20
  Time: 8:03
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
  <meta http-equiv="Content-Type" content="text/html" charset="GB2312">
  <title>理解JSP工作原理</title>
</head>
<body>
<h1>
  <%
    int times=Integer.parseInt(request.getParameter("times"));
    for(int i=0;i<times;i++){
      out.println("Hello world");
      out.println("<br/>");
    }
  %>
</h1>
</body>
</html>

二.Jsp的构成

三.JSP内建对象

在所有的JSP页面中都需要使用内部对象

常见的额JSP对象有:

  • out对象

out.print()out.println()方法都可以向客户端发送数据

  • request对象

对象请求,通过 getParameter()方法可以得到 request的参数

  • response对象

封装了JSP产生的响应。

  • session对象

保存用户操作状态,用户信息。

  • application对象

保存多个应用对象的信息

3.1使用Request对象案例

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8" http-equiv="Content-Type" content="text/html">
    <title>数据输入</title>
</head>
<body>
    <form method="post" action="requstDemo.jsp">
        <table>
            <tr>
                <td>请输入登录名:</td>
                <td><input type="text" name="name"></td>
            </tr>
            <tr>
                <td>请输入密码:</td>
                <td><input type="password" name="password"></td>
            </tr>
            <tr>
                <td><input type="submit" value="登录"></td>
            </tr>
        </table>
    </form>
</body>
</html>
<%@ page import="javax.xml.namespace.QName" %><%--
  Created by IntelliJ IDEA.
  User: 编程小哥令狐
  Date: 2020/7/20
  Time: 17:33
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>request对象的使用</title>
</head>
<body>
Request对象的信息:
<hr>
<%
    out.println("<br>getMethod:");
    out.println(request.getMethod());
    out.println("<br>getParameter:");
    out.println(request.getParameterNames());
%>
</body>
</html>

3.2使用JavaBean创建商品信息展示

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-eaL6pswO-1595475011561)(Jsp与Servlet技术.assets/20200721102536.png)]

package demo;
public class CommodityInfoBean {
    private String name;
    private Float price;
    private String status;
    public String getName(){
        return name;
    }
    public void setName(String name){
        this.name=name;
    }
    public Float getPrice(){
        return price;
    }
    public void setPrice(Float price) {
        this.price = price;
    }
    public String getStatus(){
        return status;
    }
    public void setStatus(String status) {
        this.status = status;
    }
    public CommodityInfoBean(){
        this.name="惠普笔记本电脑CQ515";
        this.price=2950.0f;
        this.status="在售";
    }
}
<%--
  Created by IntelliJ IDEA.
  User: linghu
  Date: 2020/7/21
  Time: 1:06
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
  <head>
    <meta http-equiv="Content-Type" content="text/html" charset="UTF-8">
    <title>显示商品信息</title>
  </head>
  <body>
  <jsp:useBean id="commodity" scope="page" class="demo.CommodityInfoBean"/>
    <h1>商品信息如下:</h1>
    名称:<%=commodity.getName()%>
    <br>
    价格:<%=commodity.getPrice()%>
    <br>
    状态:<jsp:getProperty name="commodity" property="status"/>
  </body>
</html>
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Q9FzQdZA-1595475011985)(Jsp与Servlet技术.assets/20200721102536-1595404378410.png)]

Servlet技术

1.1Servlet技术介绍

  • Servlet是一个 Java类
  • Servlet部署在容器里,他的生命周期由容器管理。

1.1.1Servlet生命周期

生命周期如下几个阶段:

  1. 装载 Servlet
  2. 创建 Servlet实例
  3. 调用Servletintit()方法
  4. 容器接收到Servlet的请求后将调用Service()方法
  5. 实例被销毁,利用方法destory()

1.1.2使用HttpServlet处理客户端请求

  • doGet

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8" http-equiv="Content-Type" content="text/html">
    <title>使用Get调用传递参数</title>
</head>
<body>
    <form action="doGetDemo" method="get">
        请输入参数:
        <input type="text" name="name"/>
        <input type="submit" value="提交"/>
    </form>
</body>
</html>
package code1203;
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;
@WebServlet(name = "doGetDemo",urlPatterns = "/doGetDemo")
public class doGetDemo extends HttpServlet {
    /*意思bai是定义程序序列化ID。序列化ID等同于du身份验证,主要zhi用于程序的版本dao控制,维护不同版本的兼容性以及避免在程序版本升级时程序报告的错误。*/
    private static final long serialVersionUID=1L;
    protected void doGet(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {
        request.setCharacterEncoding("gb2312");
        response.setContentType("text/html;charset=gb2312");
        PrintWriter out=response.getWriter();
        out.println("获得一个参数值:name=<br>"+request.getParameter("name"));
        out.flush();
    }
}

doPost

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8" http-equiv="Content-Type" content="text/html">
    <title>使用Post调用传递参数</title>
</head>
<body>
    <form action="doPostDemo" method="post">
        请输入参数:<br>
        <label>
            <textarea rows="10" cols="50" name="data"></textarea>
        </label><br>
        <input type="submit" value="提交">
    </form>
</body>
</html>
package code1203;
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;
@WebServlet("/doPostDemo")
public class doPostDemo extends HttpServlet {
    /*意思bai是定义程序序列化ID。序列化ID等同于du身份验证,主要zhi用于程序的版本dao控制,维护不同版本的兼容性以及避免在程序版本升级时程序报告的错误。*/
    private static final long serialVersionUID=1L;
    protected void doPost(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {
        request.setCharacterEncoding("gb2312");
        response.setContentType("text/html;charset=gb2312");
        PrintWriter out=response.getWriter();
        out.println("获得一个参数值:data=<br>"+request.getParameter("data"));
        out.flush();
    }
}

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-upbQ7tff-1595475011569)(Jsp与Servlet技术.assets/20200721210338.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-fDvUWHYH-1595475011987)(Jsp与Servlet技术.assets/20200721210339.png)]

1.2Jsp与Servlet开发

**需求:**编写一个简单的Web应用,实现用户登录的功能

  • 采用模式二技术栈开发

JavaBean+Jsp+Servlet

package code1205;
public class UserBean {
    private String validUserName;
    private String validUserPassword;
    public String getValidUserName(){
        return validUserName;
    }
    public void setValidUserName(String validUserName){
        this.validUserName=validUserName;
    }
    public String getValidUserPassword(){
        return validUserPassword;
    }
    public void setValidUserPassword(String validUserPassword){
        this.validUserPassword=validUserPassword;
    }
    //验证账户密码
    public  boolean isValidUser(String name,String password){
        boolean result=false;
        if(validUserName.equals(name)&&validUserPassword.equals(password)){
            result=true;
        }
        return result;
    }
}
package code1205;
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.net.http.HttpResponse;
@WebServlet("/userLogin")
public class UserLogin extends HttpServlet {
    private static final long serialVersionUID=1L;
    protected void doGet(HttpServletRequest request, HttpServletResponse response)throws IOException {
       /*
       * request.getParameter就是把jsp里的内容读取出来进行封装
       * */
        String name=request.getParameter("name");
       String password=request.getParameter("password");
       //设置合法的用户信息
        UserBean user=new UserBean();
        user.setValidUserName("admin");
        user.setValidUserPassword("admin");
        response.setCharacterEncoding("gb2312");
        response.setContentType("text/html;charset=gb2312");
        PrintWriter out=response.getWriter();
        if(user.isValidUser(name,password)){//调用javaBean的方法来验证用户
            out.println("登录成功");
        }else {
            out.println("用户登录名或者密码错误,<a href='login.jsp'>请重试</a>");
        }
    }
    protected void doPost(HttpServletRequest request, HttpResponse
            response)throws IOException{
        doGet(request, (HttpServletResponse) response);
    }
}
<%--
  Created by IntelliJ IDEA.
  User: Administrator
  Date: 2020/7/22
  Time: 14:59
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
  <head>
    <meta http-equiv="Content-Type" content="text/html" charset="UTF-8">
    <title>用户登录</title>
  </head>
  <body>
  <form action="userLogin" method="get">
    <table>
      <tr>
        <td>用户名:</td>
        <td><input type="text" name="name"></td>
      </tr>
      <tr>
        <td>密码:</td>
        <td><input type="password" name="password"/></td>
      </tr>
      <tr>
        <td colspan="2"><input type="submit" value="登录"/></td>
      </tr>
    </table>
  </form>
  </body>
</html>
登录页面

登录成功

登录失败

| 登录页面                                        |
| ----------------------------------------------- |
| [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-hya5orZK-1595475011990)(Jsp与Servlet技术.assets/20200722160324.png)] |
| 登录成功                                        |
| ----------------------------------------------- |
| [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-S1oj0t8Y-1595475011991)(Jsp与Servlet技术.assets/20200722160325.png)] |
| 登录失败                                        |
| ----------------------------------------------- |
| [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-lMoyUbLk-1595475011992)(Jsp与Servlet技术.assets/20200722160326.png)] |

文章知

目录
相关文章
|
3月前
|
SQL Java 数据库
jsp中使用Servlet查询SQLSERVER数据库中的表的信息,并且打印在屏幕上
该博客文章介绍了在JSP应用中使用Servlet查询SQL Server数据库的表信息,并通过JavaBean封装图书信息,将查询结果展示在Web页面上的方法。
jsp中使用Servlet查询SQLSERVER数据库中的表的信息,并且打印在屏幕上
|
3月前
|
缓存 安全 Java
Java服务器端技术:Servlet与JSP的集成与扩展
Java服务器端技术:Servlet与JSP的集成与扩展
32 3
|
3月前
|
前端开发 Java 开发工具
servlet技术--使用注解模拟用户登录实现页面跳转
该文章介绍了Servlet技术的使用,通过注解方式开发Servlet来模拟用户登录功能,并在登录成功后实现页面跳转,展示用户的用户名和密码。
servlet技术--使用注解模拟用户登录实现页面跳转
|
3月前
|
供应链 前端开发 Java
JSP+servlet+mybatis+layui服装库存管理系统(大三上学期课程设计)
这篇文章通过一个服装库存管理系统的实例,展示了在Spring Boot项目中使用Ajax、JSON、layui、MVC架构和iframe等技术,涵盖了注册登录、权限管理、用户管理、库存管理等功能,并提供了系统运行环境和技术要求的详细说明。
JSP+servlet+mybatis+layui服装库存管理系统(大三上学期课程设计)
|
3月前
|
前端开发 安全 Java
在Java服务器端开发的浩瀚宇宙中,Servlet与JSP犹如两颗璀璨的明星,它们联袂登场,共同编织出动态网站的绚丽篇章。
在Java服务器端开发的浩瀚宇宙中,Servlet与JSP犹如两颗璀璨的明星,它们联袂登场,共同编织出动态网站的绚丽篇章。
27 0
|
4月前
|
XML Java 数据格式
jsp和servlet有什么区别?
总的来说,JSP和Servlet都是创建动态Web应用程序的重要工具,但它们的使用依赖于特定的需求和上下文。
37 0
|
4月前
|
XML Java 数据格式
jsp和servlet有什么区别?
总的来说,JSP和Servlet都是创建动态Web应用程序的重要工具,但它们的使用依赖于特定的需求和上下文。
39 0
序-Servlet和SpringMVC的联系和区别-配置路径先想好使用的使用的方法,然后匹配的需要的技术
序-Servlet和SpringMVC的联系和区别-配置路径先想好使用的使用的方法,然后匹配的需要的技术
|
3月前
|
存储 缓存 前端开发
Servlet与JSP在Java Web应用中的性能调优策略
Servlet与JSP在Java Web应用中的性能调优策略
31 1
|
3月前
|
存储 Java 关系型数据库
基于Servlet和JSP的Java Web应用开发指南
基于Servlet和JSP的Java Web应用开发指南
39 0