返回顶部
首页 > 资讯 > 后端开发 > Python >JavaWeb案例讲解Servlet常用对象
  • 887
分享到

JavaWeb案例讲解Servlet常用对象

2024-04-02 19:04:59 887人浏览 薄情痞子

Python 官方文档:入门教程 => 点击学习

摘要

概述 本次文章基于第三章的ServletConfig,ServletContext,httpservletRequest,HttpServletResponse对象完成一个图书订阅系

概述

本次文章基于第三章的ServletConfig,ServletContext,httpservletRequest,HttpServletResponse对象完成一个图书订阅系统的购买图书和查看图书购买记录功能。

搭建项目主页面

创建一个动态网站项目,在src中新建包com.book.servlet.

在包中,新建HomeServlet作为主页。效果图如下:

为了让一访问项目根路径地址就默认进入HomeServlet,这里需要将 HomeServlet的虚拟地址写入WEB.xml文件中作为默认的首页地址。


<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://xmlns.jcp.org/xml/ns/javaee" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd" id="WebApp_ID" version="3.1">
  <display-name>Day07jsp</display-name>
  <welcome-file-list>
    <welcome-file>HomeServlet</welcome-file>
  </welcome-file-list>
</web-app>

HomeServlet中要完成超链接的显示,这里需要在该Servlet中定义两个静态数据,使用java注解的方式进行定义,代码如下:


package com.book.servlet;
 
import java.io.IOException;
import java.io.PrintWriter;
 
import javax.servlet.ServletConfig;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebInitParam;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
 

@WebServlet(urlPatterns = "/HomeServlet",
initParams = {
		@WebInitParam(name = "buy",value = "购买图书"),
		@WebInitParam(name = "selectOrder",value = "查看订单")
})
public class HomeServlet extends HttpServlet {
	private static final long serialVersionUID = 1L;
	
    
    public HomeServlet() {
        super();
        // TODO Auto-generated constructor stub
    }
    
   
 
	
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		
	}
 
	
	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// TODO Auto-generated method stub
		doGet(request, response);
	}
 
}

然后在类中的空白处,重写init方法,用于加载两个静态数据,因这两个静态数据需要在其他方法中被使用,因此定义成全局变量。代码如下:

再重写init方法,并通过两个静态数据,存储至全局变量。


@Override
    public void init(ServletConfig config) throws ServletException {
    	buy=config.getInitParameter("buy");
    	selectOrder=config.getInitParameter("selectOrder");
    	
    }

因浏览器访问服务器默认使用Get请求,这里我们在diGet方法中编写两个超链接发送给浏览器上显示:



	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		//当浏览器访问该Servlet的时候,servlet将静态数据发给浏览器显示
		response.setContentType("text/html");
		response.setCharacterEncoding("UTF-8");
		PrintWriter pw=response.getWriter();
		pw.append("<div align='center'>");
		pw.append("<a href=''>"+buy+"</a>&nbsp;");
		pw.append("<a href=''>"+selectOrder+"</a>&nbsp;");
		pw.append("</div>");
	}

这里运行以后,可看到以上的效果图所示的页面。

定义图书实体类

因为我们需要展示多本图书供用户进行购买,而每一本图书都需要包含,书名,作者,单价,出版社,购买时间等等数据,因此为采用定义实体类的方式用于分别存储每一本书的这些数据信息。

接着我们在src文件夹中定义包com.book.entity,用于存储创建的所有实体类,点右键新建class类,类名为Book,在Book中定义五个全局变量用于存储以上五个信息,并对其进行数据封装,代码如下:


package com.book.entity;

public class Book {
	//java类的封装
	private String bookName;//书名
	private String author;//作者
	private String price;//单价
	private String address;//出版社
	private String buyTime;//购买时间
	public String getBookName() {
		return bookName;
	}
	public void setBookName(String bookName) {
		this.bookName = bookName;
	}
	public String getAuthor() {
		return author;
	}
	public void setAuthor(String author) {
		this.author = author;
	}
	public String getPrice() {
		return price;
	}
	public void setPrice(String price) {
		this.price = price;
	}
	public String getAddress() {
		return address;
	}
	public void setAddress(String address) {
		this.address = address;
	}
	public String getBuyTime() {
		return buyTime;
	}
	public void setBuyTime(String buyTime) {
		this.buyTime = buyTime;
	}
	
