华清远见

您所在的位置:网站首页 excel知识梳理 华清远见

华清远见

2023-03-19 13:26| 来源: 网络整理| 查看: 265

java servlet servlet介绍

Servlet(Server Applet)是Java Servlet的简称,称为小服务程序或服务连接器,用Java编写的服务器端程序,具有独立于平台和协议的特性,主要功能在于交互式地浏览和生成数据,生成动态Web内容。

狭义的Servlet是指Java语言实现的一个接口,广义的Servlet是指任何实现了这个Servlet接口的类,一般情况下,人们将Servlet理解为后者。Servlet运行于支持Java的应用服务器中。从原理上讲,Servlet可以响应任何类型的请求,但绝大多数情况下Servlet只用来扩展基于HTTP协议的Web服务器。

最早支持Servlet标准的是JavaSoft的Java Web Server,此后,一些其它的基于Java的Web服务器开始支持标准的Servlet。

servlet的使用

关于servlet的使用,我们以创建一个操作数据库的项目为例来说明

项目的创建

项目名字随便,但需要注意Archetype需选择webapp项目

在webapp\WEB-INF\ 路径下面找到web.xml文件,

需要注意系统生成的web.xml文件版本是否过低

可在File》Project Structure》Project Setting》Modules 下图位置配置

在pom.xml文件中导入依赖

在下图位置配置tomcat

点击加号找到tamcat配置

项目开发

在java文件下建立好如下各种包

entity:用来写实体类

dao:用来写操作数据库的方法(增删改查)

service:用来引用dao中的各种方法

action:引用service,跳转到指定页面,接收页面传过来的数据,进行计算处理

util:写链接数据库的方法

entity package entity; import java.util.Date; public class Employee { private Integer eid; private String ename; private Date etime; private Integer esalary; public String ejob; private String edept; private String enote; private String eimg; private Integer did; public Employee() { } @Override public String toString() { return "Employee{" + "eid=" + eid + ", ename='" + ename + '\'' + ", etime=" + etime + ", esalary=" + esalary + ", ejob='" + ejob + '\'' + ", edept='" + edept + '\'' + ", enote='" + enote + '\'' + ", eimg='" + eimg + '\'' + ", did=" + did + '}'; } public Integer getEid() { return eid; } public void setEid(Integer eid) { this.eid = eid; } public String getEname() { return ename; } public void setEname(String ename) { this.ename = ename; } public Date getEtime() { return etime; } public void setEtime(Date etime) { this.etime = etime; } public Integer getEsalary() { return esalary; } public void setEsalary(Integer esalary) { this.esalary = esalary; } public String getEjob() { return ejob; } public void setEjob(String ejob) { this.ejob = ejob; } public String getEdept() { return edept; } public void setEdept(String edept) { this.edept = edept; } public String getEnote() { return enote; } public void setEnote(String enote) { this.enote = enote; } public String getEimg() { return eimg; } public void setEimg(String eimg) { this.eimg = eimg; } public Integer getDid() { return did; } public void setDid(Integer did) { this.did = did; } }

写好各种属性,get/set方法,创建构造函数,toString方法

util public static Connection getConnection(String db,String user,String pwd){ try { Class.forName("com.mysql.cj.jdbc.Driver"); } catch (ClassNotFoundException e) { e.printStackTrace(); return null; } String url = "jdbc:mysql://localhost:3306/"+db+"?serverTimeZone=Asia/Shanghai"; try { return DriverManager.getConnection(url,user,pwd); } catch (SQLException e) { e.printStackTrace(); return null; } } public static void close(ResultSet rs, PreparedStatement ps,Connection con){ if(rs!=null){ try { rs.close(); } catch (SQLException e) { e.printStackTrace(); } } if (ps!=null){ try { ps.close(); } catch (SQLException e) { e.printStackTrace(); } } if(con!=null){ try { con.close(); } catch (SQLException e) { e.printStackTrace(); } } }

提供数据库连接和关闭的方法,提供参数的不同,可以连接不同的数据库

