Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Java Новый топик    Ответить
 Проблема с Multipart (Servlet + MySQL)  [new]
fallen2019
Member

Откуда:
Сообщений: 212
Я написал проект который должен выводить на странице всех студентов в виде таблицы фио студента и рядом должна быть его добавленная аватарка.

Так вот я прописал конфигурацию, но с контроллером проблема.

WEBMVCConfig

package fallen.java.schoolmaven.config;


import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.multipart.MultipartResolver;
import org.springframework.web.multipart.support.StandardServletMultipartResolver;

import org.springframework.web.servlet.ViewResolver;
import org.springframework.web.servlet.config.annotation.EnableWebMvc;
import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry;


import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
import org.springframework.web.servlet.view.InternalResourceViewResolver;

@Configuration
@EnableWebMvc
@ComponentScan(basePackages = "adil.java.schoolmaven")
public class WebMvcConfig implements WebMvcConfigurer {

    @Bean

    public ViewResolver getViewResolver() {
                InternalResourceViewResolver resolver = new InternalResourceViewResolver();
        resolver.setPrefix("/WEB-INF/views/");
        resolver.setSuffix(".jsp");
        return resolver;
    }


    @Override
    public void addResourceHandlers(ResourceHandlerRegistry registry) {
        registry.addResourceHandler("/resources/**").addResourceLocations("/resources/css");
    }

        @Bean
        public MultipartResolver multipartResolver() {
                return new StandardServletMultipartResolver();
 }
}


ServletInitialazer

package fallen.java.schoolmaven.config;

import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.MultipartConfigElement;
import javax.servlet.ServletException;
import javax.servlet.ServletRegistration;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.springframework.web.servlet.support.AbstractAnnotationConfigDispatcherServletInitializer;

public class ServletInitializer extends AbstractAnnotationConfigDispatcherServletInitializer {

    @Override
    protected Class<?>[] getRootConfigClasses() {
        return new Class[] { HibernateConfig.class };
    }

    @Override
    protected Class<?>[] getServletConfigClasses() {
        return new Class[] { WebMvcConfig.class };
    }

    @Override
    protected String[] getServletMappings() {
        return new String[] { "/" };
    }

        @Override
        protected void customizeRegistration(ServletRegistration.Dynamic registration) {
        registration.setMultipartConfig(new MultipartConfigElement("", 2097152, 4193304, 2097152));    
    }
}


Можете помочь как правильно написать в контроллере Addstudent чтобы вместе c фио добавлялась фото и хранилось в БД

package fallen.java.schoolmaven.controller;

import java.io.IOException;
import java.util.List;

import javax.servlet.http.HttpServletResponse;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.validation.BindingResult;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.servlet.ModelAndView;

import fallen.java.schoolmaven.entity.Student;
import  fallen.java.schoolmaven.service.StudentService;

@Controller
public class StudentController {
    // Constructor based Dependency Injection
    private StudentService studentService;

    public StudentController() {

    }

    @Autowired
    public StudentController(StudentService studentService) {
        this.studentService = studentService;
    }


    @RequestMapping(value = { "/", "/index" }, method = RequestMethod.GET)
    public ModelAndView hello(HttpServletResponse response) throws IOException {
        ModelAndView mv = new ModelAndView();
        mv.setViewName("index");
        return mv;
    }

    // Get All Users
    @RequestMapping(value = "/allStudents", method = {RequestMethod.GET, RequestMethod.POST})
    public ModelAndView displayAllUser() {
        System.out.println("User Page Requested : All Students");
        ModelAndView mv = new ModelAndView();
        List<Student> studentList = studentService.getAllStudents();
        mv.addObject("studentList", studentList);
        mv.setViewName("allStudents");
        return mv;
    }

    @RequestMapping(value = "/addStudent", method = RequestMethod.GET)
    public ModelAndView displayNewUserForm() {
        ModelAndView mv = new ModelAndView("addStudent");
        mv.addObject("headerMessage", "Add Student Details");
        mv.addObject("student", new Student());
        return mv;
    }

    @RequestMapping(value = "/addStudent", method = RequestMethod.POST)
    public ModelAndView saveNewStudent(@ModelAttribute Student student, BindingResult result) {
        ModelAndView mv = new ModelAndView("redirect:/allStudents");


        if (result.hasErrors()) {
            return new ModelAndView("error");
        }
        boolean isAdded = studentService.saveStudent(student);
        if (isAdded) {
            mv.addObject("message", "New student successfully added");
        } else {
            return new ModelAndView("error");
        }

        return mv;
    }

