Estructura del proyecto:
Página de inicio del proyecto:
Página de registro:
Subir imagen:
Imagen del efecto uno:
Imagen del efecto dos:
Imagen del efecto tres:
==================================================== ============
A continuación se muestra la parte del código.
==================================================== ============
Se requiere base de datos SQL:
crear base de datos db_ajax;
utilizar db_ajax;
crear tabla user_table
(
user_id int auto_increment clave primaria,
nombre varchar(255) único,
pasar varchar(255)
);
crear tabla foto_table
(
photo_id int auto_increment clave primaria,
título varchar(255),
nombre de archivo varchar(255),
propietario_id int,
clave externa (owner_id) hace referencia a user_table (user_id)
);
<div id="uploadDiv" estilo="display:none">
<formulario acción="proUpload" método="publicar"
enctype="multipart/form-data">
<table cellspace="1" cellpadding="10">
<caption>Subir fotos</caption>
<tr>
<td>Título de la imagen:</td>
<td><input id="título" nombre="título" tipo="texto" /></td>
</tr>
<tr>
<td>Buscar imágenes:</td>
<td><entrada id="archivo" nombre="archivo" tipo="archivo" /></td>
</tr>
<tr>
<td colspan="2" align="centro">
<tipo de entrada="enviar" valor="Subir" />
<tipo de entrada="reiniciar" valor="Reiniciar" />
</td>
</tr>
</tabla>
</formulario>
</div>
<div id="tipDiv" estilo="display:none">
</div>
</cuerpo>
</html>
<!-- Configure el contenedor Spring para que se cargue cuando se inicie la aplicación web -->
<oyente>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</escucha>
<servlet>
<nombre-servlet>proLogin</nombre-servlet>
<servlet-class>com.b510.album.web.ProLoginServlet</servlet-class>
</servlet>
<mapeo-servlet>
<nombre-servlet>proLogin</nombre-servlet>
<url-pattern>/proLogin</url-pattern>
</servlet-mapping>
<servlet>
<nombre-servlet>proRegist</nombre-servlet>
<servlet-class>com.b510.album.web.ProRegistServlet</servlet-class>
</servlet>
<mapeo-servlet>
<nombre-servlet>proRegist</nombre-servlet>
<url-pattern>/proRegist</url-pattern>
</servlet-mapping>
<servlet>
<nombre-servlet>validarNombre</nombre-servlet>
<servlet-class>com.b510.album.web.ValidateNameServlet</servlet-class>
</servlet>
<mapeo-servlet>
<nombre-servlet>validarNombre</nombre-servlet>
<url-pattern>/validarNombre</url-pattern>
</servlet-mapping>
<servlet>
<nombre-servlet>obtenerFoto</nombre-servlet>
<servlet-class>com.b510.album.web.GetPhotoServlet</servlet-class>
</servlet>
<mapeo-servlet>
<nombre-servlet>obtenerFoto</nombre-servlet>
<url-pattern>/getFoto</url-pattern>
</servlet-mapping>
<servlet>
<nombre-servlet>showImg</nombre-servlet>
<servlet-class>com.b510.album.web.ShowImgServlet</servlet-class>
</servlet>
<mapeo-servlet>
<nombre-servlet>showImg</nombre-servlet>
<url-pattern>/showImg</url-pattern>
</servlet-mapping>
<servlet>
<nombre-servlet>carga de página</nombre-servlet>
<servlet-class>com.b510.album.web.PageLoadServlet</servlet-class>
</servlet>
<mapeo-servlet>
<nombre-servlet>carga de página</nombre-servlet>
<url-pattern>/pageLoad</url-pattern>
</servlet-mapping>
<servlet>
<nombre-servlet>turnPage</nombre-servlet>
<servlet-class>com.b510.album.web.TurnPageServlet</servlet-class>
</servlet>
<mapeo-servlet>
<nombre-servlet>turnPage</nombre-servlet>
<url-pattern>/turnPage</url-pattern>
</servlet-mapping>
<servlet>
<nombre-servlet>proUpload</nombre-servlet>
<servlet-class>com.b510.album.web.ProUploadServlet</servlet-class>
</servlet>
<mapeo-servlet>
<nombre-servlet>proUpload</nombre-servlet>
<url-pattern>/proUpload</url-pattern>
</servlet-mapping>
<lista-de-archivos-de-bienvenida>
<archivo-de-bienvenida>álbum.html</archivo-de-bienvenida>
</lista-de-archivos-de-bienvenida>
</aplicación web>
<!-- Definir fuente de datos Bean, implementado utilizando la fuente de datos C3P0 -->
<bean id="fuente de datos" destruir-método="cerrar"
>
<!-- Especifique el controlador para conectarse a la base de datos -->
<nombre de propiedad="driverClass" valor="com.mysql.jdbc.Driver"/>
<!-- Especifique la URL para conectarse a la base de datos -->
<nombre de propiedad="jdbcUrl"
valor="jdbc:mysql://localhost:3308/db_ajax"/>
<!-- Especifique el nombre de usuario para conectarse a la base de datos -->
<nombre de propiedad="usuario" valor="raíz"/>
<!-- Especifique la contraseña para conectarse a la base de datos -->
<nombre de propiedad="contraseña" valor="raíz"/>
<!--Especifique el número máximo de conexiones al grupo de conexiones de la base de datos-->
<nombre de propiedad="maxPoolSize" valor="40"/>
<!-- Especifique el número mínimo de conexiones para conectarse al grupo de conexiones de la base de datos -->
<nombre de propiedad="minPoolSize" valor="1"/>
<!-- Especifique el número de conexiones iniciales para conectarse al grupo de conexiones de la base de datos -->
<nombre de propiedad="initialPoolSize" valor="1"/>
<!-- Especifique el tiempo máximo de inactividad para las conexiones al grupo de conexiones de la base de datos -->
<nombre de propiedad="maxIdleTime" valor="20"/>
</bean>
<!-- Definir SessionFactory de Hibernate -->
<bean id="fábrica de sesiones"
>
<!-- Fuente de datos de inyección de dependencia, inyecte la fuente de datos definida anteriormente -->
<nombre de propiedad="fuente de datos" ref="fuente de datos"/>
<!-- El atributo mappingResouces se utiliza para enumerar todos los archivos de mapeo -->
<nombre de propiedad="mappingResources">
<lista>
<!-- Lo siguiente se utiliza para enumerar los archivos de mapeo de Hibernate-->
<value>com/b510/album/model/User.hbm.xml</value>
<value>com/b510/album/model/Photo.hbm.xml</value>
</lista>
</propiedad>
<!-- Definir las propiedades de SessionFactory de Hibernate -->
<nombre de propiedad="hibernateProperties">
<accesorios>
<!--Especificar dialecto de base de datos-->
<prop key="hibernar.dialect">
org.hibernate.dialect.MySQLInnoDBDialect</prop>
<!-- Si se debe crear automáticamente una base de datos cada vez que sea necesario -->
<prop key="hibernate.hbm2ddl.auto">actualizar</prop>
<!-- Muestra el SQL generado por la operación de persistencia de Hibernate -->
<prop key="hibernate.show_sql">verdadero</prop>
<!-- Formatee el script SQL y luego envíelo -->
<prop key="hibernate.format_sql">verdadero</prop>
</props>
</propiedad>
</bean>
<!-- Configurar el componente UserDao -->
<bean id="usuarioDao"
>
<!--Inyectar referencia de SessionFactory-->
<nombre de propiedad="Fábrica de Sesiones" ref="Fábrica de Sesiones"/>
</bean>
<!-- Configurar el componente PhotoDao -->
<bean id="fotoDao"
>
<nombre de propiedad="Fábrica de Sesiones" ref="Fábrica de Sesiones"/>
</bean>
<!-- Configurar el componente de lógica empresarial albumService -->
<bean id="servicio de álbum"
>
<!-- Inyecte 2 componentes DAO en el componente de lógica empresarial -->
<nombre de propiedad="userDao" ref="userDao"/>
<nombre de propiedad="photoDao" ref="photoDao"/>
</bean>
<!-- Configure el administrador de transacciones local de Hibernate, use la clase HibernateTransactionManager -->
<!-- Esta clase implementa la interfaz PlatformTransactionManager, que es una implementación específica para Hibernate -->
<bean id="administrador de transacciones"
>
<!-- Al configurar HibernateTransactionManager, debe inyectar una referencia a SessionFactory -->
<nombre de propiedad="Fábrica de Sesiones" ref="Fábrica de Sesiones"/>
</bean>
<!-- Configure el aspecto de transacción Bean y especifique el administrador de transacciones -->
<tx:advice id="txAdvice" administrador-transacción="transactionManager">
<!-- Se utiliza para configurar la semántica de transacciones detallada-->
<tx:atributos>
<!-- Todos los métodos que comienzan con 'get' son de solo lectura -->
<tx:nombre del método="get*" solo lectura="true"/>
<!-- Otros métodos utilizan la configuración de transacción predeterminada -->
<tx:nombre del método="*"/>
</tx:atributos>
</tx:consejo>
<aop:config>
<!-- Configure un punto de corte para que coincida con todos los métodos ejecutados por todas las clases que terminan en Impl en el paquete lee -->
<aop:pointcut id="leeService"
expresión="ejecución(* com.b510.album.service.impl.*Impl.*(..))"/>
<!-- Especifique aplicar el aspecto de transacción txAdvice en el punto de entrada de leeService -->
<aop:advisor asesoramiento-ref="txAdvice"
pointcut-ref="leeService"/>
</aop:config>
</frijoles>
reinicio de función()
{
//Borrar los dos cuadros de texto de una sola línea de usuario y pasar
$("#usuario").val("");
$("#pass").val("");
}
//Cambiar al cuadro de diálogo de registro
cambio de funciónRegistro()
{
//Ocultar los dos botones para iniciar sesión
$("#loginDiv").hide("500");
//Muestra dos botones para el registro
$("#registDiv").show("500");
}
//Función para manejar el inicio de sesión del usuario
función proLogin()
{
//Obtiene los valores del usuario de los dos cuadros de texto y pasa
var usuario = $.trim($("#usuario").val());
var pasar = $.trim($("#pass").val());
if (usuario == nulo || usuario == ""
|| pasar == nulo|| pasar == "")
{
alert("Debe ingresar su nombre de usuario y contraseña antes de poder iniciar sesión");
devolver falso;
}
demás
{
//Enviar solicitud POST asíncrona a proLogin
$.post("proLogin", $('#usuario,#contraseña').serializeArray()
, nulo , "guión");
}
}
//Función que maneja el registro de usuarios
registro de funciones()
{
//Obtiene los valores del usuario de los dos cuadros de texto y pasa
var usuario = $.trim($("#usuario").val());
var pasar = $.trim($("#pass").val());
if (usuario == nulo || usuario == "" || pasar == nulo || pasar =="")
{
alert("Debe ingresar su nombre de usuario y contraseña antes de registrarse");
devolver falso;
}
demás
{
//Enviar solicitud POST asíncrona a proRegist
$.post("proRegist", $('#usuario,#contraseña').serializeArray()
, nulo , "guión");
}
}
//Verifica si el nombre de usuario está disponible
función validarNombre()
{
//Obtener el valor del cuadro de texto del usuario
var usuario = $.trim($("#usuario").val());
if (usuario == nulo || usuario == "")
{
alert("¡Aún no has ingresado tu nombre de usuario!");
devolver falso;
}
demás
{
//Enviar una solicitud POST asincrónica para validarNombre
$.post("validarNombre", $('#usuario').serializeArray()
, nulo , "guión");
}
}
// Obtener periódicamente fotografías del usuario actual y de la página actual
función onLoadHandler()
{
//Enviar solicitud GET asincrónica a getPhoto
$.getScript("obtenerFoto");
//Ejecutar este método nuevamente después de especificar 1 segundo
setTimeout("onLoadHandler()", 1000);
}
//mostrar fotos
función showImg(nombre de archivo)
{
$.getScript("showImg?img=" + nombredearchivo);
// document.getElementById("show").src="uploadfiles/" + fileName + "?now=" + new Date();
// $("#show").attr("src" , "uploadfiles/" + fileName);
}
//Función para manejar el paso de página
función turnPage(bandera)
{
$.getScript("turnPage?turn=" + bandera);
}
//Abre la ventana de carga
función abrirCargar()
{
$("#uploadDiv").mostrar()
.diálogo(
{
modal: verdadero,
redimensionable: falso,
ancho: 428,
altura: 220,
superposición: {opacidad: 0,5, fondo: "negro"}
});
}
importar javax.servlet.ServletConfig;
importar javax.servlet.ServletException;
importar javax.servlet.http.HttpServlet;
importar org.springframework.context.ApplicationContext;
importar org.springframework.web.context.support.WebApplicationContextUtils;
importar com.b510.album.service.AlbumService;
/**
*
* @autor Hongten
*
*/
la clase pública BaseServlet extiende HttpServlet {
serialVersionUID largo final estático privado = -2041755371540813745L;
AlbumService protegido como;
//Definimos el constructor y obtenemos una referencia al contenedor Spring
public void init (configuración de ServletConfig) lanza ServletException {
super.init(config);
ApplicationContext ctx = WebApplicationContextUtils
.getWebApplicationContext(getServletContext());
as = (AlbumService) ctx.getBean("albumService");
}
}
importar java.io.IOException;
importar java.io.PrintWriter;
importar javax.servlet.ServletException;
importar javax.servlet.http.HttpServletRequest;
importar javax.servlet.http.HttpServletResponse;
importar com.b510.album.exception.AlbumException;
importar com.b510.album.web.base.BaseServlet;
/**
*
* @autor Hongten
*
*/
clase pública ValidateNameServlet extiende BaseServlet {
serialVersionUID largo final estático privado = 9038839276327742641L;
servicio público nulo (solicitud HttpServletRequest, respuesta HttpServletResponse)
lanza IOException, ServletException {
Nombre de cadena = request.getParameter("usuario");
respuesta.setContentType("texto/javascript;charset=GBK");
// Obtener el flujo de salida
PrintWriter fuera = respuesta.getWriter();
intentar {
si (nombre! = nulo) {
if (as.validateName(nombre)) {
out.println("alert('¡Felicitaciones, este nombre de usuario aún no se ha utilizado, puede usarlo!');");
} demás {
out.println("alert('¡Lo sentimos, este nombre de usuario ya está ocupado por otra persona!');");
out.println("$('#usuario').val('');");
}
} demás {
out.println("alert('¡Se produjo una excepción al verificar el nombre de usuario, cambie el nombre de usuario e inténtelo nuevamente!');");
}
} captura (AlbumException ex) {
out.println("alert('" + ex.getMessage() + "¡Cambie su nombre de usuario e inténtelo de nuevo!');");
}
}
}
importar java.io.IOException;
importar java.io.PrintWriter;
importar java.util.List;
importar javax.servlet.ServletException;
importar javax.servlet.http.HttpServletRequest;
importar javax.servlet.http.HttpServletResponse;
importar javax.servlet.http.HttpSession;
importar com.b510.album.exception.AlbumException;
importar com.b510.album.vo.PhotoHolder;
importar com.b510.album.web.base.BaseServlet;
/**
*
* @autor Hongten
*
*/
clase pública TurnPageServlet extiende BaseServlet {
serialVersionUID largo final estático privado = -5097286750384714951L;
servicio público nulo (solicitud HttpServletRequest, respuesta HttpServletResponse)
lanza IOException, ServletException {
Giro de cadena = request.getParameter("giro");
Sesión HttpSession = request.getSession (verdadero);
Nombre de cadena = (Cadena) session.getAttribute("curUser");
Objeto pageObj = session.getAttribute("curPage");
// Si curPage en HttpSession es nulo, establece la página actual en la primera página
int curPage = pageObj == null 1: (Entero) pageObj;
respuesta.setContentType("texto/javascript;charset=GBK");
PrintWriter fuera = respuesta.getWriter();
if (curPage == 1 && turn.equals("-1")) {
out.println("alert('¡Ahora es la primera página, no puedo avanzar!')");
} demás {
// Ejecutar cambio de página y modificar el valor de curPage.
curPage += Integer.parseInt(giro);
intentar {
Lista<PhotoHolder> fotos = as.getPhotoByUser(nombre, curPage);
// No queda ningún registro después de pasar la página
if (fotos.tamaño() == 0) {
out.println("alert('No se encontró ningún registro fotográfico después de pasar la página, el sistema volverá automáticamente a la página anterior')");
//Volver a la página anterior
curPage -= Integer.parseInt(giro);
} demás {
//Ingrese el número de página que el usuario está navegando en HttpSession
session.setAttribute("curPage", curPage);
}
} captura (AlbumException ex) {
out.println("alert('" + ex.getMessage() + "¡Inténtelo de nuevo!')");
}
}
}
}
importar java.io.IOException;
importar java.io.PrintWriter;
importar javax.servlet.ServletException;
importar javax.servlet.http.HttpServletRequest;
importar javax.servlet.http.HttpServletResponse;
importar javax.servlet.http.HttpSession;
importar com.b510.album.web.base.BaseServlet;
/**
*
* @autor Hongten
*
*/
clase pública ShowImgServlet extiende BaseServlet {
serialVersionUID largo final estático privado = 1460203270448078666L;
servicio público nulo (solicitud HttpServletRequest, respuesta HttpServletResponse)
lanza IOException, ServletException {
Cadena img = request.getParameter("img");
Sesión HttpSession = request.getSession (verdadero);
//Coloca la imagen que el usuario está navegando en HttpSession.
session.setAttribute("curImg", img);
respuesta.setContentType("texto/javascript;charset=GBK");
// Obtener el flujo de salida
PrintWriter fuera = respuesta.getWriter();
out.println("$('#show').attr('src' , 'uploadfiles/" + img + "');");
}
}
importar java.io.FileOutputStream;
importar java.io.IOException;
importar java.io.InputStream;
importar java.io.PrintWriter;
importar java.util.Iterator;
importar java.util.List;
importar javax.servlet.ServletException;
importar javax.servlet.http.HttpServletRequest;
importar javax.servlet.http.HttpServletResponse;
importar org.apache.commons.fileupload.FileItem;
importar org.apache.commons.fileupload.FileItemFactory;
importar org.apache.commons.fileupload.FileUploadException;
importar org.apache.commons.fileupload.disk.DiskFileItemFactory;
importar org.apache.commons.fileupload.servlet.ServletFileUpload;
importar com.b510.album.exception.AlbumException;
importar com.b510.album.web.base.BaseServlet;
/**
*
* @autor Hongten
*
*/
@SuppressWarnings("sin marcar")
clase pública ProUploadServlet extiende BaseServlet {
serialVersionUID largo final estático privado = 642229801989188793L;
servicio público nulo (solicitud HttpServletRequest, respuesta HttpServletResponse)
lanza IOException, ServletException {
Iterador iter = nulo;
Título de cadena = nulo;
respuesta.setContentType("text/html;charset=GBK");
// Obtener el flujo de salida
PrintWriter fuera = respuesta.getWriter();
out.println("<tipo de script='texto/javascript>'");
intentar {
//Utiliza Uploader para gestionar las cargas
Fábrica FileItemFactory = nuevo DiskFileItemFactory();
Carga de ServletFileUpload = nuevo ServletFileUpload (fábrica);
Elementos de la lista = upload.parseRequest(solicitud);
iter = elementos.iterador();
// Recorre el contenido correspondiente a cada control de formulario.
mientras (iter.hasNext()) {
elemento FileItem = (FileItem) iter.next();
// Si el elemento es un campo de formulario normal
si (item.isFormField()) {
Nombre de cadena = item.getFieldName();
if (nombre.equals("título")) {
título = item.getString("GBK");
}
}
// Si es un archivo que necesita ser cargado
demás {
Usuario de cadena = (Cadena) request.getSession().getAttribute(
"curUsuario");
Cadena serverFileName = nulo;
//devuelve el nombre del archivo
Cadena nombre de archivo = item.getName();
// Obtener el sufijo del archivo
Cadena appden = nombre_archivo.subcadena(nombre_archivo)
.lastIndexOf("."));
// devolver tipo de archivo
Cadena contentType = item.getContentType();
// Solo se permiten cargar imágenes jpg, gif y png
si (contentType.equals("imagen/pjpeg")
|| tipo de contenido.equals("imagen/gif")
|| tipo de contenido.equals("imagen/jpeg")
|| tipo de contenido.equals("imagen/png")) {
Entrada de flujo de entrada = item.getInputStream();
serverFileName = String.valueOf(Sistema
.currentTimeMillis());
Salida FileOutputStream = nuevo FileOutputStream(
getServletContext().getRealPath("/")
+ "cargar archivos//" + nombre de archivo del servidor
+ appden);
byte[] buffer = nuevo byte[1024];
int longitud = 0;
mientras ((len = input.read(buffer)) > 0) {
salida.write(búfer, 0, len);
}
entrada.cerrar();
salida.close();
as.addPhoto(usuario, título, serverFileName + appden);
respuesta.sendRedirect("album.html?resultCode=0");
} demás {
respuesta.sendRedirect("album.html?resultCode=1");
}
}
}
} captura (FileUploadException fue) {
fue.printStackTrace();
respuesta.sendRedirect("album.html?resultCode=2");
} captura (AlbumException ex) {
ex.printStackTrace();
}
}
}
importar java.io.IOException;
importar java.io.PrintWriter;
importar javax.servlet.ServletException;
importar javax.servlet.http.HttpServletRequest;
importar javax.servlet.http.HttpServletResponse;
importar javax.servlet.http.HttpSession;
importar com.b510.album.exception.AlbumException;
importar com.b510.album.web.base.BaseServlet;
/**
*
* @autor Hongten
*
*/
clase pública ProRegistServlet extiende BaseServlet {
serialVersionUID largo final estático privado = -3174994243043815566L;
servicio público nulo (solicitud HttpServletRequest, respuesta HttpServletResponse)
lanza IOException, ServletException {
Nombre de cadena = request.getParameter("usuario");
Pasar cadena = request.getParameter("pasar");
respuesta.setContentType("texto/javascript;charset=GBK");
// Obtener el flujo de salida
PrintWriter fuera = respuesta.getWriter();
intentar {
out.println("$('#usuario,#contraseña').val('');");
if (nombre! = nulo && pase! = nulo && as.registUser(nombre, pase) > 0) {
Sesión HttpSession = request.getSession (verdadero);
session.setAttribute("curUser", nombre);
out.println("alert('¡Felicitaciones, se ha registrado exitosamente!');");
out.println("$('#noLogin').hide(500);");
out.println("$('#hasLogin').show(500);");
//Llama al método para obtener la lista de fotos.
out.println("onLoadHandler();");
} demás {
out.println("alert('¡Su registro falló, elija un nombre de usuario adecuado e inténtelo nuevamente!');");
}
} captura (AlbumException ex) {
out.println("alert('" + ex.getMessage() + "¡Cambie su nombre de usuario e inténtelo de nuevo!');");
}
}
}
importar java.io.IOException;
importar java.io.PrintWriter;
importar javax.servlet.ServletException;
importar javax.servlet.http.HttpServletRequest;
importar javax.servlet.http.HttpServletResponse;
importar javax.servlet.http.HttpSession;
importar com.b510.album.exception.AlbumException;
importar com.b510.album.web.base.BaseServlet;
/**
*
* @autor Hongten
*
*/
clase pública ProLoginServlet extiende BaseServlet {
serialVersionUID largo final estático privado = -1253530202224049958L;
servicio público nulo (solicitud HttpServletRequest, respuesta HttpServletResponse)
lanza IOException, ServletException {
Nombre de cadena = request.getParameter("usuario");
Pasar cadena = request.getParameter("pasar");
respuesta.setContentType("texto/javascript;charset=GBK");
// Obtener el flujo de salida
PrintWriter fuera = respuesta.getWriter();
intentar {
// Borra el contenido de los cuadros de entrada con ID de usuario y contraseña
out.println("$('#usuario,#contraseña').val('');");
if (nombre! = nulo && pase! = nulo && as.userLogin(nombre, pase)) {
Sesión HttpSession = request.getSession (verdadero);
session.setAttribute("curUser", nombre);
out.println("alert('¡Has iniciado sesión correctamente!')");
out.println("$('#noLogin').hide(500)");
out.println("$('#hasLogin').show(500)");
//Llama al método para obtener la lista de fotos.
out.println("onLoadHandler();");
} demás {
out.println("alert('El nombre de usuario y la contraseña que ingresó no coinciden, ¡inténtelo de nuevo!')");
}
} captura (AlbumException ex) {
out.println("alert('" + ex.getMessage() + "¡Cambie su nombre de usuario y contraseña e inténtelo de nuevo!')");
}
}
}
importar java.io.IOException;
importar java.io.PrintWriter;
importar javax.servlet.ServletException;
importar javax.servlet.http.HttpServletRequest;
importar javax.servlet.http.HttpServletResponse;
importar javax.servlet.http.HttpSession;
importar com.b510.album.web.base.BaseServlet;
/**
*
* @autor Hongten
*
*/
clase pública PageLoadServlet extiende BaseServlet {
serialVersionUID largo final estático privado = 7512001492425261841L;
servicio público nulo (solicitud HttpServletRequest, respuesta HttpServletResponse)
lanza IOException, ServletException {
respuesta.setContentType("texto/javascript;charset=GBK");
// Obtener el flujo de salida
PrintWriter fuera = respuesta.getWriter();
Sesión HttpSession = request.getSession (verdadero);
Nombre de cadena = (Cadena) session.getAttribute("curUser");
// Si el nombre no es nulo, indica que el usuario ha iniciado sesión
si (nombre! = nulo) {
//Ocultar el elemento con id noLogin (panel de inicio de sesión de usuario)
out.println("$('#noLogin').hide()");
//Ocultar el elemento con id hasLogin (Panel de control de usuario)
out.println("$('#hasLogin').show()");
//Llama al método para obtener la lista de fotos.
out.println("onLoadHandler();");
// Elimina el atributo curImg en HttpSession
Cadena curImg = (Cadena) session.getAttribute("curImg");
//Volver a mostrar la foto que el usuario está navegando
si (curImg! = nulo) {
out.println("$('#show').attr('src', 'uploadfiles/" + curImg
+ "');");
}
}
}
}
importar java.io.IOException;
importar java.io.PrintWriter;
importar java.util.List;
importar javax.servlet.ServletException;
importar javax.servlet.http.HttpServletRequest;
importar javax.servlet.http.HttpServletResponse;
importar javax.servlet.http.HttpSession;
importar com.b510.album.exception.AlbumException;
importar com.b510.album.vo.PhotoHolder;
importar com.b510.album.web.base.BaseServlet;
/**
*
* @autor Hongten
*
*/
clase pública GetPhotoServlet extiende BaseServlet {
serialVersionUID largo final estático privado = -8380695760546582385L;
servicio público nulo (solicitud HttpServletRequest, respuesta HttpServletResponse)
lanza IOException, ServletException {
Sesión HttpSession = request.getSession (verdadero);
// Obtenga el número de página actual del usuario actual y la lista de fotos del sistema de HttpSession
Nombre de cadena = (Cadena) session.getAttribute("curUser");
Objeto pageObj = session.getAttribute("curPage");
// Si curPage en HttpSession es nulo, establece la página actual en la primera página
int curPage = pageObj == null 1: (Entero) pageObj;
respuesta.setContentType("texto/javascript;charset=GBK");
// Obtener el flujo de salida
PrintWriter fuera = respuesta.getWriter();
intentar {
Lista<PhotoHolder> fotos = as.getPhotoByUser(nombre, curPage);
// Borrar el elemento con id de lista
out.println("var lista = $('#list').empty();");
para (PhotoHolder ph: fotos) {
// Agrega dinámicamente cada foto al elemento con el id de la lista
out.println("list.append(/"<div align='center'>"
+ "<a href='javascript:void(0)' onclick=///"showImg('"
+ ph.getFileName() + "');///">" + ph.getTitle()
+ "</a></div>/");");
}
} captura (AlbumException ex) {
out.println("alert('" + ex.getMessage() + "¡Por favor, inténtalo de nuevo!')");
}
}
}
/**
*
* @autor Hongten
*
*/
Portafotos de clase pública {
//El nombre de la foto
título de cadena privada;
//El nombre del archivo de la foto en el servidor.
nombre de archivo de cadena privada;
// Constructor sin parámetros
Portafotos público() {
}
// Constructor para inicializar todas las propiedades
PhotoHolder público (título de cadena, nombre de archivo de cadena) {
this.title = título;
this.fileName = fileName;
}
// Los métodos setter y getter del atributo de título
setTitle público vacío (título de cadena) {
this.title = título;
}
cadena pública getTitle() {
devolver este título;
}
//Métodos definidor y captador del atributo fileName
setFileName público vacío (nombre de archivo de cadena) {
this.fileName = fileName;
}
cadena pública getFileName() {
devolver this.fileName;
}
}
importar java.util.ArrayList;
importar java.util.List;
importar com.b510.album.dao.PhotoDao;
importar com.b510.album.dao.UserDao;
importar com.b510.album.exception.AlbumException;
importar com.b510.album.model.Photo;
importar com.b510.album.model.User;
importar com.b510.album.service.AlbumService;
importar com.b510.album.vo.PhotoHolder;
/**
*
* @autor Hongten
*
*/
la clase pública AlbumServiceImpl implementa AlbumService {
// 2 componentes DAO de los que depende el componente de lógica de negocios
UserDao privado ud = nulo;
PhotoDao privado pd = nulo;
// Inyección de dependencia de los métodos de establecimiento requeridos por 2 componentes DAO
setUserDao público vacío (UserDao ud) {
this.ud = ud;
}
conjunto vacío públicoPhotoDao (PhotoDao pd) {
esto.pd = pd;
}
/**
* Verifique si el inicio de sesión del usuario es exitoso.
*
* @nombre del parámetro
* Nombre de usuario de inicio de sesión
* @param pase
* Contraseña de inicio de sesión
* @return El resultado del inicio de sesión del usuario; devuelve verdadero si tiene éxito; de lo contrario, devuelve falso
*/
inicio de sesión de usuario booleano público (nombre de cadena, paso de cadena) {
intentar {
// Usa UserDao para consultar a los usuarios según el nombre de usuario
Usuario u = ud.findByName(nombre);
if (u! = nulo && u.getPass().equals(pass)) {
devolver verdadero;
}
devolver falso;
} captura (Excepción ex) {
ex.printStackTrace();
throw new AlbumException("¡Se produjo una excepción al procesar el inicio de sesión del usuario!");
}
}
/**
* Registrar nuevo usuario
*
* @nombre del parámetro
* Nombre de usuario del usuario recién registrado
* @param pase
* Contraseña para usuarios recién registrados
* @return la clave principal del usuario recién registrado
*/
public int registUser (nombre de cadena, paso de cadena) {
intentar {
//Crear una nueva instancia de usuario
Usuario u = nuevo Usuario();
u.setName(nombre);
u.setPass(pase);
// persiste el objeto Usuario
ud.guardar(u);
devolver u.getId();
} captura (Excepción ex) {
ex.printStackTrace();
throw new AlbumException("¡Se produjo una excepción durante el registro de un nuevo usuario!");
}
}
/**
* Agregar fotos
*
* @param usuario
*Usuario que agregó foto
* @param título
* Agrega un título a tu foto
* @param nombre de archivo
* Agregue el nombre del archivo de la foto en el servidor.
* @return La clave principal de la foto recién agregada
*/
public int addPhoto(Usuario de cadena, Título de cadena, Nombre de archivo de cadena) {
intentar {
//Crear una nueva instancia de Foto
Foto p = nueva foto();
p.setTitle(título);
p.setFileName(nombredearchivo);
p.setUser(ud.findByName(usuario));
// Instancia de foto persistente
pd.guardar(p);
devolver p.getId();
} captura (Excepción ex) {
ex.printStackTrace();
throw new AlbumException("¡Se produjo una excepción al agregar fotos!");
}
}
/**
* Obtenga todas las fotos del usuario según el usuario.
*
* @param usuario
* Usuario actual
* @param páginaNo
*Número de página
* @return Devuelve las fotos que pertenecen al usuario y a la página especificada
*/
Lista pública<PhotoHolder> getPhotoByUser(String user, int pageNo) {
intentar {
Lista<Foto> pl = pd.findByUser(ud.findByName(usuario), pageNo);
Lista<PhotoHolder> resultado = new ArrayList<PhotoHolder>();
para (Foto p: pl) {
result.add(new PhotoHolder(p.getTitle(), p.getFileName()));
}
resultado de devolución;
} captura (Excepción ex) {
ex.printStackTrace();
throw new AlbumException("¡Se produjo una excepción al consultar la lista de fotos!");
}
}
/**
* Verificar si el nombre de usuario está disponible, es decir, si el nombre de usuario ya existe en la base de datos.
*
* @nombre del parámetro
* Nombre de usuario que necesita ser verificado
* @return Devuelve verdadero si el nombre de usuario está disponible; de lo contrario, devuelve falso.
*/
nombre de validación booleano público (nombre de cadena) {
intentar {
// Consulta la instancia de usuario correspondiente según el nombre de usuario
Usuario u = ud.findByName(nombre);
si (u! = nulo) {
devolver falso;
}
devolver verdadero;
} captura (Excepción ex) {
ex.printStackTrace();
throw new AlbumException("¡Se produjo una excepción durante el proceso de verificar si el nombre de usuario existe!");
}
}
}
importar java.util.List;
importar com.b510.album.vo.PhotoHolder;
/**
*
* @autor Hongten
*
*/
interfaz pública AlbumService {
/**
* Verifique si el inicio de sesión del usuario es exitoso.
*
* @nombre del parámetro
* Nombre de usuario de inicio de sesión
* @param pase
* Contraseña de inicio de sesión
* @return El resultado del inicio de sesión del usuario; devuelve verdadero si tiene éxito; de lo contrario, devuelve falso
*/
inicio de sesión de usuario booleano (nombre de cadena, paso de cadena);
/**
* Registrar nuevo usuario
*
* @nombre del parámetro
* Nombre de usuario del usuario recién registrado
* @param pase
* Contraseña para usuarios recién registrados
* @return la clave principal del usuario recién registrado
*/
int RegisterUser (nombre de cadena, pase de cadena);
/**
* Agregar fotos
*
* @param usuario
*Usuario que agregó foto
* @param título
* Agrega un título a tu foto
* @param nombre de archivo
* Agregue el nombre del archivo de la foto en el servidor.
* @return La clave principal de la foto recién agregada
*/
int addPhoto(Usuario de cadena, Título de cadena, Nombre de archivo de cadena);
/**
* Obtenga todas las fotos del usuario según el usuario.
*
* @param usuario
* Usuario actual
* @param páginaNo
*Número de página
* @return Devuelve las fotos que pertenecen al usuario y a la página especificada
*/
Lista<PhotoHolder> getPhotoByUser(String user, int pageNo);
/**
* Verificar si el nombre de usuario está disponible, es decir, si el nombre de usuario ya existe en la base de datos.
*
* @nombre del parámetro
* Nombre de usuario que necesita ser verificado
* @return Devuelve verdadero si el nombre de usuario está disponible; de lo contrario, devuelve falso.
*/
nombre de validación booleano (nombre de cadena);
}
/**
* Clase de entidad fotográfica
*
* @autor Hongten
*
*/
Foto de clase pública {
//Atributo de identificación
identificación entera privada;
//El nombre de la foto
título de cadena privada;
//El nombre del archivo de la foto en el servidor.
nombre de archivo de cadena privada;
//Guarda el usuario al que pertenece la foto
usuario usuario privado;
// Constructor sin parámetros
Foto pública() {
}
// Constructor para inicializar todas las propiedades
Public Photo (ID de entero, título de cadena, Nombre de archivo de cadena, usuario de usuario) {
this.id = identificación;
this.title = title;
this.FileName = FileName;
this.user = usuario;
}
// Métodos de setter y getter de atributo de identificación
public void setid (ID de entero) {
this.id = identificación;
}
Public Integer getId () {
devolver esto.id;
}
// Los métodos setter y getter del atributo de título
public void settitle (título de cadena) {
this.title = title;
}
public String gettitle () {
devolver esto.title;
}
// Métodos de setter y getter del atributo de nombre de archivo
public void setFileName (string filename) {
this.FileName = FileName;
}
public String getFileName () {
devolver esto.fileName;
}
// Métodos setter y getter de atributo de usuario
public void setUser (usuario de usuario) {
this.user = usuario;
}
Usuario público getUser () {
devolver este.user;
}
}
import java.util.set;
import java.util.hashset;
/**
* Clase de entidad de usuario
*
* @autor Hongten
*
*/
Usuario de clase pública {
// atributo de identificación
ID de entero privado;
// El nombre de usuario del usuario
nombre de cadena privada;
// Contraseña de este usuario
pase de cadena privada;
// Use el conjunto para guardar las fotos asociadas con este usuario
set private <foto> fotos = nuevo hashset <foto> ();
// constructor sin parámetros
Public User () {
}
// constructor para inicializar todas las propiedades
Usuario público (ID de entero, nombre de cadena, String Pass) {
this.id = identificación;
this.nombre = nombre;
this.pass = pass;
}
// Métodos de setter y getter de atributo de identificación
public void setid (ID de entero) {
this.id = identificación;
}
Public Integer getId () {
devolver esto.id;
}
// atributo de nombre de nombre y setter y getter
setName público vacío (nombre de cadena) {
this.nombre = nombre;
}
cadena pública getName() {
devolver este.nombre;
}
// atributo de métodos de pase de setter y getter
public void setPass (string pass) {
this.pass = pass;
}
public String getPass () {
devolver esto.pass;
}
// atributo de métodos de fotos de setter and getter
public void setPhotos (set <foto> fotos) {
this.photos = Photos;
}
conjunto público <foto> getPhotos () {
devolver esto.photos;
}
}
/**
*Excepción personalizada
*
* @autor Hongten
*
*/
Public Class AlbumException extiende RuntimeException {
Private static final Long SerialVersionUid = 8050756054850450421l;
// Proporcionar un constructor sin parámetros
Public AlbumException () {
}
// Proporcionar un constructor con parámetros de cadena
Public AlbumException (string msg) {
super (msg);
}
}
importar java.sql.SQLException;
importar java.util.List;
importar org.hibernate.HibernateException;
importar org.hibernate.query;
importar org.hibernate.Session;
importar org.springframework.orm.Hibernate3.HibernateCallback;
importar org.springframework.orm.Hibernate3.support.HibernatedaSupport;
/**
*
* @autor Hongten
*
*/
@SupessWarnings ("sin control")
clase pública HongtenhibernatedAosupport extiende HibernatedaSupport {
/**
* Use las declaraciones de HQL para las operaciones de consulta de paginación
*
* @param hql
* Declaración de HQL a ser consultado
* @param offset
* Índice del primer registro
* @param pagesize
*El número de registros que se mostrarán en cada página
* @return todos los registros de la página actual
*/
Lista pública FindByPage (final de cadena HQL, Final Int Offset,
Página final int) {
List list = gethibernateTemplate (). ExecuteFind (new HibernateCallback () {
objeto público doinHibernate (sesión de sesión)
Lanza HibernateException, SQLException {
Resultado de la lista = session.createQuery (HQL) .SetFirStresult (Offset)
.SetMaxResults (PageSize) .list ();
resultado de devolución;
}
});
lista de devolución;
}
/**
* Use las declaraciones de HQL para las operaciones de consulta de paginación
*
* @param hql
* Declaración de HQL a ser consultado
* valor @param
* Si HQL tiene un parámetro que debe pasar, el valor es el parámetro que se pasa.
* @param offset
* Índice del primer registro
* @param pagesize
*El número de registros que se mostrarán en cada página
* @return todos los registros de la página actual
*/
Lista pública FindByPage (final de cadena HQL, valor final del objeto,
final int offset, final int pageSize) {
List list = gethibernateTemplate (). ExecuteFind (new HibernateCallback () {
objeto público doinHibernate (sesión de sesión)
Lanza HibernateException, SQLException {
Resultado de la lista = session.createQuery (HQL) .SetParameter (0, valor)
.setFirStresult (offset) .SetMaxResults (PageSize) .List ();
resultado de devolución;
}
});
lista de devolución;
}
/**
* Use las declaraciones de HQL para las operaciones de consulta de paginación
*
* @param hql
* Declaración de HQL a ser consultado
* @Param Valores
* Si HQL tiene múltiples parámetros que deben pasar, los valores son la matriz de parámetros que se pasa.
* @param offset
* Índice del primer registro
* @param pagesize
*El número de registros que se mostrarán en cada página
* @return todos los registros de la página actual
*/
Lista pública FindByPage (final de cadena HQL, valores del objeto final [],
final int offset, final int pageSize) {
List list = gethibernateTemplate (). ExecuteFind (new HibernateCallback () {
objeto público doinHibernate (sesión de sesión)
Lanza HibernateException, SQLException {
Consulta consulta = session.createQuery (HQL);
para (int i = 0; i <value.length; i ++) {
query.setParameter (i, valores [i]);
}
Resultado de la lista = query.setFirStresult (offset) .SetMaxResults (
PageSize) .list ();
resultado de devolución;
}
});
lista de devolución;
}
}
importar java.util.List;
import com.b510.album.dao.photodao;
import com.b510.album.enhance.hongtenhibernatedAosupport;
import com.b510.album.model.photo;
import com.b510.album.model.user;
/**
*
* @autor Hongten
*
*/
@SupessWarnings ("sin control")
clase pública fotodaohibernate extiende los implementos de HongtenhibernatedAosupport
Photodao {
/**
* Cargue la instancia de foto basada en el atributo de identificación
*
* @param ID
* El valor de atributo de identidad de la instancia de foto que debe cargarse
* @return La instancia de foto correspondiente al atributo de identificación especificado
*/
Public Photo Get (ID de entero) {
return (foto) gethibernateTemplate (). Get (Photo.Class, ID);
}
/**
* Persistir la instancia de foto especificada
*
* @param foto
* Instancia fotográfica que necesita ser persistida
* @return el valor del atributo de identidad después de persistir la instancia de foto
*/
Public Integer Save (foto foto) {
return (entero) gethibernateTemplate (). Save (Photo);
}
/**
* Modificar la instancia de foto especificada
*
* @param foto
* Instancia de foto que debe modificarse
*/
Public void actualización (foto foto) {
gethibernateTemplate (). Update (foto);
}
/**
* Eliminar la instancia de foto especificada
*
* @param foto
* Instancia fotográfica que debe eliminarse
*/
Public void eliminar (foto foto) {
gethibernateTemplate (). Eliminar (foto);
}
/**
* Eliminar instancia de foto basada en el atributo de identificación
*
* @param ID
* El valor del atributo de identificación de la instancia de foto que debe eliminarse
*/
public void Delete (ID de entero) {
gethibernateTemplate (). Eliminar (Get (id));
}
/**
* Consulta todas las instancias de fotos
*
* @return todas las instancias de fotos en la base de datos
*/
Lista pública <Toto> findall () {
return (list <toto>) gethibernateTemplate (). Find ("De Photo");
}
/**
* Fotos de consulta pertenecientes a usuarios especificados y realizar control de paginación
*
* @param usuario
* Consulta al usuario cuya foto pertenece a
* @param pageno
*Página especificada para ser consultado
* @return la foto consultada
*/
Lista pública <Toto> FindByUser (usuario de usuario, int pageno) {
int offset = (Pageno - 1) * Page_Size;
// devolver los resultados de la consulta de paginación
return (list <toto>) findByPage ("De la foto B donde B.User =?", Usuario,
offset, page_size);
}
}
importar java.util.List;
import com.b510.album.dao.userdao;
import com.b510.album.enhance.hongtenhibernatedAosupport;
import com.b510.album.model.user;
/**
*
* @autor Hongten
*
*/
@SupessWarnings ("sin control")
UserDaoHibernate de clase pública extiende los implementos de HongtenhibernatedAosupport
Userdao {
/**
* Cargar instancia de usuario basada en el atributo de identificación
*
* @param ID
* El valor de atributo de identidad de la instancia del usuario que debe cargarse
* @return instancia de usuario correspondiente al atributo de identificación especificado
*/
Public User Get (ID de entero) {
return (usuario) gethibernateTemplate (). get (user.class, id);
}
/**
* Persistir la instancia de usuario especificada
*
* @param usuario
* Instancia de usuario que debe persistir
* @return el valor del atributo de identidad después de persistir la instancia del usuario
*/
Public Integer Save (usuario de usuario) {
return (entero) gethibernateTemplate (). Guardar (usuario);
}
/**
* Modificar la instancia de usuario especificada
*
* @param usuario
* La instancia del usuario que necesita ser modificada
*/
Public void Update (usuario de usuario) {
gethibernateTemplate (). update (usuario);
}
/**
* Eliminar la instancia de usuario especificada
*
* @param usuario
* Instancia de usuario que debe eliminarse
*/
public void Eliminar (usuario de usuario) {
gethibernateTemplate (). Eliminar (usuario);
}
/**
* Eliminar instancia de usuario basada en el atributo de identificación
*
* @param ID
* El valor del atributo de identificación de la instancia del usuario que debe eliminarse
*/
public void Delete (ID de entero) {
gethibernateTemplate (). Eliminar (Get (id));
}
/**
* Consulta todas las instancias de usuario
*
* @return todas las instancias de usuario en la base de datos
*/
Lista pública <serem> findall () {
return (list <serer>) gethibernateTemplate (). Find ("From User");
}
/**
* Encuentra usuarios basados en el nombre de usuario
*
* @param nombre
* El nombre de usuario del usuario a encontrar
* @return el usuario encontrado
*/
Usuario público FindByName (nombre de cadena) {
List <Serem> Users = (List <Ser Usem>) GethibernateTeMplate (). Find (
"Del usuario u donde u.name =?", nombre);
if (users! = null && users.size () == 1) {
devolver ussers.get (0);
}
devolver nulo;
}
}
importar java.util.List;
import com.b510.album.model.photo;
import com.b510.album.model.user;
/**
* Interfaz Photodao
*
* @autor Hongten
*
*/
interfaz pública Photodao {
// Use constantes para controlar el número de fotos que se muestran en cada página
final int page_size = 8;
/**
* Cargue la instancia de foto basada en el atributo de identificación
*
* @param ID
* El valor de atributo de identidad de la instancia de foto que debe cargarse
* @return La instancia de foto correspondiente al atributo de identificación especificado
*/
Photo Get (ID de entero);
/**
* Persistir la instancia de foto especificada
*
* @param foto
* Instancia fotográfica que necesita ser persistida
* @return el valor del atributo de identidad después de persistir la instancia de foto
*/
Integer Guardar (foto foto);
/**
* Modificar la instancia de foto especificada
*
* @param foto
* Instancia fotográfica que debe modificarse
*/
Actualización vacía (foto foto);
/**
* Eliminar la instancia de foto especificada
*
* @param foto
* Instancia fotográfica que debe eliminarse
*/
Vacío eliminar (foto foto);
/**
* Eliminar instancia de foto basada en el atributo de identificación
*
* @param ID
* El valor del atributo de identificación de la instancia de foto que debe eliminarse
*/
void eliminar (ID de entero);
/**
* Consulta todas las instancias de fotos
*
* @return todas las instancias de fotos en la base de datos
*/
Lista <foto> findall ();
/**
* Fotos de consulta pertenecientes a usuarios especificados y realizar control de paginación
*
* @param usuario
* Consulta al usuario cuya foto pertenece a
* @param pageno
*Página especificada para ser consultado
* @return la foto consultada
*/
Lista <Toto> FindByUser (usuario de usuario, int pageno);
}
importar java.util.List;
import com.b510.album.model.user;
/**
* Interfaz de userdao
*
* @autor Hongten
*
*/
interfaz pública userdao {
/**
* Cargar instancia de usuario basada en el atributo de identificación
*
* @param ID
* El valor de atributo de identidad de la instancia del usuario que debe cargarse
* @return instancia de usuario correspondiente al atributo de identificación especificado
*/
Get Get (ID de entero);
/**
* Persistir la instancia de usuario especificada
*
* @param usuario
* Instancia de usuario que debe persistir
* @return el valor del atributo de identidad después de persistir la instancia del usuario
*/
Integer Guardar (usuario de usuario);
/**
* Modificar la instancia de usuario especificada
*
* @param usuario
* La instancia del usuario que necesita ser modificada
*/
Actualización nula (usuario del usuario);
/**
* Eliminar la instancia de usuario especificada
*
* @param usuario
* Instancia de usuario que debe eliminarse
*/
void eliminar (usuario de usuario);
/**
* Eliminar instancia de usuario basada en el atributo de identificación
*
* @param ID
* El valor del atributo de identificación de la instancia del usuario que debe eliminarse
*/
void eliminar (ID de entero);
/**
* Consulta todas las instancias de usuario
*
* @return todas las instancias de usuario en la base de datos
*/
Lista <serem> findall ();
/**
* Encuentra usuarios basados en el nombre de usuario
*
* @param nombre
* El nombre de usuario del usuario a encontrar
* @return el usuario encontrado
*/
Usuario findByName (nombre de cadena);
}
Dado que el proyecto se ve relativamente grande después de agregar el paquete JAR, el paquete JAR se cancela aquí.
El siguiente es el archivo adjunto : AJAX_JQUERY_ALBUM_JB51NET.RAR (descarga del código fuente)