利用 JSP 中的反射机制封装一个 Servlet ,就不用每张表的每个方法都写一个 Servlet

JSP + Servlet 实现的文件上传到服务器的功能 项目目录结构大致如下: 正如我在上图红线画的三个东西:Dao、service、servlet 这三层是主要的结构,类似 MVC 架构,Dao是模型实体类(逻辑层),service是服务层,servlet是视图层,三者协作共同完成项目。 这里的User是由user表来定义的一个类,再封装增删改查等操作,实现从数据库查询与插入,修改与删除等操作,并实现了分页操作,也实现了将图片放到服务器上 阅读详情

基类 Servlet 代码如下:

package com.yibin.cn.servlet;

import java.awt.print.Printable;
import java.io.IOException;
import java.lang.reflect.Method;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class BaseServlet extends HttpServlet {
	@Override
	protected void service(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		// post中文乱码处理
		request.setCharacterEncoding("utf-8");
		// 响应到客户端的乱码处理
		response.setCharacterEncoding("utf-8");
		// 响应到客户端的头部乱码处理
		response.setContentType("text/html;charset=UTF-8");

		//获取动作参数
		String action = request.getParameter("action");
		System.out.println(action);
		if(action==null||"".equals(action.trim())){//参数为空或空字符串.
			response.getWriter().print("你提交的是非法参数");
		    return;
		}
		//反射机制:反射可以做未来不确定的事情。用反射机制得到该对象的方法对象。
		Method method;
		try {
			//获取本类方法,传递参数:动作、参数类型。
			method = this.getClass().getMethod(action, HttpServletRequest.class,HttpServletResponse.class);
			//通过method方法对象调用方法
			//User user = new User();
			//user.getName();
			method.invoke(this, request,response);//this调用method,传递参数request和response。
		} catch (Exception e) {
            System.out.println("你提交的是非法参数");
			e.printStackTrace();
		} 
	}
}
用户表的Servlet代码如下(可以直接实现本表需要的各个操作,继承自基类(实现了反射机制以及乱码处理)):

package com.yibin.cn.servlet;

import java.io.File;
import java.io.IOException;
import java.io.PrintWriter;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.UUID;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import javax.websocket.Session;

import org.apache.commons.fileupload.FileItem;
import org.apache.commons.fileupload.FileItemFactory;
import org.apache.commons.fileupload.FileUploadException;
import org.apache.commons.fileupload.disk.DiskFileItemFactory;
import org.apache.commons.fileupload.servlet.ServletFileUpload;

import utils.Page;

import com.yibin.cn.dao.entity.User;
import com.yibin.cn.service.IUserService;
import com.yibin.cn.service.impl.UserServiceImpl;

public class UserServlet extends BaseServlet {
	// 登录
	public void login(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		System.out.println("login方法被调用");
		// 1、获取数据
		// 2、封装数据
		// 3、调用API
		// 4、控制跳转
	}

	// 增
	public void add(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		System.out.println("add方法被调用");
		// 获取数据
		// 2、封装数据
		// 3、调用API
		// 4、控制跳转		
}// 删public void delete(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {System.out.println("delete方法被调用");
		// 获取数据
		// 2、封装数据
		// 3、调用API
		// 4、控制跳转

}// 改public void update(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {System.out.println("update方法被调用");
		// 获取数据
		// 2、封装数据
		// 3、调用API
		// 4、控制跳转

}// 查public void listAll(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {System.out.println("listAll方法被调用");

		// 获取数据
		// 2、封装数据
		// 3、调用API
		// 4、控制跳转

}// 分页public void getPage(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {System.out.println("getPage方法被调用");
		// 获取数据
		// 2、封装数据
		// 3、调用API
		// 4、控制跳转

}}


如上,原来一个方法需要写一个 servlet,现在都封装到一个表名命名的servlet了,既方便,结构又清晰,调用如下所示:

			request.getRequestDispatcher("UserServlet?action=delete").forward(request, response);

通过跳转到指定方法来调用,主要要传递动作参数 "action" ,然后 BaseServlet 利用反射机制就会帮你调用对应的方法,是不是很方便呢。