    @RequestMapping(value = "/editStudent/{id}", method = RequestMethod.GET)
    public ModelAndView displayEditUserForm(@PathVariable Long id) {
        ModelAndView mv = new ModelAndView("/editStudent");
        Student student = studentService.getStudentById(id);
        mv.addObject("headerMessage", "Редактирование студента");
        mv.addObject("student", student);
        return mv;
    }

    @RequestMapping(value = "/editStudent/{id}", method = RequestMethod.POST)
    public ModelAndView saveEditedUser(@ModelAttribute Student student, BindingResult result) {
        ModelAndView mv = new ModelAndView("redirect:/allStudents");

        if (result.hasErrors()) {
            System.out.println(result.toString());
            return new ModelAndView("error");
        }
        boolean isSaved = studentService.saveStudent(student);
        if (!isSaved) {

            return new ModelAndView("error");
        }

        return mv;
    }

    @RequestMapping(value = "/deleteStudent/{id}", method = RequestMethod.GET)
    public ModelAndView deleteUserById(@PathVariable Long id) {
        boolean isDeleted = studentService.deleteStudentById(id);
        System.out.println("Удаление студента: " + isDeleted);
        ModelAndView mv = new ModelAndView("redirect:/allStudents");
        return mv;

    }

}


Student

package fallen.java.schoolmaven.entity;

import java.io.Serializable;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.Table;
import org.springframework.web.multipart.MultipartFile;

@Entity
@Table(name = "student")
public class Student implements Serializable {

    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private long id;
    private String name;
    private String surname;
    private MultipartFile avatar;

    public long getId() {
        return id;
    }

    public void setId(long id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getSurname() {
        return surname;
    }

    public void setSurname(String surname) {
        this.surname = surname;
    }

     public MultipartFile getAvatar() {
        return avatar;
    }
    public void setAvatar(MultipartFile avatar) {
        this.avatar = avatar;
    }

    @Override
    public String toString() {
        return "Student [id=" + id + ", name=" + name + ", surname=" + surname + ", avatar=" + avatar + "]";
    }

}
24 апр 19, 14:48    [21870606]     Ответить | Цитировать Сообщить модератору
 Re: Проблема с Multipart (Servlet + MySQL)  [new]
mayton
Member

Откуда: loopback
Сообщений: 42508
А где StudentService ?
24 апр 19, 16:07    [21870735]     Ответить | Цитировать Сообщить модератору
 Re: Проблема с Multipart (Servlet + MySQL)  [new]
fallen2019
Member

Откуда:
Сообщений: 212
mayton,
вот
package fallen.java.schoolmaven.service;
import java.util.List;
import adil.java.schoolmaven.entity.Student;

public interface StudentService {

	public List<Student> getAllStudents();
	public Student getStudentById(Long id);
	public boolean saveStudent(Student student);
	public boolean deleteStudentById(Long id);

}
25 апр 19, 06:19    [21871119]     Ответить | Цитировать Сообщить модератору
 Re: Проблема с Multipart (Servlet + MySQL)  [new]
mayton
Member

Откуда: loopback
Сообщений: 42508
Вместо MultipartFile надо byte[].
И в маппинге блоб указать.
25 апр 19, 07:41    [21871153]     Ответить | Цитировать Сообщить модератору
 Re: Проблема с Multipart (Servlet + MySQL)  [new]
fallen2019
Member

Откуда:
Сообщений: 212
mayton,

Можете помочь сделать функцию чтобы фото добавлялось пожалуйста, я уже неделю мучаюсь. Мне просто срочно надо я вам очень буду благодарен
25 апр 19, 07:47    [21871156]     Ответить | Цитировать Сообщить модератору
 Re: Проблема с Multipart (Servlet + MySQL)  [new]
fallen2019
Member

Откуда:
Сообщений: 212
fallen2019,

Я шестой день мучаюсь, хотя бы посмотрев на ваше решение пойму как правильно делать
25 апр 19, 07:51    [21871157]     Ответить | Цитировать Сообщить модератору
 Re: Проблема с Multipart (Servlet + MySQL)  [new]
fallen2019
Member

Откуда:
Сообщений: 212
fallen2019,

Вот моя БД

К сообщению приложен файл. Размер - 15Kb
25 апр 19, 07:52    [21871158]     Ответить | Цитировать Сообщить модератору
 Re: Проблема с Multipart (Servlet + MySQL)  [new]
mayton
Member

Откуда: loopback
Сообщений: 42508
Должно быть как-то так.
@Entity
@Table(name = "student")
public class Student implements Serializable {

    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private long id;
    private String name;
    private String surname;