dao public class EmployeeDao { //根据用户ID查询用户,查到返回对象,查不到返回null public Employee selectByEmployeeId(Integer eid) { Connection con = JDBCUtil.getConnection("empdb", "root", "123456"); String sql = "select * from employee where e_id = "+eid; PreparedStatement ps = null; ResultSet rs = null; try { ps = con.prepareStatement(sql); rs = ps.executeQuery(); if (rs.next()) { Employee employee = new Employee(); employee.setEid(rs.getInt(1)); employee.setEname(rs.getString(2)); employee.setEtime(rs.getDate(3)); employee.setEsalary(rs.getInt(4)); employee.setEjob(rs.getString(5)); employee.setEdept(rs.getString(6)); employee.setEnote(rs.getString(7)); employee.setEimg(rs.getString(8)); employee.setDid(rs.getInt(9)); return employee; } } catch (SQLException e) { e.printStackTrace(); } finally { JDBCUtil.close(rs, ps, con); } return null; } //增加 public int insertEmployee(Employee employee) { Connection con = JDBCUtil.getConnection("empdb", "root", "123456"); String sql = "insert into employee values(0,?,?,?,?,?,?,?,?)"; PreparedStatement ps = null; try { ps = con.prepareStatement(sql); ps.setString(1, employee.getEname()); ps.setDate(2, new Date(employee.getEtime().getTime())); ps.setInt(3, employee.getEsalary()); ps.setString(4, employee.getEjob()); ps.setString(5, employee.getEdept()); ps.setString(6, employee.getEnote()); ps.setString(7, employee.getEimg()); ps.setInt(8, employee.getDid()); int i = ps.executeUpdate(); return i; } catch (SQLException e) { e.printStackTrace(); } finally { JDBCUtil.close(null, ps, con); } return 0; } //删除 public Integer deleteByeid(Integer eid) { Connection con = JDBCUtil.getConnection("empdb", "root", "123456"); String sql = "delete from employee where e_id =" + eid; PreparedStatement ps = null; try { ps = con.prepareStatement(sql); int i = ps.executeUpdate(); return i; } catch (SQLException e) { e.printStackTrace(); } finally { JDBCUtil.close(null, ps, con); } return 0; } //修改 public Integer updateByeid(Employee employee) { Connection con = JDBCUtil.getConnection("empdb", "root", "123456"); String sql = "update employee set e_name=?,e_time=?,e_salary=?,e_job=?,e_dept=?,e_note=?,e_img=?,d_id=? where e_id=?"; PreparedStatement ps = null; try { ps = con.prepareStatement(sql); ps.setString(1, employee.getEname()); ps.setDate(2, new Date(employee.getEtime().getTime())); ps.setInt(3, employee.getEsalary()); ps.setString(4, employee.getEjob()); ps.setString(5, employee.getEdept()); ps.setString(6, employee.getEnote()); ps.setString(7, employee.getEimg()); ps.setInt(8, employee.getDid()); ps.setInt(9, employee.getEid()); int i = ps.executeUpdate(); return i; } catch (SQLException e) { e.printStackTrace(); } finally { JDBCUtil.close(null, ps, con); } return null; } //4.查询全部 public List selectAllEmployee() { Connection con = JDBCUtil.getConnection("empdb", "root", "123456"); String sql = "select * from employee"; List employees = new ArrayList(); PreparedStatement ps = null; ResultSet rs = null; try { ps = con.prepareStatement(sql); rs = ps.executeQuery(); while (rs.next()) { Employee employee = new Employee(); employee.setEid(rs.getInt(1)); employee.setEname(rs.getString(2)); employee.setEtime(rs.getDate(3)); employee.setEsalary(rs.getInt(4)); employee.setEjob(rs.getString(5)); employee.setEdept(rs.getString(6)); employee.setEnote(rs.getString(7)); employee.setEimg(rs.getString(8)); employee.setDid(rs.getInt(9)); employees.add(employee); } } catch (SQLException e) { e.printStackTrace(); } finally { JDBCUtil.close(rs, ps, con); } return employees; } } service public class EmployeeService { EmployeeDao dao = new EmployeeDao(); public Boolean register(Employee employee) { Integer i = dao.insertEmployee(employee); if (i > 0) { return true; } else { return false; } } public List queryAll() { return dao.selectAllEmployee(); } public Employee query(Integer eid) { Employee employee = dao.selectByEmployeeId(eid); return employee; } public Boolean update(Employee employee) { Integer i = dao.updateByeid(employee); return i == 0 || i == null ? false : true; } public Boolean delete(int eid) { Integer i = dao.deleteByeid(eid); return i == 0 || i == null ? false : true; } }

换取dao中不同方法的返回值,封装成方法,方便action调用

action public class EmployeeServlet extends HttpServlet { @Override protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { req.setCharacterEncoding("utf-8"); resp.setContentType("text/html;charset=utf-8"); String servletPath = req.getServletPath(); PrintWriter writer = resp.getWriter(); EmployeeService service = new EmployeeService(); if (servletPath.equals("/add.emp")) { String ename = req.getParameter("ename"); String etime = req.getParameter("etime"); String esalary = req.getParameter("esalary"); String ejob = req.getParameter("ejob"); String edept = req.getParameter("edept"); String enote = req.getParameter("enote"); String eimg = req.getParameter("eimg"); String did = req.getParameter("did"); Employee employee = new Employee(); employee.setEname(ename); if (etime != null) { employee.setEtime(Date.valueOf(etime)); } if (esalary != null) { employee.setEsalary(Integer.valueOf(esalary)); } employee.setEjob(ejob); employee.setEdept(edept); employee.setEnote(enote); employee.setEimg(eimg); if (did != null) { employee.setDid(Integer.valueOf(did)); } Boolean aBoolean = service.register(employee); if (aBoolean==false){ req.setAttribute("msg","添加失败"); RequestDispatcher rd = req.getRequestDispatcher("./emp/info.jsp"); rd.forward(req,resp); }else { resp.sendRedirect("list.emp"); } } else if (servletPath.equals("/delete.emp")) { String eid = req.getParameter("eid"); if (eid == null) { req.setAttribute("msg", "只能根据id删除数据"); RequestDispatcher rd = req.getRequestDispatcher("./emp/info.jsp"); rd.forward(req, resp); } else { Boolean aBoolean = service.delete(Integer.valueOf(eid)); if (aBoolean == false) { req.setAttribute("msg", "删除失败"); RequestDispatcher rd = req.getRequestDispatcher("./emp/info.jsp"); rd.forward(req, resp); } else { //删除成功 转发到 //req.getRequestDispatcher("list.do").forward(req, resp); //重定向 -- sendRedirect resp.sendRedirect("list.emp"); } } } else if (servletPath.equals("/toedit.emp")) { //根据bookId,查询一本书的信息,然后把书的信息转发到update.jsp页面 String eid = req.getParameter("eid");//说明请求参数中需要传输bookId到这里 if (eid != null) { Employee employee = service.query(Integer.valueOf(eid)); if (employee == null) { resp.getWriter().write("参数错误,查询不到书的信息"); resp.getWriter().write("查询员工信息"); } else { //转发 req.setAttribute("emp", employee);//a. 把数据保存在request对象中 RequestDispatcher dispatcher = req.getRequestDispatcher("./emp/update.jsp");//b.获取转发对象,设置转发的路径 dispatcher.forward(req, resp);//c.转发 } } else { resp.getWriter().write("参数错误"); resp.getWriter().write("查询员工信息"); } } else if (servletPath.equals("/edit.emp")) { String eid = req.getParameter("eid"); String ename = req.getParameter("ename"); String etime = req.getParameter("etime"); String esalary = req.getParameter("esalary"); String ejob = req.getParameter("ejob"); String edept = req.getParameter("edept"); String enote = req.getParameter("enote"); String eimg = req.getParameter("eimg"); String did = req.getParameter("did"); Employee employee = new Employee(); if (eid != null) { employee.setEid(Integer.valueOf(eid)); } if (ename != null) { employee.setEname(ename); } if (etime != null) { employee.setEtime(Date.valueOf(etime)); } if (esalary != null) { employee.setEsalary(Integer.valueOf(esalary)); } employee.setEjob(ejob); employee.setEdept(edept); employee.setEnote(enote); employee.setEimg(eimg); if (did != null) { employee.setDid(Integer.valueOf(did)); } Boolean update = service.update(employee); //3.转发到success.jsp页面 String msg = ""; if (update) { //msg = "更新成功"; 重定向 resp.sendRedirect("list.emp"); } else { req.setAttribute("msg", "更新失败"); RequestDispatcher rd = req.getRequestDispatcher("./emp/info.jsp"); rd.forward(req, resp); } } else if (servletPath.equals("/list.emp")) { //servlet中查询数据 List employees = service.queryAll(); //把数据bookInfos,转发到jsp页面,jsp页面显示数据 //把需要转发到jsp页面上的数据,保存在request对象中 req.setAttribute("emps", employees); //当前这个请求对应的路径:http://localhost:8080/employee/list.do RequestDispatcher dispatcher = req.getRequestDispatcher("./emp/show.jsp"); dispatcher.forward(req, resp);// - forward } else { req.setAttribute("msg","输入的路径有错误!"); RequestDispatcher rd = req.getRequestDispatcher("./emp/info.jsp"); rd.forward(req,resp); } } }

使用req.getServletPath()获取浏览器的url地址

通过if语句进行判断,实现不同请求的数据处理

web.xml文件配置 employee action.EmployeeServlet employee *.emp 增加数据页面 登记员工 登记员工 请输入员工名: 请输入入职时间: 请输入薪资: 请输入工作岗位: 请输入所在部门: 员工介绍: 员工照片路径: 请输入部门ID: 修改数据页面 登记员工 登记员工 请输入员工名: 请输入入职时间: 请输入薪资: 请输入工作岗位: 请输入所在部门: 员工介绍: 员工照片路径: 请输入部门ID: //获取url地址,然后截取出数据,最后把数据设置到输框中 let url = window.location.href; url= decodeURI(url); let args = url.substring(url.indexOf("?")+1,url.length); console.log(args) let arrs = args.split("&") $("input").eq(0).val(arrs[0].split("=")[1]); $("input").eq(1).val(arrs[1].split("=")[1]); $("input").eq(2).val(arrs[2].split("=")[1]); $("input").eq(3).val(arrs[3].split("=")[1]); $("input").eq(4).val(arrs[4].split("=")[1]); $("input").eq(5).val(arrs[5].split("=")[1]); $("input").eq(6).val(arrs[6].split("=")[1]); $("input").eq(7).val(arrs[7].split("=")[1]); $("input").eq(8).val(arrs[8].split("=")[1]); 模糊匹配

在web.xml文件配置时,url-pattern用来配置浏览器的请求路径

模糊匹配便于配置多个请求的路径

精确匹配

在 中配置的项必须与url完全精确匹配。

MyServlet filter.PingLunFilter MyServlet /pinglun.emp

必须以http://localhost:8080/employee/pinglun.emp这个路径才能访问到

其中localhost是ip地址,这里指127.0.0.1。 8080是端口号。employee是tomcat配置的Application Context

路径匹配

以“/”字符开头,并以“/*”结尾的字符串用于路径匹配

MyServlet /emp/*

路径以/emp/开始,后面的路径可以任意。比如下面的url都会被匹配。

扩展名匹配

以“*.”开头的字符串被用于扩展名匹配

MyServlet *.jsp

任何后缀为.jsp的都能匹配到

缺省匹配

任意路径都可以匹配

匹配优先级

精确 》 路径 》 拓展名 》缺省

先找精确匹配,如果找不到在找路径匹配,在找不到就找扩展名匹配。

以上三种匹配方式都找不到,才会使用缺省匹配



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3