对了,servlet还需要配置,在工程目录:工程名/WebContent/WEB-INF/web.xml 加上以下代码:

   <!-- 基类Servlet -->
  <servlet>
    <servlet-name>BaseServlet</servlet-name>
    <servlet-class>com.yibin.cn.servlet.BaseServlet</servlet-class>
  </servlet>
  <servlet-mapping>
    <servlet-name>BaseServlet</servlet-name>
    <url-pattern>/BaseServlet</url-pattern>
  </servlet-mapping>
  
     <!-- 通用UserServlet -->
  <servlet>
    <servlet-name>UserServlet</servlet-name>
    <servlet-class>com.yibin.cn.servlet.UserServlet</servlet-class>
  </servlet>
  <servlet-mapping>
    <servlet-name>UserServlet</servlet-name>
    <url-pattern>/UserServlet</url-pattern>
  </servlet-mapping> 

至此大功告成!


构建基于JSP+Servlet+JavaBean+JDBC的简单登录系统 Java Server Pages (JSP) 是一种用来创建动态网页的技术。使用JSP,开发者可以将Java代码嵌入到HTML页面中,从而实现复杂的Web应用。本章将介绍JSP页面的基础创建流程,并展示如何通过JSP展示用户界面。JavaBean 是一种特殊的 Java 类,它遵循特定的编码规范。 阅读详情

相关推荐

JSP反射的例子(很好用)

JSP反射的例子(很好用)JSP反射的例子(很好用)JSP反射的例子(很好用)JSP反射的例子(很好用)

基本Servlet的封装,实现可以通过继承一个BaseServlet,然后不需要重复定义多个Servlet,只需要在继承的这个类里面通过实现方法去访问这个Servlet

优化Servlet 减少Servlet 的数量,现在是一个功能一 个Servlet,将其优化为-一个模块一个Servlet,相当于在数据库中一张表对应一个Servlet,在Servlet中提供不同的方法,完成用户的请求。 为什么这些Servlet必须每一个Servlet都要写? 因为Servlet继承了HttpServlet,而在HttpServlet里面根据请求方式的不同,完成doPost和doGet方法的分发, HttpServlet里面有一个方法,名为service方法,在这个方法里面完成的

учёба 692

告别‘耀斑’降落:手把手教你用PX4+激光测距仪实现固定翼精准自动着陆

本文详细介绍了如何利用PX4飞控与激光测距仪实现固定翼无人机的精准自动着陆,解决传统气压计在低空环境下的测量误差问题。通过硬件选型、安装要点、PX4参数配置及实战调校,帮助开发者实现厘米级高度感知,优化降落曲线,提升着陆稳定性与安全性。

weixin_30336061的博客 519

Servlet的封装

目录封装的必要性我们可以写一个公共类CommonServlet:封装是面向对象的方法应该遵循的一个重要原则!它的英文是encapsulation,有时也叫做数据隐藏。 从形式上看,封装不过是将数据和行为组合在一个包中,并对对象的使用者隐藏了数据的实现形式。 对象中的数据称为实例域(instance field),操纵数据的过程叫做方法(method)对于每个特定的类实例(也就是对象),都有一组特定的实例域值。这些值的集合就是这个对象的当前状态(state).无论何时,只要向对象发送一个消息,它的状态就有

天真吖的博客 869

AIGC实战指南:从提示词到工作流,掌握AI内容生成核心技能

人工智能生成内容(AIGC)作为当前AI技术的重要应用领域,其核心原理基于大语言模型(LLM)对海量数据的学习与模式识别。这项技术的价值在于将复杂的创作过程自动化,显著提升内容生产效率与创意实现的多样性。在实际应用中,AIGC已广泛渗透至文本创作、图像设计、音频合成及视频生成等多个场景,成为数字内容生产的重要工具。要高效运用AIGC,关键在于掌握提示词工程与模型微调等核心技能。例如,通过结构化提示词设计,可以精确引导模型生成符合预期的专业周报;而选择合适的微调模型,则能大幅提升图像生成的风格控制力与输出质量

weixin_26808439的博客 373

储能系统架构和控制