    @Lob
    @Column(name = "avatar", columnDefinition="BLOB")
    private byte[] avatar;


Функциональность MultipartFile надо выкинуть из студента. Это не его задача.

public class TransformUtils {
    public static byte[] fromMultipart(MultipartFile multipartFile) {
       .....
       return IOUtils.toByteArray(... тут какие-то кастинги в InputStream (multipartFile));
    }
}
25 апр 19, 11:59    [21871438]     Ответить | Цитировать Сообщить модератору
 Re: Проблема с Multipart (Servlet + MySQL)  [new]
fallen2019
Member

Откуда:
Сообщений: 212
mayton,

У меня уже jSP есть Allstudent

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8" isELIgnored="false"%>
<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.4.0/css/bootstrap.min.css">
  <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
  <script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.4.0/js/bootstrap.min.js"></script>
  <link href="../css/style.css" rel="stylesheet" type="text/css">
  <style><%@include file="/WEB-INF/css/style.css"%></style>
<title>Все студенты</title>
</head>
<body>
    <br>
    <br>
    <br>

    <br>
    <div class="it">
    <h3>Список всех студентов</h3>
    ${message}
    <br>
    <br>
    <table class="table">
  <thead>
    <tr>
      <th scope="col">#</th>
      <th scope="col">Имя</th>
     
      <th scope="col">Фамилия</th>
      <th scope="col">Фото</th>
      
    </tr>
  </thead>
  <tbody>
      <c:forEach var="student" items="${studentList}">
                <tr>
                    <th scope="row">1</th>
                    <td>${student.name}</td>
                    <td>${student.surname}</td>
                     <td>Должно быть изображение</td>
                    
                     <td><a
                        href="${pageContext.request.contextPath}/editStudent/${student.id}"><button type="button" class="btn btn-primary">Редактировать</button>
                    <td><a
                        href="${pageContext.request.contextPath}/deleteStudent/${student.id}"><button type="button" class="btn btn-primary">Удалить</button>
                            
                           
                            
                </tr>
            </c:forEach>
        </tbody>
    

    </table>
    <a href="${pageContext.request.contextPath}/addStudent"><button type="button" class="btn btn-primary">Добавить студента</button></a>
    </div>
</body>
</html>


и AddStudent

<%@page contentType="text/html" pageEncoding="UTF-8"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
   "http://www.w3.org/TR/html4/loose.dtd">
<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form"%>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.4.0/css/bootstrap.min.css">
  <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
  <script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.4.0/js/bootstrap.min.js"></script>
<title>Home</title>

</head>
<body>
    <div class="add">
        <br>
    <br>
    <br>
    
    <br>
    <center>
	<h1>${headerMessage}</h1>
	
        <form:form method="POST" action="addStudent" modelAttribute="student" >
             <table>
                 
                 
                 
                <tr>
                    <td><form:label path="Name">Имя</form:label></td>
                    <td><form:input path="Name"/></td>
                </tr>
                <tr>
                    <td><form:label path="Surname">Фамилия</form:label></td>
                    <td><form:input path="Surname"/></td>
                </tr>
                <tr>
                    <td>Фотография:</td>
                    <td><form:input type="file" path="avatar" /></td>
                </tr>
                <tr>
                    <td><input class="btn btn-primary" type="submit" value="Добавить"></td>
                    
		
                