	//生成所有变量的get和set方法
	//构造方法的作用:
	//1.用于创建这个类的对象
	//2.用于快速给变量进行赋值
	//生成无参构造方法
	public Book() {
		// TODO Auto-generated constructor stub
	}
	//生成有参构造方法
	public Book(String bookName, String author, String price, String address, String buyTime) {
		super();
		this.bookName = bookName;
		this.author = author;
		this.price = price;
		this.address = address;
		this.buyTime = buyTime;
	}
	@Override
	public String toString() {
		return "Book [bookName=" + bookName + ", author=" + author + ", price=" + price + ", address=" + address
				+ ", buyTime=" + buyTime + "]";
	}
	
	//生成toString方法,为了在做功能的时候,
	//查看检查这个对象中是否有数据
	
	
}

定义临时图书库工具

这里我们使用List集合临时将多本图书信息存储起来,用于显示在页面上供用户进行购买,这里我们在src文件夹中新建包com.book.util,在包中新建类BookDBUtil,在类中定义方法,创建多本图书信息,并将多本图书存储至List集合,代码如下:


package com.book.util;

 
import java.text.SimpleDateFORMat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
 
import com.book.entity.Book;
 
public class BookDataUtil {
 
	//定义方法,用于存储多本书的信息
	public List<Book> getBooks(){
		Book book1=new Book("Java编程思想", "马云", "120.0元", "人民邮电出版社", "");
		Book book2=new Book("Mysql数据库教程", "任正非", "89.0元", "清华大学出版社", "");
		Book book3=new Book("Java疯狂讲义", "马化腾", "108.0元", "电子工业出版社", "");
		Book book4=new Book("python爬虫技术", "李彦宏", "66.0元", "新华出版社", "");
		Book book5=new Book("C语言入门到放弃", "李云龙", "56.0元", "江西出版社", "");
		//创建List用于存储以上五本书
		List<Book> oBooks=new ArrayList<Book>();
		oBooks.add(book1);
		oBooks.add(book2);
		oBooks.add(book3);
		oBooks.add(book4);
		oBooks.add(book5);
		return oBooks;
	}
	
	//获得当前实时时间
	public static String getNowTime() {
		//获得的现在实时时间是毫秒计算的
		Date date=new Date();
		//简单日期格式类  2021年10月20 日  13:55:30
		SimpleDateFormat sdf=
				new SimpleDateFormat("yyyy年MM月dd日  HH:mm:ss");
		//按照设定的格式进行格式化
		String time=sdf.format(date);
		return time;
	}
}

创建图书信息列表页面供用户购买图书

即多本图书已准备好,这里需要创建Servlet完成图书信息列表页面,类名为ShowBookInfoServlet,这里我们需要先从工具类中获得所有图书信息,并将该图书已表格的形式发送给浏览器上显示出来,其代码如下:


package com.book.servlet;
 
import java.io.IOException;
import java.io.PrintWriter;
import java.util.List;
 
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 com.book.entity.Book;
import com.book.util.BookDataUtil;
 

@WebServlet("/ShowBookInfoServlet")
public class ShowBookInfoServlet extends HttpServlet {
	private static final long serialVersionUID = 1L;
       
    
    public ShowBookInfoServlet() {
        super();
        // TODO Auto-generated constructor stub
    }
 
	
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		//获得所有图书信息
		BookDataUtil util=new BookDataUtil();
		List<Book> oBooks=util.getBooks();
		response.setContentType("text/html");
		response.setCharacterEncoding("UTF-8");
		PrintWriter pw=response.getWriter();
		pw.append("<div align='center'>");
		pw.append("<table border='1' style='width:800px;text-align:center;'>");
		//写标题
		pw.append("<tr>");
		pw.append("<td>书名</td>");
		pw.append("<td>作者</td>");
		pw.append("<td>单价</td>");
		pw.append("<td>出版社</td>");
		pw.append("<td>操作</td>");
		pw.append("</tr>");
		for (int i=0;i<oBooks.size();i++) {
			pw.append("<tr>");
			pw.append("<td>"+oBooks.get(i).getBookName()+"</td>");
			pw.append("<td>"+oBooks.get(i).getAuthor()+"</td>");
			pw.append("<td>"+oBooks.get(i).getPrice()+"</td>");
			pw.append("<td>"+oBooks.get(i).getAddress()+"</td>");
			pw.append("<td><a href='BuyBookServlet?index="+i+"'><input type='button' "
					+ "style='background-color:green;' "
					+ "value='购买'></a></td>");
			pw.append("</tr>");
		}
		pw.append("</table>");
		pw.append("</div>");
	}
 
	
	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// TODO Auto-generated method stub
		doGet(request, response);
	}
 
}