探讨了储能系统中EMS(能源管理系统)、BMS(电池管理系统)和PCS(功率转换系统)之间的协同机制,以及组串式和集中式储能系统的技术架构、优势和局限性。EMS根据电价、电网需求和电池状态制定充放电策略,BMS提供电池数据,PCS执行充放电控制。组串式系统具有独立管理和灵活扩展的优势,但成本较高;集中式系统成本效益高,但存在环流和木桶效应问题。

蓝龙宝藏的博客 3967

封装Servlet统一处理请求

封装Servlet统一处理请求 1、编写BaseController 2、子类继承BaseController 前端需要每次传入action表示需要执行controller中的方法 BaseController package com.cn.fb.controller; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRe

weixin_44809056的博客 595

Linux与Windows双系统,安装完linux后无法通过grub进入Windows的解决方法

先装Windows 10,Windows可正常启动,再装Kali,Kali提示装grub后照装。然而装完后重启发现无Windows选项。

sakurashockwave的博客 6454

Servlet封装BaseServlet

Servlet封装BaseServlet类 import java.io.IOException; import java.lang.reflect.Method;import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequ

继承接口的博客 1368

SpringBoot实战——仿b站项目(一)

热部署就是当应用程序这种运行的时候升级冉家或者修改某一部分代码、配置文件时,无需手动启动应用,即可修改的部分生效工具 + IDEA配置。

weixin_52880572的博客 3455

DIY压电陶瓷传感器信号放大:从拆解到JFET电路实战(附示波器实测数据)

本文详细介绍了如何利用废旧设备拆解的压电陶瓷片,结合JFET(结型场效应管)高输入阻抗特性,DIY搭建高灵敏度振动传感器放大电路。从元件拆解、参数实测到JFET共源极放大器实战搭建与调试,提供了完整的步骤、示波器实测数据及优化方案,帮助电子爱好者实现低功耗振动检测应用。

weixin_29195615的博客 387

BaseServlet通过反射简化Servlet书写

BaseServlet通过反射简化Servlet代码

Leonnnn2020的博客 183

【Claude】Invalid model / Opus not available 错误:模型不可用的原因 bug报错已解决

使用 Claude API 时,指定错误或不可用的模型 ID 会收到 Invalid model 错误。本文从模型命名规则出发,给出模型降级链与动态选择方案。

博客 7914

什么是JSP和Servlet,彻底看清装神弄鬼的JSP和Servlet,绝对干活!!!

由于最近本人正在处于尴尬的找工作期间,在笔试阶段和面试阶段遇到了一些关于JSP和Servlet的知识,答的不是很好,后来也在网上看了一些相关资料,但是发现,基本讲的都非常官方和大概,简直是只授人渔,不授人以渔,只告诉你结果,却不告诉你为什么会有这样的结果。于是我就下定决心彻底搞清楚什么是JSP和Servlet,它们之间又到底是如何进行转换联系的,终于皇天不负有心人,在经过一番挣扎和努力之后,终于看...

m0_37510446的博客 7338

Claude Code本地Windows安装教程

本文介绍了在Windows系统上安装和配置Claude Code本地调用的详细步骤。首先需要确保网络畅通和账号余额充足,然后安装Node.js v22版本作为基础环境。接着通过npm全局安装Claude Code包,并进行版本验证。安装完成后,使用命令行登录并可以指定模型启动。最后还提供了切换API秘钥的方法,通过setup-token命令重新授权账号。整个过程配有详细的命令行示例和操作截图,方便用户按步骤完成安装配置。

猿小白的博客 2万+

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

一个Servlet处理多个请求的方法

方法一: 可以在jsp中对一个变量赋予不同的值来实现不同的功能。 如下面这个例子。利用表单标签给op赋予不同的值findOne和findAll来实现根据id查询或者查所有的用户。 index.jsp &lt;%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%&gt...

qq_35654259的博客 2037

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

多个请求访问同一个servlet