                </tr>
            </table>
        </form:form>
</center>
        </div>
</body>
</html>
25 апр 19, 12:17    [21871468]     Ответить | Цитировать Сообщить модератору
 Re: Проблема с Multipart (Servlet + MySQL)  [new]
mayton
Member

Откуда: loopback
Сообщений: 42508
Ну и? Работает?
25 апр 19, 12:18    [21871469]     Ответить | Цитировать Сообщить модератору
 Re: Проблема с Multipart (Servlet + MySQL)  [new]
Leonid Kudryavtsev
Member

Откуда:
Сообщений: 7934
Автор бы исходники на github или еще куда выложил.
Что бы из форума не копировать и всегда актуальные

p.s. лично я смотреть не буду, т.к. со spring не знаком. Но возможно кто-то сможет помочь.
p.p.s. будем надеяться, что автор это не клон "nastyaa" ( TM ) )))
25 апр 19, 12:33    [21871495]     Ответить | Цитировать Сообщить модератору
 Re: Проблема с Multipart (Servlet + MySQL)  [new]
fallen2019
Member

Откуда:
Сообщений: 212
mayton,
Вот так должно быть?
package adil.java.schoolmaven.entity;

import java.io.Serializable;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.Lob;
import javax.persistence.Table;
import org.springframework.web.multipart.MultipartFile;

@Entity
@Table(name = "student")
public class Student implements Serializable {

    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private long id;
    private String name;
    private String surname;
  


    @Lob
    @Column(name = "avatar", columnDefinition="BLOB")
    private byte[] avatar;

    public long getId() {
        return id;
    }