并在HomeServlet的首页的购买图书的超链接上添加图书信息列表页面的虚拟地址。

其运行后,点击购买图书即课跳转至图书信息列表页面,效果如下:

完成存储用户购买的图书记录信息

当用户点击任意一本图书进行购买的时候,这里我们采取发送给图书的下标给服务器的方式,能尽快的获取用户要购买的图书信息,这里新建一个Servlet类,类名为BuyBookServlet,用于接收用户将要购买的图书的下标,并查找出该图书,并通过方法获得当前购买图书的下单的实时时间,存储至该购买的图书中,然后将该图书存储至List集合,因为用户可能会购买多本图书,最后将所哟购买的图书记录信息存储至ServletContext对象中。


package com.book.servlet;
 
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
 
import javax.servlet.ServletContext;
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 com.book.entity.Book;
import com.book.util.BookDataUtil;
 

@WebServlet("/BuyBookServlet")
public class BuyBookServlet extends HttpServlet {
	private static final long serialVersionUID = 1L;
       
    
    public BuyBookServlet() {
        super();
        // TODO Auto-generated constructor stub
    }
 
	
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		//获得用于点击购买按钮发送过来的请求
		//获得浏览器发送过来的图书的下标
		String index=request.getParameter("index");
		//将接收的字符串类型转换成int类型
		int i=Integer.parseInt(index);
		//根据用户发送过来的下标,去查找用户将要购买的书籍
		List<Book> oBooks=new BookDataUtil().getBooks();
		Book book=oBooks.get(i);
		//当用户购买图书的时候,需要获得当前实时时间
		book.setBuyTime(BookDataUtil.getNowTime());
		//获得ServletContext对象
		ServletContext sc=getServletContext();
		//判断ServletContext是否存在List集合
		Object object=sc.getAttribute("orders");
		List<Book> oList=null;
		if (object==null) {
			//说明以前从来没有购买过书
			oList=new ArrayList<Book>();
			oList.add(book);
		}else {
			//以前有购买书,只需要拿到List集合继续添加购买记录即可
			//不需要重新创建List集合
			oList=(List<Book>) object;
			oList.add(book);
		}
		//保存完购买记录,之后存储至ServletContext对象
		sc.setAttribute("orders", oList);
		//购买成功之后,跳转至提示页面
		//使用请求转发跳转,因为请求转发可以携带数据跳转页面
		request.setAttribute("book", book);
		request.getRequestDispatcher("AlertServlet")
					.forward(request, response);
	}
 
	
	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// TODO Auto-generated method stub
		doGet(request, response);
	}
 
}

创建提示信息页面

在图书记录信息存储后,需要提示用户购买的图书下单完成,是否需要继续购买的提示,这里新建一个Servlet类,类名为:AlertServlet


package com.book.servlet;
 
import java.io.IOException;
import java.io.PrintWriter;
 
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 com.book.entity.Book;
 

@WebServlet("/AlertServlet")
public class AlertServlet extends HttpServlet {
	private static final long serialVersionUID = 1L;
       
    
    public AlertServlet() {
        super();
        // TODO Auto-generated constructor stub
    }
 
	
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		Book book=(Book) request.getAttribute("book");
		String info="您的《"+book.getBookName()+"》购买成功,"
				+ "如果继续购买请<a href='ShowBookInfoServlet'>点击这里</a>,"
				+ "或者5秒之后自动跳回首页";
		response.setHeader("refresh", "5;url=HomeServlet");
		response.setContentType("text/html");
		response.setCharacterEncoding("UTF-8");
		PrintWriter pw=response.getWriter();
		pw.print(info);
	}
 
	
	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// TODO Auto-generated method stub
		doGet(request, response);
	}
 
}

效果如下:

