一个servlet中通过反射动态调用多个方法
2014-07-16 15:49
357 查看
后台servlet3.0
package com.saic.grape;
import java.io.IOException;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import javax.servlet.ServletConfig;
import javax.servlet.ServletException;
import javax.servlet.annotation.MultipartConfig;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.Part;
import org.springframework.util.StringUtils;
@WebServlet(name="UploadServlet" ,urlPatterns={"/upload"})
@MultipartConfig
public class UploadServlet extends HttpServlet{
/**
*
*/
private static final long serialVersionUID = 1L;
public void init(ServletConfig config)throws ServletException{
super.init(config);
System.out.println("init()方法被调用>>>>>");
}
/**
* servlet方法
*/
public void service(HttpServletRequest request,HttpServletResponse response)throws ServletException,IOException{
System.out.println("service()方法被调用>>>>>");
String opType = request.getParameter("opType");
try {
Class upload = Class.forName("com.saic.grape.UploadServlet");
/*第一种方式实现反射动态调用方法
* Method[] mes = upload.getDeclaredMethods();
for(Method method: mes){
String name = method.getName();
if(!StringUtils.isEmpty(opType) && name.equals(opType)){
method.invoke(upload.newInstance(),request,response);
break;
}
}*/
/**
* 第二种方式实现反射动态调用方法
*/
Method method = upload.getDeclaredMethod(opType, HttpServletRequest.class,HttpServletResponse.class);
String name = method.getName();
if(!StringUtils.isEmpty(opType) && name.equals(opType)){
method.invoke(upload.newInstance(),request,response);
}
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (SecurityException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
} catch (IllegalArgumentException e) {
e.printStackTrace();
} catch (InvocationTargetException e) {
e.printStackTrace();
} catch (InstantiationException e) {
e.printStackTrace();
} catch (NoSuchMethodException e) {
e.printStackTrace();
}
}
/**
* 登录方法
* @param request
* @param response
* @throws IllegalStateException
* @throws IOException
* @throws ServletException
*/
public void login(HttpServletRequest request,HttpServletResponse response) throws IllegalStateException, IOException, ServletException {
System.out.println("login()登录方法被反射动态调用>>>>>");
Part part = request.getPart("file");
part.write("F:\\login."+UploadUtil.getFileType(part));
}
/**
* 注册方法
* @param request
* @param response
* @throws IllegalStateException
* @throws IOException
* @throws ServletException
*/
public void reg(HttpServletRequest request,HttpServletResponse response) throws IllegalStateException, IOException, ServletException {
System.out.println("reg()注册方法被反射动态调用>>>>>");
Part part = request.getPart("file");
part.write("F:\\reg."+UploadUtil.getFileType(part));
}
public void destroy() {
System.out.println("destroy()方法>>>>>");
}
}
html页面
<html>
<body>
<form method="post" enctype="multipart/form-data" action="upload">
<input type="file" id="file" name="file"/>
<input type="text" id="opType" name="opType"/> <!--指定方法-->
<input type="submit" value="上传"/>
</form>
</body>
</html>
package com.saic.grape;
import java.io.IOException;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import javax.servlet.ServletConfig;
import javax.servlet.ServletException;
import javax.servlet.annotation.MultipartConfig;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.Part;
import org.springframework.util.StringUtils;
@WebServlet(name="UploadServlet" ,urlPatterns={"/upload"})
@MultipartConfig
public class UploadServlet extends HttpServlet{
/**
*
*/
private static final long serialVersionUID = 1L;
public void init(ServletConfig config)throws ServletException{
super.init(config);
System.out.println("init()方法被调用>>>>>");
}
/**
* servlet方法
*/
public void service(HttpServletRequest request,HttpServletResponse response)throws ServletException,IOException{
System.out.println("service()方法被调用>>>>>");
String opType = request.getParameter("opType");
try {
Class upload = Class.forName("com.saic.grape.UploadServlet");
/*第一种方式实现反射动态调用方法
* Method[] mes = upload.getDeclaredMethods();
for(Method method: mes){
String name = method.getName();
if(!StringUtils.isEmpty(opType) && name.equals(opType)){
method.invoke(upload.newInstance(),request,response);
break;
}
}*/
/**
* 第二种方式实现反射动态调用方法
*/
Method method = upload.getDeclaredMethod(opType, HttpServletRequest.class,HttpServletResponse.class);
String name = method.getName();
if(!StringUtils.isEmpty(opType) && name.equals(opType)){
method.invoke(upload.newInstance(),request,response);
}
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (SecurityException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
} catch (IllegalArgumentException e) {
e.printStackTrace();
} catch (InvocationTargetException e) {
e.printStackTrace();
} catch (InstantiationException e) {
e.printStackTrace();
} catch (NoSuchMethodException e) {
e.printStackTrace();
}
}
/**
* 登录方法
* @param request
* @param response
* @throws IllegalStateException
* @throws IOException
* @throws ServletException
*/
public void login(HttpServletRequest request,HttpServletResponse response) throws IllegalStateException, IOException, ServletException {
System.out.println("login()登录方法被反射动态调用>>>>>");
Part part = request.getPart("file");
part.write("F:\\login."+UploadUtil.getFileType(part));
}
/**
* 注册方法
* @param request
* @param response
* @throws IllegalStateException
* @throws IOException
* @throws ServletException
*/
public void reg(HttpServletRequest request,HttpServletResponse response) throws IllegalStateException, IOException, ServletException {
System.out.println("reg()注册方法被反射动态调用>>>>>");
Part part = request.getPart("file");
part.write("F:\\reg."+UploadUtil.getFileType(part));
}
public void destroy() {
System.out.println("destroy()方法>>>>>");
}
}
html页面
<html>
<body>
<form method="post" enctype="multipart/form-data" action="upload">
<input type="file" id="file" name="file"/>
<input type="text" id="opType" name="opType"/> <!--指定方法-->
<input type="submit" value="上传"/>
</form>
</body>
</html>
相关文章推荐
- Atitit.通过null 参数 反射 动态反推方法调用
- 通过反射动态调用set,get方法
- servlet层调用biz业务层出现浏览器 500错误,解决方法 dao数据访问层 数据库Util工具类都可能出错 通过新建一个测试类复制代码逐步测试查找出最终出错原因
- golang通过反射动态调用方法
- C#,动态加载DLL,通过反射,调用参数,方法,窗体
- Atitit.通过null 参数 反射 动态反推方法调用
- 通过反射调用动态连接库中的方法
- 通过反射动态调用类的静态方法和实例方法
- Java 动态的创建注入代码,注入方法给类或者接口并通过反射调用
- 一个在java运行时利用反射动态调用方法的例子
- .net 反射,通过自定义Attribute动态调用类方法
- Atitit.通过null 参数 反射 动态反推方法调用
- 反射第四步 : 通过反射获取某一个类的 方法 并通过反射调用
- 通过反射调用动态调用方法
- 通过反射调用一个单列的方法(单列必须有“getInstance”方法)
- Java 通过反射机制动态调用java类方法
- C# 通过反射类动态调用DLL方法
- 通过反射动态调用类的静态方法和实例方法
- 如何通过反射调用方法?
- C#实现反射调用动态加载的DLL文件中的方法