jsp+servlet的增删改查页面

今天终于是把java网页开发的基本东西都学完了,了解了java的基本操作。感觉java的环境还是很好的,有许多jar包可以使用,这样子就可以快速开发一个模块功能出来了。

这次我是自己写了一个从后台提取数据然后进行增删改查的操作。还有分页等功能。如下图:



这些数据都是直接从数据库直接提取出来的。这里的话,使用了三层架构的模式,将功能不同的层划分出来,这里用dao,service,servlet这三个,然后dao是负责与数据库打交道的,service是与服务器层打交道的,然后servlet的话是用来将界面与服务器端连接起来的。分完工后就可以开始做了。

划分的结构图如下:


这里面只讲解一下servlet的知识,毕竟其它的我在上次的几个文章有提及过这里就不详细说明了。

BaseServlet:

package com.d.cn.servlet;

import java.io.IOException;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;

import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class BaseServlet extends HttpServlet {
	
	@Override
	public void service(ServletRequest request, ServletResponse response)
			throws ServletException, IOException {
		//服务器乱码
		request.setCharacterEncoding("utf-8");
		//客户端乱码
		response.setCharacterEncoding("utf-8");
		//响应到客户端头部乱码
		response.setContentType("text/html;charset=utf-8");
		
		String action = request.getParameter("action");
		if(action==null || "".equals(action.trim())){
			System.out.println("feifa");
			return;
		}
		
		Method method;
		try {
			method = this.getClass().getMethod(action, HttpServletRequest.class,HttpServletResponse.class);
			method.invoke(this, request,response);
		} catch (NoSuchMethodException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (SecurityException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (IllegalAccessException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (IllegalArgumentException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (InvocationTargetException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		
	}
}

这里采用的是反射机制,所以这里的函数调用可以直接在继承类里面写,然后这个父类自动帮你加载这些函数执行,这样子就可以在url获取到ac函数,就直接进去ac函数执行了,简化了操作。

UserServlet:

package com.d.cn.servlet;

import java.io.File;
import java.io.IOException;
import java.io.PrintWriter;
import java.net.URLDecoder;
import java.util.List;
import java.util.UUID;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

import org.apache.commons.fileupload.FileItem;
import org.apache.commons.fileupload.FileItemFactory;
import org.apache.commons.fileupload.disk.DiskFileItemFactory;
import org.apache.commons.fileupload.servlet.ServletFileUpload;

import com.d.cn.dao.entity.User;
import com.d.cn.dao.impl.UserDaoImpl;
import com.d.cn.service.impl.UserServiceImpl;
import com.d.cn.utils.Page;

public class UserServlet extends BaseServlet{
	UserServiceImpl userServiceImpl = new UserServiceImpl();
	public void login(HttpServletRequest request,HttpServletResponse response)
			throws ServletException,IOException{
		//1.收集数据
				String username = (String) request.getParameter("username");
				String password = (String) request.getParameter("password");
				
				//2.封装数据
				User user = new User();
				user.setName(username);
				user.setPassword(password);
				//3.调用API层
				User resultUser = userServiceImpl.getUserMsg(user);
				List<User> lUsers = userServiceImpl.listAll();
				//4.控制跳转
				HttpSession session = request.getSession();
				PrintWriter out = response.getWriter();
				
				if(resultUser!=null){
					
					session.setAttribute("username", username);
					session.setAttribute("ListAll", lUsers);
					request.getRequestDispatcher("welcome.jsp").forward(request, response);
					
				}else{
					out.println("<script type='text/javascript'>");
					out.println("alert('密码或账号错误!');");
					out.println("window.location.href='login.jsp';");
					out.println("</script>");
				}
	}
	public void add(HttpServletRequest request,HttpServletResponse response)
			throws ServletException,IOException{
		String id = null;
		String username = null;
		String sex = null;
		String password = null;
		String address = null;
		String picturePath = null;
		User user = new User();
		
		//请求信息中的内容是否是multipart类型
		boolean isMultipart = ServletFileUpload.isMultipartContent(request);
		//上传文件的存储路径(服务器文件系统上的绝对文件路径)
		String uploadFilePath = request.getSession().getServletContext().getRealPath("upload/" );
		System.out.println(uploadFilePath);
		if (isMultipart) {
			FileItemFactory factory = new DiskFileItemFactory();
			ServletFileUpload upload = new ServletFileUpload(factory);
			try {
				//解析form表单中所有文件
				List<FileItem> items = upload.parseRequest(request);
				for (FileItem fileItem : items) {
					if(fileItem.isFormField()){//普通表单字段
						String fieldName = fileItem.getFieldName();   //表单字段的name属性值
						if("name".equals(fieldName)){
							username = fileItem.getString("UTF-8");
						}
						if("sex".equals(fieldName)){
							sex = fileItem.getString("UTF-8");
						}
						if("password".equals(fieldName)){
							password = fileItem.getString("UTF-8");
						}
						if("address".equals(fieldName)){
							address = fileItem.getString("UTF-8");
						}
						if("id".equals(fieldName)){
							id = fileItem.getString("UTF-8");
						}
					}else{//文件表单字段
						String fileName = fileItem.getName();
						String extendName = fileName.substring(fileName.lastIndexOf('.'), fileName.length());
						String onlyOneName = UUID.randomUUID().toString();
						picturePath = onlyOneName+extendName;
						
						System.out.println(uploadFilePath+"\\"+picturePath);
						File saveFile = new File("D:\\JavaWork\\newPoj\\upload\\"+picturePath);
						
						fileItem.write(saveFile);
					}
				}
			} catch (Exception e) {
				e.printStackTrace();
			}
		}
		user.setId(Integer.parseInt(id));
		user.setName(username);
		user.setSex(sex);
		user.setPassword(password);
		user.setAddress(address);
		user.setPicturePath(picturePath);
		int row = -1;
		row = userServiceImpl.insert(user);
		if(row>0){
			response.sendRedirect("UserServlet?action=page");
		}
	}
	public void upd(HttpServletRequest request,HttpServletResponse response)
			throws ServletException,IOException{
		String id = request.getParameter("id");
		User user = new User();
		if(id!=null){
			user.setId(Integer.parseInt(id));
		}
		user.setName(request.getParameter("username"));
		user.setSex(request.getParameter("sex"));
		user.setPassword(request.getParameter("password"));
		user.setAddress(request.getParameter("address"));
		user.setPicturePath(request.getParameter("picturePath"));
		int row = -1;
		row = userServiceImpl.update(user);
		if(row>0){
			response.sendRedirect("UserServlet?action=page");
		}
	}
	public void del(HttpServletRequest request,HttpServletResponse response)
			throws ServletException,IOException{
		String id = request.getParameter("id");
		User user = new User();
		if(id!=null){
			user.setId(Integer.parseInt(id));
		}
		user.setName(request.getParameter("username"));
		user.setSex(request.getParameter("sex"));
		user.setPassword(request.getParameter("password"));
		user.setAddress(request.getParameter("address"));
		user.setPicturePath(request.getParameter("picturePath"));
		int row = -1;
		row = userServiceImpl.delete(user);
		if(row>0){
			response.sendRedirect("UserServlet?action=page");
		}
	}
	public List<User> listAll(HttpServletRequest request,HttpServletResponse response)
			throws ServletException,IOException{
		return userServiceImpl.listAll();
	}
	
	public void page(HttpServletRequest request,HttpServletResponse response)
			throws ServletException,IOException{
UserDaoImpl userDaoImpl = new UserDaoImpl();
		
		String currentPageStr = request.getParameter("currentPage");
		if(currentPageStr==null){
			currentPageStr = "1";
		}
		int currentPage = Integer.parseInt(currentPageStr);
		int pageSize = 3;
		Page<User> page = userDaoImpl.getPage(currentPage,pageSize);
		
		HttpSession session = request.getSession();
		session.setAttribute("page", page);
		

		response.sendRedirect("welcome.jsp");
	}
}

在这里我写了一个文件上传的功能,这里的路径采用的是静态的,但是文件的名是采用唯一名字的方法生成的,这样子在上传的时候就不会出现重复的错误了。

整个工程:传送门


  • 3
    点赞
  • 45
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值