完成查看图书记录信息列表页面

用户在购买完图书信息之后,需要查看当前购买的所有图书的记录信息,这里我们新建Servlet类,类名为:SelectOrderServlet,从ServletContext类中获得所有的图书记录信息,展示在表格上,并需要判断是否有购买图书记录信息,其代码如下:


package com.book.servlet;
 
import java.io.IOException;
import java.io.PrintWriter;
import java.util.List;
 
import javax.servlet.ServletContext;
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 com.book.entity.Book;
 

@WebServlet("/SelectOrderServlet")
public class SelectOrderServlet extends HttpServlet {
	private static final long serialVersionUID = 1L;
       
    
    public SelectOrderServlet() {
        super();
        // TODO Auto-generated constructor stub
    }
 
	
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		//因为用户购买的图书信息被存储在ServletContext对象中
		//要展示用户的购买记录,需要先获得ServletContext对象
		ServletContext sc=getServletContext();
		//从该对象中获得存储图书记录的List集合
		Object object=sc.getAttribute("orders");
		response.setContentType("text/html");
		response.setCharacterEncoding("UTF-8");
		PrintWriter pw=response.getWriter();
		List<Book> oBooks=null;
		if (object!=null) {
			oBooks=(List<Book>) object;
			pw.append("<div align='center'>");
			pw.append("<table border='1' style='width:800px;text-align:center;'>");
			//写标题
			pw.append("<tr>");
			pw.append("<td>书名</td>");
			pw.append("<td>作者</td>");
			pw.append("<td>单价</td>");
			pw.append("<td>出版社</td>");
			pw.append("<td>购买时间</td>");
			pw.append("</tr>");
			for (int i=0;i<oBooks.size();i++) {
				pw.append("<tr>");
				pw.append("<td>"+oBooks.get(i).getBookName()+"</td>");
				pw.append("<td>"+oBooks.get(i).getAuthor()+"</td>");
				pw.append("<td>"+oBooks.get(i).getPrice()+"</td>");
				pw.append("<td>"+oBooks.get(i).getAddress()+"</td>");
				pw.append("<td>"+oBooks.get(i).getBuyTime()+"</td>");
				pw.append("</tr>");
			}
			pw.append("</table>");
			pw.append("</div>");
		}else {
			pw.print("当前还没有购买图书的记录,请先购买再查看!!!");
		}
		
	}
	
 
	
	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// TODO Auto-generated method stub
		doGet(request, response);
	}
 
}

并把给Servlet的虚拟地址添加至主页面的第二个超链接上,

其运行的效果如下:

初学者可根据代码完成以上功能,可自行扩展修改图书信息以及删除购买记录的功能等等。

到此这篇关于javaweb案例讲解Servlet常用对象的文章就介绍到这了,更多相关JavaWeb Servlet 内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

--结束END--

本文标题: JavaWeb案例讲解Servlet常用对象

