gpt4 book ai didi

java - 将文件从 JSP 发送到调用接口(interface)方法的 Controller - 如何从该请求上传文件?

转载 作者:行者123 更新时间:2023-12-01 14:00:17 25 4
gpt4 key购买 nike

大家好,我正在从事一个项目。

希望你能帮助我解决我的问题..我已经挣扎了5天了!!

在分配给我的模块中,我必须将文件、标题、类别、上传详细信息从 JSP 上传到存储请求响应的controller.do > 在名为 execute() 的方法中,该方法存在于 Command.java Interface 中。

现在,当我传递所有上传表单详细信息时,它会一直转到一个名为 ResourceCommand.java Implements Command 的类,该类调用 DAO 并在中间停止执行!!!!

来自Upload.jsp的部分代码

<form name="myform_up" method="post" action = "Controller">  
<input type="hidden" name="form_action" value="resource" />
<input type="hidden" name="action" value="insert" />
<table>
<tr>
<td>Document Title <font color="red">*</font></td></tr>
<tr>
<td><input type="text" name="name" /></td></tr>
<tr>
<td>Category <font color="red">*</font>
<select name="cat">
<option value="Java" selected >Java Material</option>
<option value="Net">.Net Material</option>
<option value="C">C and C# Material</option>
</select></td>
</tr>
<input type="hidden" name="uploadedby" value="<jsp:getProperty name="userBean" property="user" />" />
<tr>
<td>Upload A file:
<input type="file" name="file1"/></td>
</tr>
<tr>
<td><br/><input type="checkbox" name="t_condition" checked />I Had received Copyrights for this Document</td>
</tr>
<TR>
<td ALIGN="CENTER"><br/>
<INPUT class="button blue" TYPE="submit" value="Upload" /> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
<INPUT class="button red" TYPE="reset" value="Clear" />
</td></TR>
</TABLE>
</FORM>

来自Controller.java的部分代码

public void init(ServletConfig config) throws ServletException{
super.init();

System.out.println("i am in init");

this.commands.put("login", new LoginCommand());
this.commands.put("resource", new ResourceCommand());

}

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
System.out.println("i am in doget");
processCommand(request, response);
}

protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
System.out.println("i am in dopost");
processCommand(request, response);
}

private void processCommand(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

String formAction = request.getParameter("form_action");
System.out.println("implementing formAction = " + formAction);
Commands command = (Commands) commands.get(formAction);
command.execute(request, response);
}
}

来自ResourceCommand.java的部分代码

public class ResourceCommand extends HttpServlet  implements Commands{
private static final long serialVersionUID = 1L;
public void execute(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {

if ("insert".equalsIgnoreCase(request.getParameter("action"))) {
this.addResource(request, response);
}
}

private void addResource(HttpServletRequest request,
HttpServletResponse response) throws ServletException, IOException{

ResourceBean ResourceBean = new ResourceBean();
mapToResourceBeans(request, ResourceBean);

String result = null;
try {
result = new ResourceDAO().uploadResource(request, ResourceBean);
} catch (Exception ex) {
System.err.println(" Error in inserting new resource");
}
if ("success".equalsIgnoreCase(result)) {
// if Block CODE
}

else {
//Else block CODE
}
}
private void mapToResourceBeans(HttpServletRequest request,
ResourceBean ResourceBean) {
ResourceBean.setName(request.getParameter("name"));
ResourceBean.setCat(request.getParameter("cat"));
ResourceBean.setUploadedby(request.getParameter("uploadedby"));
}
}

来自Command.java的部分代码

public interface Commands {

public void execute(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException;

}

来自ResourceDAO.java的部分代码

public class ResourceDAO {
static final String SUCCESS = "success";
static final String FAILURE = "failure";

static Logger log = Logger.getLogger("com.a");

public String uploadResource(HttpServletRequest request,
ResourceBean newResource) throws FileNotFoundException {

String result = null;
PreparedStatement stmtInsert = null;
// Create a Database Connection
Connection con = ConnectionDAO.getJDBCConnection();
try {
PreparedStatement pstmt = con
.prepareStatement("INSERT INTO resource(name, cat, uploadedby, file) values(?,?,?,?)");
pstmt.setString(1, newResource.getName());
System.out.println(newResource.getName());

pstmt.setString(2, newResource.getCat());
System.out.println(newResource.getCat());

pstmt.setString(3, newResource.getUploadedby());
System.out.println(newResource.getUploadedby());

String file = request.getParameter("file1");
System.out.println("0");

File f = new File(file);
System.out.println("1");

FileInputStream fis = new FileInputStream(f);
System.out.println("2");

pstmt.setBinaryStream(4, fis, (int) f.length());
System.out.println("3");
int rows = pstmt.executeUpdate();

result = SUCCESS;

if (rows != 1) { result = FAILURE; }

} catch (SQLException ex) {
result = FAILURE;
ConnectionDAO.rollbackJDBCConnection(con);
ex.printStackTrace();
} finally {
ConnectionDAO.commitJDBCConnection(con);
ConnectionDAO.closeStatement(stmtInsert);
ConnectionDAO.closeJDBCConnection(con);
}
return result;
}
}

控制台显示..

implementing formAction = resource
Error in inserting new resource
123
Net
null
0
1
i am going back to addResource page

如果我将 enctype="multipart/form-data" 放入表单 TAG.. 那么我会得到这个..

java.lang.NullPointerException
com.kbcss.controller.Controller.processCommand(Controller.java:57)
com.kbcss.controller.Controller.doPost(Controller.java:49)
javax.servlet.http.HttpServlet.service(HttpServlet.java:647)
javax.servlet.http.HttpServlet.service(HttpServlet.java:728)

我完全迷失了..请帮助...

最佳答案

这是第 56 行吗?错误之前的那个?

Commands command = (Commands) commands.get(formAction);    

如果在 commands 映射(您没有显示)中找不到该命令,它可能会返回 null。您至少应该检查从 map 返回的有效命令。

当找不到匹配的内容时,Map 将返回 null。在下一行中,您使用它并会得到一个 NullPointerException

关于java - 将文件从 JSP 发送到调用接口(interface)方法的 Controller - 如何从该请求上传文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19386352/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com