在我们刚开始编写java web程序时,可能会一个jsp页面功能对应一个服务器的servlet。例如对我们的客户表(Customer)实行增删改查时,每个操作对一个servlet。这样的话,不仅使得代码量很大,而且会使得代码不好管理。那我们想到的是,怎么实现JSP页面的多个请求对应一个servlet呢?通过一个servlet完成增删改查等多个功能呢? 例如我的jsp页面中查询数据库中的表cust

congmingPIG_htt的博客 4029

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

Java里面映射和反射_Java之通过反射机制选择servlet中的对应的方法

public class AdministratorsServlet extendsHttpServlet {private static final long serialVersionUID = 1L;@Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp) throwsServletExce...

weixin_36334361的博客 201

封装Servlet,跳过service,doPost,doGet直接写方法

在jsp页面中调用sevlet中某个方法,比较麻烦。 因为创建的Servlet默认继承HttpServlet,在HttpServlet默认访问service方法,没有重写service方法,根据是get请求还是post请求,再去访问doGet或者doPost方法。这样导致整个Servlet结构入口只有一个,代码逻辑比较臃肿。 解决的思路就是:过滤器 解决办法 自定义BaseServ

leehzl的博客 803

利用反射实现一个servlet处理多个请求

前言: 最近在用jsp+sevlet+Mysql知识写一个简单的博客系统,刚开始写的时侯没有了解到反射机制,所以便使用一个servlet处理一个请求的方式,这种方式无疑是不行的当你有成千上万个请求的时候难道要写成千上万个servlet嘛? 后来了解到反射机制可以实现一个servlet处理多个请求,有两种方法可以实现。 实现原理 不同的请求通过不同的方法来响应,反射起的作用是把执行方法名动态化,同过...

Superman_peng的博客 977

利用java 反射机制来实现一个servlet处理多种请求

利用java 反射机制来实现一个servlet处理多种请求 如果我们想在一个servlet中处理多种请求(比如新闻的添加、删除),简单的可以在jsp提交表单的action路径中添加一个键值对,然后再servlet中接收后根据不同的值来调用不同的方法。 jsp端 1 <form action="newsServlet?method=...

weixin_30776863的博客 396

一个servlet处理多个请求 (利用反射获取方法)

jsp页面跳转链接 &lt;a href="bookServlet?method=getBooks&amp;pageNo=1"&gt;&lt;/a&gt;   package com.servlet; import java.io.IOException; import java.lang.reflect.Method; import java.util.List; import jav...

https://blog.youkuaiyun.com/sinat_36710456 2901

Servlet+JSP实现web应用程序

通过实例代码演示Servlet与JSP配合完成web应用的开发

qiaotl的博客 1448

减少Servlet的一些方法

在很多的时候,我们需要创建大量的Servlet来完成数据的请求与回应,并对数据进行分析处理, 但是当我们创建了很多的Servlet的时候,就比较难以管理,那么怎么简单的处理下,让Servlet 数量少一些呢? 一般情况下form表单中的Action都是直接写上Servlet的名字,但是当多个请求需要跳转的时候, 就需要我们不断的创建servlet,这个时候我们可以把某些类型相同的S

Somnus的博客 664

利用反射简化(抽象)Servlet层

利用反射简化(抽象)Servlet层 前言:servlet封装用户提交的数据使用service进行加工(如果业务需要)。然后在service中调用dao进行数据持久化。但是,如果写一个增删改查就要使用五个servlet。很不方便,所以在此利用反射给它抽象。 步骤:step1:先有一个比较全的servletStuServlet.javapackage com.zzxtit.mvc.stu.actio...

MFWang1231的博客 590

多个请求共用一个Servlet

之前在练习的时候因为请求少一直没注意过这个问题,就直接一个请求新建一个Servlet,但是如果请求多了以后就会发现,需要不停的创建新的servelet以及不停的在web.xml中配置servelt,会导致项目看起来十分的杂乱,严重降低效率。于是就需要去思考,如何将一系列的请求用一个servelt封装起来。 实现多个请求公用一个servelt有两种方法 方法一 在每一个请求后面跟上?me...

珈凝的博客 1080
上一篇: jsp 中实现分页的类模板
下一篇: jdbc 工具类的抽取
yibin94
博客等级 码龄11年 78粉丝 158原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值