本文链接: https://lsjlt.com/news/155230.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • JavaWeb案例讲解Servlet常用对象
    概述 本次文章基于第三章的ServletConfig,ServletContext,HttpServletRequest,HttpServletResponse对象完成一个图书订阅系...
    99+
    2024-04-02
  • JavaWeb之监听器案例讲解
    1. 监听器 实现一个监听器的接口;(有n种监听器) 1.1 编写一个监听器(实现监听器接口) OnlineCountListener .java package com.tia...
    99+
    2024-04-02
  • Java面向对象之内部类案例讲解
    1. 内部类 很多时候我们创建类的对象的时候并不需要使用很多次,每次只使用一次,这个时候我们就可以使用内部类了 1.1 内部类概述 内部类就是在一个类的内部在定义一个类,比...
    99+
    2024-04-02
  • response对象的使用(实例讲解)
    使用response对象提供的sendRedirect()方法可以将网页重定向到另一个页面。重定向操作支持将地址重定向到不同的主机上,这一点与转发是不同的。在客户端浏览器上将会得到跳转地址,并重新发送请求链接。用户可以从浏览器的地址栏中看到...
    99+
    2023-05-31
    response 对象
  • JavaScript面向对象之class继承类案例讲解
    1. 面向对象class继承 在上面的章节中我们看到了JavaScript的对象模型是基于原型实现的,特点是简单,缺点是理解起来比传统的类-实例模型要困难,最大的缺点是继承的实现需要...
    99+
    2024-04-02
  • Java之常用类小结案例讲解
    Java常用类 包装类 由于Java语言中的基本类型不是面向对象,并不具备对象的性质,实际使用存在很多不便。Java在java.lang包中提供了八种基本类型对应的包装类,可以方便地...
    99+
    2024-04-02
  • JavaScript style对象与CurrentStyle对象案例详解
    1、Style对象 style对象代表一个单独的样式声明,可以从应用样式的文档元素访问Style对象。style对象获取的是内联样式,即元素标签中style属性的值。 例子: &...
    99+
    2024-04-02
  • 举例讲解Node.js中的Writable对象
    只要有玩过 nodejs,那就一定接触过 Writable。http 模块的请求回调参数中的 res 参数就是一个 Writable 对象。我们经常会往上面 write 一堆东西,最后调用个 end 方法吧...
    99+
    2022-06-04
    对象 Node js
  • Android之OOM异常解决案例讲解
    02-03 08:56:12.411: E/AndroidRuntime(10137): FATAL EXCEPTION: main 02-03 08:56:12.411: E/...
    99+
    2024-04-02
  • java中的面向对象实例讲解
    这篇文章主要介绍“java中的面向对象实例讲解”,在日常操作中,相信很多人在java中的面向对象实例讲解问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”java中的面向对象实例讲解”的疑惑有所帮助!接下来,请跟...
    99+
    2023-06-20
  • Vue中router-link常用属性使用案例讲解
    目录Vue中router-link常用属性使用router-link属性vue中的router-link属性详解router-link标签router-link属性值详解Vue中ro...
    99+
    2023-01-05
    Vue中router-link属性 Vue中router-link属性使用
  • Python中使用Frozenset对象的案例详解
    目录关于Frozensets创建一个新的Frozenset对象一旦创建了Frozenset,你就不能修改它了与 Frozensets 一起使用的方法Frozenset可以被转换为其他...
    99+
    2024-04-02
  • python 面向对象之继承实例讲解
    面向对象编程语言具有封装、继承、多态三个基本特征,本文就继承举例详谈比如说学校主要有3大角色:学校,讲师,学员学校可以注册学员,统计有多少学员老师负责讲课学生听课,提问,学习,交学费先定义4个类:class School(obje...
    99+
    2023-01-30
    面向对象 实例 python
  • 通过Class类获取对象(实例讲解)
    通过Class对象获取对象的方式是通过class.newInstance()方式获取,通过调用默认构造参数实例化一个对象。@Datapublic class Person { private String name; private i...
    99+
    2023-05-31
    class类 获取 对象
  • Java JSONObject与JSONArray对象案例详解
    JSONObject与JSONArray 最近在学习过程中用到了稍微复杂点的json数据需要将json数据解析出来,这里就截取一部分作为例子 1.JSONObject介绍 JSONO...
    99+
    2024-04-02
  • Java之ThreadLocal使用常见和方式案例讲解
    目录1 两大使用场景-ThreadLocal的用途2 典型场景1:每个线程需要一个独享的对象3 典型场景2:当前用户信息需要被线程内所有方法共享4 ThreadLocal方法使用总结...
    99+
    2024-04-02
  • Android BindService使用案例讲解
    最近学习了一下Android里面的Service的应用,在BindService部分小卡了一下,主要是开始没有彻底理解为什么要这么实现。 BindService和Started Se...
    99+
    2024-04-02
  • Java对象创建内存案例解析
    Java对象创建内存图解析 1. 栈 Java栈的区域很小 , 特点是存取的速度特别快,栈存储的特点是, 先进后出,存储速度快的原因: 栈内存, 通过 栈指针'来创...
    99+
    2024-04-02
  • python面向对象的使用案例
    这篇文章给大家分享的是有关python面向对象的使用案例的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。面向对象1. 创建支持With语句的对象我们都知道如何使用打开或关闭语句,例如打开文件或获取锁,但是如何实现自...
    99+
    2023-06-27
  • C语言异常处理机制案例讲解
    异常处理机制:setjmp()函数与longjmp()函数   C标准库提供两个特殊的函数:setjmp() 及 longjmp(),这两个函数是结构化异常的基础,正是利用这两个函数...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作