    public void setId(long id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getSurname() {
        return surname;
    }

    public void setSurname(String surname) {
        this.surname = surname;
    }
    
   

    @Override
    public String toString() {
        return "Student [id=" + id + ", name=" + name + ", surname=" + surname + ", avatar=" + avatar + "]";
    }

}
25 апр 19, 12:34    [21871498]     Ответить | Цитировать Сообщить модератору
 Re: Проблема с Multipart (Servlet + MySQL)  [new]
mayton
Member

Откуда: loopback
Сообщений: 42508
Да. Да. Проверяй не томи. Я к сож. не специалист в MySQL и не знаю какие разновидности BLOB
типов она поддерживает. Возможно тебе придется пересоздать табличку.
25 апр 19, 12:37    [21871505]     Ответить | Цитировать Сообщить модератору
 Re: Проблема с Multipart (Servlet + MySQL)  [new]
fallen2019
Member

Откуда:
Сообщений: 212
mayton,

Total time: 2.638s
Finished at: Thu Apr 25 15:48:35 BDT 2019
Final Memory: 14M/307M
------------------------------------------------------------------------
Deploying on Apache Tomcat или TomEE
profile mode: false
debug mode: false
force redeploy: true
[Fatal Error] :5:6: The markup in the document following the root element must be well-formed.
25 апр 19, 12:49    [21871532]     Ответить | Цитировать Сообщить модератору
 Re: Проблема с Multipart (Servlet + MySQL)  [new]
mayton
Member

Откуда: loopback
Сообщений: 42508
Чел я не специалист в JSP вообще. И тема топика была Multipart а сейчас уже что-то другое.
25 апр 19, 12:53    [21871538]     Ответить | Цитировать Сообщить модератору
 Re: Проблема с Multipart (Servlet + MySQL)  [new]
fallen2019
Member

Откуда:
Сообщений: 212
mayton,

Можно я вам проект отправлю на телеграм или куда то просто мне капец как срочно надо(((
25 апр 19, 12:53    [21871541]     Ответить | Цитировать Сообщить модератору
 Re: Проблема с Multipart (Servlet + MySQL)  [new]
mayton
Member

Откуда: loopback
Сообщений: 42508
Не-не-не. Дружище. Я не делаю курсовых. Выкладывай в гитхаб. Здесь люди помогут чем могут.
25 апр 19, 12:55    [21871545]     Ответить | Цитировать Сообщить модератору
 Re: Проблема с Multipart (Servlet + MySQL)  [new]
fallen2019
Member

Откуда:
Сообщений: 212
mayton,

Можно вот мой весь проект классы можете посмотреть я же все правильно написал

Student Controller
/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package adil.java.schoolmaven.controller;

import java.io.IOException;
import java.util.List;

import javax.servlet.http.HttpServletResponse;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.validation.BindingResult;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.servlet.ModelAndView;

import adil.java.schoolmaven.entity.Student;
import  adil.java.schoolmaven.service.StudentService;

@Controller
public class StudentController {
	// Constructor based Dependency Injection
	private StudentService studentService;

	public StudentController() {

	}

	@Autowired
	public StudentController(StudentService studentService) {
		this.studentService = studentService;
	}


	@RequestMapping(value = { "/", "/index" }, method = RequestMethod.GET)
	public ModelAndView hello(HttpServletResponse response) throws IOException {
		ModelAndView mv = new ModelAndView();
		mv.setViewName("index");
		return mv;
	}

	// Get All Users
	@RequestMapping(value = "/allStudents", method = {RequestMethod.GET, RequestMethod.POST})
	public ModelAndView displayAllUser() {
		System.out.println("User Page Requested : All Students");
		ModelAndView mv = new ModelAndView();
		List<Student> studentList = studentService.getAllStudents();
		mv.addObject("studentList", studentList);
		mv.setViewName("allStudents");
		return mv;
	}

	@RequestMapping(value = "/addStudent", method = RequestMethod.GET)
	public ModelAndView displayNewUserForm() {
		ModelAndView mv = new ModelAndView("addStudent");
		mv.addObject("headerMessage", "Add Student Details");
		mv.addObject("student", new Student());
		return mv;
	}

	@RequestMapping(value = "/addStudent", method = RequestMethod.POST)
	public ModelAndView saveNewStudent(@ModelAttribute Student student, BindingResult result) {
		ModelAndView mv = new ModelAndView("redirect:/allStudents");
                
 
		if (result.hasErrors()) {
			return new ModelAndView("error");
		}
		boolean isAdded = studentService.saveStudent(student);
		if (isAdded) {
			mv.addObject("message", "New student successfully added");
		} else {
			return new ModelAndView("error");
		}
 
		return mv;
	}

	@RequestMapping(value = "/editStudent/{id}", method = RequestMethod.GET)
	public ModelAndView displayEditUserForm(@PathVariable Long id) {
		ModelAndView mv = new ModelAndView("/editStudent");
		Student student = studentService.getStudentById(id);
		mv.addObject("headerMessage", "Редактирование студента");
		mv.addObject("student", student);
		return mv;
	}

	@RequestMapping(value = "/editStudent/{id}", method = RequestMethod.POST)
	public ModelAndView saveEditedUser(@ModelAttribute Student student, BindingResult result) {
		ModelAndView mv = new ModelAndView("redirect:/allStudents");

		if (result.hasErrors()) {
			System.out.println(result.toString());
			return new ModelAndView("error");
		}
		boolean isSaved = studentService.saveStudent(student);
		if (!isSaved) {

			return new ModelAndView("error");
		}

		return mv;
	}

	@RequestMapping(value = "/deleteStudent/{id}", method = RequestMethod.GET)
	public ModelAndView deleteUserById(@PathVariable Long id) {
		boolean isDeleted = studentService.deleteStudentById(id);
		System.out.println("Удаление студента: " + isDeleted);
		ModelAndView mv = new ModelAndView("redirect:/allStudents");
		return mv;

	}

}


Класс Student
package adil.java.schoolmaven.entity;

import java.io.Serializable;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.Lob;
import javax.persistence.Table;
import org.springframework.web.multipart.MultipartFile;

@Entity
@Table(name = "student")
public class Student implements Serializable {

    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private long id;
    private String name;
    private String surname;
  


    @Lob
    @Column(name = "avatar", columnDefinition="BLOB")
    private byte[] avatar;

    public long getId() {
        return id;
    }

    public void setId(long id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getSurname() {
        return surname;
    }

    public void setSurname(String surname) {
        this.surname = surname;
    }
    
   

    @Override
    public String toString() {
        return "Student [id=" + id + ", name=" + name + ", surname=" + surname + ", avatar=" + avatar + "]";
    }

}


Web-MVC-Config
package adil.java.schoolmaven.config;


import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.multipart.MultipartResolver;
import org.springframework.web.multipart.support.StandardServletMultipartResolver;

import org.springframework.web.servlet.ViewResolver;
import org.springframework.web.servlet.config.annotation.EnableWebMvc;
import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry;


import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
import org.springframework.web.servlet.view.InternalResourceViewResolver;

@Configuration
@EnableWebMvc
@ComponentScan(basePackages = "adil.java.schoolmaven")
public class WebMvcConfig implements WebMvcConfigurer {

	@Bean
     
	public ViewResolver getViewResolver() {
                InternalResourceViewResolver resolver = new InternalResourceViewResolver();
		resolver.setPrefix("/WEB-INF/views/");
		resolver.setSuffix(".jsp");
		return resolver;
	}
      

	@Override
	public void addResourceHandlers(ResourceHandlerRegistry registry) {
		registry.addResourceHandler("/resources/**").addResourceLocations("/resources/css");
	}
        
        @Bean
        public MultipartResolver multipartResolver() {
            
            
                return new StandardServletMultipartResolver();
 }
}
   


Servlet-Initializer
package adil.java.schoolmaven.config;

import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.MultipartConfigElement;
import javax.servlet.ServletException;
import javax.servlet.ServletRegistration;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.springframework.web.servlet.support.AbstractAnnotationConfigDispatcherServletInitializer;

public class ServletInitializer extends AbstractAnnotationConfigDispatcherServletInitializer {

	@Override
	protected Class<?>[] getRootConfigClasses() {
		return new Class[] { HibernateConfig.class };
	}

	@Override
	protected Class<?>[] getServletConfigClasses() {
		return new Class[] { WebMvcConfig.class };
	}

	@Override
	protected String[] getServletMappings() {
		return new String[] { "/" };
	}
        
        @Override
        protected void customizeRegistration(ServletRegistration.Dynamic registration) {
        registration.setMultipartConfig(new MultipartConfigElement("", 2097152, 4193304, 2097152));    
    }
}


Hibernete Config
/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package adil.java.schoolmaven.config;

import java.util.Properties;

import javax.sql.DataSource;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.PropertySource;
import org.springframework.core.env.Environment;
import org.springframework.data.jpa.repository.config.EnableJpaRepositories;
import org.springframework.jdbc.datasource.DriverManagerDataSource;
import org.springframework.orm.jpa.JpaTransactionManager;
import org.springframework.orm.jpa.JpaVendorAdapter;
import org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean;
import org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter;
import org.springframework.transaction.PlatformTransactionManager;
import org.springframework.transaction.annotation.EnableTransactionManagement;

@Configuration
@EnableTransactionManagement
@EnableJpaRepositories("adil.java.schoolmaven.repository")
@PropertySource(value = {
    "classpath:application.properties"
})
public class HibernateConfig {

    @Autowired
    private Environment environment;

    /************* Start Spring JPA config details **************/
    @Bean(name = "entityManagerFactory")
    public LocalContainerEntityManagerFactoryBean getEntityManagerFactoryBean() {
        LocalContainerEntityManagerFactoryBean lcemfb = new LocalContainerEntityManagerFactoryBean();
        lcemfb.setJpaVendorAdapter(getJpaVendorAdapter());
        lcemfb.setDataSource(dataSource());
        lcemfb.setPersistenceUnitName("myJpaPersistenceUnit");
        lcemfb.setPackagesToScan("adil.java.schoolmaven");
        lcemfb.setJpaProperties(hibernateProperties());
        return lcemfb;
    }

    @Bean
    public JpaVendorAdapter getJpaVendorAdapter() {
        JpaVendorAdapter adapter = new HibernateJpaVendorAdapter();
        return adapter;
    }

    @Bean(name = "transactionManager")
    public PlatformTransactionManager txManager() {
        JpaTransactionManager jpaTransactionManager = new JpaTransactionManager(
            getEntityManagerFactoryBean().getObject());
        return jpaTransactionManager;
    }

    /************* End Spring JPA config details **************/

    @Bean
    public DataSource dataSource() {
        DriverManagerDataSource dataSource = new DriverManagerDataSource();
        dataSource.setDriverClassName(environment.getRequiredProperty("jdbc.driver"));
        dataSource.setUrl(environment.getRequiredProperty("jdbc.url"));
        dataSource.setUsername(environment.getRequiredProperty("jdbc.username"));
        dataSource.setPassword(environment.getRequiredProperty("jdbc.password"));
        return dataSource;
    }

    private Properties hibernateProperties() {
        Properties properties = new Properties();
        properties.put("hibernate.dialect", environment.getRequiredProperty("hibernate.dialect"));
        properties.put("hibernate.show_sql", environment.getRequiredProperty("hibernate.show_sql"));
        properties.put("hibernate.format_sql", environment.getRequiredProperty("hibernate.format_sql"));
        properties.put("hibernate.hbm2ddl.auto", environment.getRequiredProperty("hibernate.hbm2ddl.auto"));
        return properties;
    }

}


Student Service
package adil.java.schoolmaven.service;
import java.util.List;
import adil.java.schoolmaven.entity.Student;

public interface StudentService {

	public List<Student> getAllStudents();
	public Student getStudentById(Long id);
	public boolean saveStudent(Student student);
	public boolean deleteStudentById(Long id);

}


Student Service Impl
package adil.java.schoolmaven.service;

import java.util.ArrayList;
import java.util.List;

import javax.transaction.Transactional;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import adil.java.schoolmaven.entity.Student;
import adil.java.schoolmaven.repository.StudentRepository;



@Service
@Transactional
public class StudentServiceImpl implements StudentService {

    private StudentRepository repository;

    public StudentServiceImpl() {

    }

    @Autowired
    public StudentServiceImpl(StudentRepository repository) {
        super();
        this.repository = repository;
    }

    @Override
    public List<Student> getAllStudents() {
        List<Student> list = new ArrayList<Student>();
        repository.findAll().forEach(e -> list.add(e));
        return list;
    }

    @Override
    public Student getStudentById(Long id) {
        Student student = repository.findById(id).get();
        return student;
    }

    @Override
    public boolean saveStudent(Student student) {
        try {
            repository.save(student);
            return true;
        } catch (Exception ex) {
            return false;
        }
    }

    @Override
    public boolean deleteStudentById(Long id) {
        try {
            repository.deleteById(id);
            return true;
        } catch (Exception ex) {
            return false;
        }

    }


}


Add Student JSP
<%@page contentType="text/html" pageEncoding="UTF-8"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
   "http://www.w3.org/TR/html4/loose.dtd">
<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form"%>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.4.0/css/bootstrap.min.css">
  <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
  <script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.4.0/js/bootstrap.min.js"></script>
<title>Home</title>

</head>
<body>
    <div class="add">
        <br>
    <br>
    <br>
    
    <br>
    <center>
	<h1>${headerMessage}</h1>
	
        <form:form method="POST" action="addStudent" modelAttribute="student" >
             <table>
                 
                 
                 
                <tr>
                    <td><form:label path="Name">Имя</form:label></td>
                    <td><form:input path="Name"/></td>
                </tr>
                <tr>
                    <td><form:label path="Surname">Фамилия</form:label></td>
                    <td><form:input path="Surname"/></td>
                </tr>
                <tr>
                    <td>Фотография:</td>
                    <td><form:input type="file" path="avatar" /></td>
                </tr>
                <tr>
                    <td><input class="btn btn-primary" type="submit" value="Добавить"></td>
                    
		
                
                </tr>
            </table>
        </form:form>
</center>
        </div>
</body>
</html>


All Student JSP
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8" isELIgnored="false"%>
<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.4.0/css/bootstrap.min.css">
  <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
  <script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.4.0/js/bootstrap.min.js"></script>
  <link href="../css/style.css" rel="stylesheet" type="text/css">
  <style><%@include file="/WEB-INF/css/style.css"%></style>
<title>Все студенты</title>
</head>
<body>
    <br>
    <br>
    <br>

    <br>
    <div class="it">
    <h3>Список всех студентов</h3>
    ${message}
    <br>
    <br>
    <table class="table">
  <thead>
    <tr>
      <th scope="col">#</th>
      <th scope="col">Имя</th>
     
      <th scope="col">Фамилия</th>
      <th scope="col">Фото</th>
      
    </tr>
  </thead>
  <tbody>
      <c:forEach var="student" items="${studentList}">
                <tr>
                    <th scope="row">1</th>
                    <td>${student.name}</td>
                    <td>${student.surname}</td>
                     <td>Должно быть изображение</td>
                    
                     <td><a
                        href="${pageContext.request.contextPath}/editStudent/${student.id}"><button type="button" class="btn btn-primary">Редактировать</button>
                    <td><a
                        href="${pageContext.request.contextPath}/deleteStudent/${student.id}"><button type="button" class="btn btn-primary">Удалить</button>
                            
                           
                            
                </tr>
            </c:forEach>
        </tbody>
    

    </table>
    <a href="${pageContext.request.contextPath}/addStudent"><button type="button" class="btn btn-primary">Добавить студента</button></a>
    </div>
</body>
</html>
25 апр 19, 12:59    [21871553]     Ответить | Цитировать Сообщить модератору
Все форумы / Java Ответить