无法通过Struts2中的jdbc从数据库存储和检索图像数据 [英] Unable to store and retrieve image data from database via jdbc in struts2
问题描述
我正在使用struts2.我试图将图像的路径存储到数据库并将图像存储在服务器中,然后想在jsp页面中检索这些图像数据.我需要指导. 但是我得到一个错误
I am using struts2 . i m trying to store the image's path to database and to store the image in server and then want to retireve those image data in jsp page. i need guidance. but i get an error
java.lang.NullPointerException
java.lang.NullPointerException
我创建了3个班级. 注册(豆类) registrationService(jdbc代码) registrationaction
i have created 3 class. registraton(bean class) registrationService(jdbc code) registrationaction
Registration.java
Registration.java
public class Registration{
private String first_name;
private String last_name;
private String gender;
private String email_id;
private String password;
private String dob;
private String father_name;
private String mother_name;
private String contact;
private String mobile;
private String address;
private String city;
private String country;
private String graduation;
private String graduate_school_mark;
private String graduation_year;
private String inter_school;
private String inter_school_mark;
private String inter_year;
private String high_school;
private String high_school_mark;
private String high_school_year;
private String role;
private String salary;
private File fphoto;
private File fresume;
private String pre_company;
//吸气剂&塞特犬
// getter & setter
RegistrationService.java
RegistrationService.java
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.SQLException;
import org.apache.struts2.ServletActionContext;
public class RegistrationService {
public boolean filledRegistration(Registration registration) throws SQLException, ClassNotFoundException, FileNotFoundException, IOException{
Class.forName("com.mysql.jdbc.Driver");
Connection con= DriverManager.getConnection("jdbc:mysql://localhost:3306/erp","root","ali$");
String sql = "insert into registration(first_name,last_name,password,gender,email_id,dob,"
+ "father_name,mother_name,contact,mobile,address,city,country,graduation,"
+ "graduation_marks,graduation_year,inter,inter_marks,inter_year,high_school,"
+ "high_marks,high_year,role,salary,resume,photo,pre_comp) value(?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)";
PreparedStatement p= con.prepareStatement(sql);
p.setString(1,registration.getFirst_name());
p.setString(2,registration.getLast_name());
p.setString(3,registration.getPassword());
p.setString(4,registration.getGender());
p.setString(5,registration.getEmail_id());
p.setString(6,registration.getDob());
p.setString(7,registration.getFather_name());
p.setString(8,registration.getMother_name());
p.setString(9,registration.getContact());
p.setString(10,registration.getMobile());
p.setString(11,registration.getAddress());
p.setString(12,registration.getCity());
p.setString(13,registration.getCountry());
p.setString(14,registration.getGraduation());
p.setString(15,registration.getGraduate_school_mark());
p.setString(16,registration.getGraduation_year());
p.setString(17,registration.getInter_school());
p.setString(18,registration.getInter_school_mark());
p.setString(19,registration.getInter_year());
p.setString(20,registration.getHigh_school());
p.setString(21,registration.getHigh_school_mark());
p.setString(22,registration.getHigh_school_year());
p.setString(23,registration.getRole());
p.setString(24,registration.getSalary());
FileInputStream fis1 = new FileInputStream(registration.getFphoto());
p.setBinaryStream(25,fis1);
FileInputStream fis=new FileInputStream(registration.getFphoto());
p.setBinaryStream(26, fis);
p.setString(27,registration.getPre_company());
String s= ServletActionContext.getRequest().getRealPath("");
System.out.println(s);
int temp= s.lastIndexOf("\\");
String s1= s.substring(0, temp);
// System.out.println("---------->"+s1);
int temp1 = s1.lastIndexOf("\\");
String s2= s1.substring(0, temp1);
FileOutputStream fos=new FileOutputStream(s2+"\\web\\Images\\image"+registration.getEmail_id()+".jpg");
byte buffer[]=new byte[1024];
int read=0;
while((read=fis.read(buffer, 0, 1024))!=-1){
fos.write(buffer);
}
fis.close();
fos.close();
int i= p.executeUpdate();
if(i>0){
return true;
}
return false;
}
}
RegistrationAction.java
RegistrationAction.java
import com.opensymphony.xwork2.ActionSupport;
import com.opensymphony.xwork2.ModelDriven;
import java.io.IOException;
import java.sql.SQLException;
public class RegistrationAction extends ActionSupport implements ModelDriven{
Registration registration=new Registration();
public Registration getRegistration() {
return registration;
}
public void setRegistration(Registration registration) {
this.registration = registration;
}
@Override
public String execute() throws ClassNotFoundException, SQLException, IOException{
RegistrationService rs= new RegistrationService();
if( rs.filledRegistration(registration)){
return "registered";
} else {
}
return "failed";
}
@Override
public Object getModel() {
return registration;
}
}
welcome.jsp
welcome.jsp
<%@taglib uri="/struts-tags" prefix="s"%>
<%@page contentType="text/html" pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>JSP Page</title>
</head>
<body>
<s:property value="user.email"/>
<s:property value="user."/>
<h1>Welcome</h1>
<s:property value="user.user_name"/>
<s:form action="logoutAction">
<s:submit value="logout"/>
<%
String s=(String)request.getContextPath();
String path=s+"/Images/"+user.email+".jpg";
%>
<img src="<%=path%>" width="200" height="200" />
</s:form>
</body>
</html>
玻璃鱼服务器
Severe: Exception occurred during processing request: null
java.lang.NullPointerException
at java.io.FileInputStream.<init>(FileInputStream.java:130)
at package_registration.RegistrationService.filledRegistration(RegistrationService.java:53)
at package_registration.RegistrationAction.execute(RegistrationAction.java:25)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:497)
at com.opensymphony.xwork2.DefaultActionInvocation.invokeAction(DefaultActionInvocation.java:450)
at com.opensymphony.xwork2.DefaultActionInvocation.invokeActionOnly(DefaultActionInvocation.java:289)
推荐答案
您需要的正确设计是:-
Right design for your requirement is:-
1)将映像路径存储到数据库.
2)将图像存储在服务器中,并使用路径访问这些图像.
1) Store the image path to Database.
2) Store the images in server, and access these images using the path.
现在,您的Registration类的fphoto应该为String类型.因为您是将图像路径而不是实际图像存储在db中.
Now your fphoto of Registration class should be of type String. Because you are storing the image path and not the actual image in db.
获得文件路径后,创建一个File对象并将其传递给FileOutputStream 可以用来在jsp上显示图像.
Once you get the file path, create a File object and pass it to FileOutputStream which can be used to show the image on jsp.
这篇关于无法通过Struts2中的jdbc从数据库存储和检索图像数据的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!