今天终于是把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");
}
}
在这里我写了一个文件上传的功能,这里的路径采用的是静态的,但是文件的名是采用唯一名字的方法生成的,这样子在上传的时候就不会出现重复的错误了。
整个工程:传送门