jdbc03 使用servlet实现

时间:2021-11-05 17:07:31
<%@page import="cn.bdqn.bean.News"%>
<%@page import="cn.bdqn.service.impl.NewsServiceImpl"%>
<%@page import="cn.bdqn.service.NewsService"%>
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme() + "://"
+ request.getServerName() + ":" + request.getServerPort()
+ path + "/";
%>
<%-- 引入需要的jstl标签库--%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<!DOCTYPE HTML>
<html>
<head>
<base href="<%=basePath%>"> <title>My JSP 'index.jsp' starting page</title>
<meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="expires" content="0">
<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
<meta http-equiv="description" content="This is my page">
<style type="text/css">
<%--
表格中的数据 居中显示 --%> td {
text-align: center;
}
</style>
</head>
<%-- 需要引入了 外部javaBean --%>
<jsp:useBean id="service" class="cn.bdqn.service.impl.NewsServiceImpl" />
<jsp:useBean id="pageUtil" class="cn.bdqn.util.PageUtil" />
<body>
<form action="newsList.jsp" method="get">
<h1>显示新闻信息</h1>
<table border="1">
<tr>
<td>新闻编号</td>
<td>新闻标题</td>
<td>新闻作者</td>
<td>创建时间</td>
<td>操作</td>
</tr> <%
//获取分页的四要素
int pageSize = 3; //页大小
int pageIndex = 1; //当前页面
String num = request.getParameter("pageIndex");//获取pageIndex
if (num != null && num != "") { //因为第一次打开页面的时候 请求中 压根没有 pageIndex的属性
pageIndex = Integer.parseInt(num);
} else {
pageIndex = 1;
}
//给通用的工具类 赋值
pageUtil.setPageIndex(pageIndex);
pageUtil.setPageSize(pageSize);
pageUtil.setTotalCountSize(service.getTotalCountSize()); //总记录数
pageUtil.getTotalPageCount(); //获取总页数 List<News> news = service.getNewsByPageList(pageIndex, pageSize);
//把响应的数据放入作用域
request.setAttribute("news", news);
request.setAttribute("pageUtil", pageUtil);
%>
<c:forEach items="${news}" var="n" varStatus="s">
<c:if test="${s.count%2==0}">
<tr bgcolor="green">
</c:if>
<c:if test="${s.count%2!=0}">
<tr bgcolor="pink">
</c:if>
<td>${n.getId()}</td>
<td>${n.getTitle()}</td>
<td>${n.getAuthor()}</td>
<td>${n.getCreateDate()}</td>
<td><a href="update.jsp?id=${n.getId()}">修改</a>
</td>
</tr>
</c:forEach> <tr>
<td>当前页:${pageUtil.getPageIndex()}</td>
<td>总页数:${pageUtil.getTotalPageCount()}</td>
<td>总记录数${pageUtil.getTotalCountSize()}</td>
</tr> <%-- 引入需要的分页界面 --%>
<c:import url="page.jsp">
<c:param name="pageIndex" value="${pageUtil.pageIndex}"></c:param>
<c:param name="totalPageCount" value="${pageUtil.totalPageCount}"></c:param>
</c:import>
</table> </form>
</body>
</html>

修改后的newsList.jsp

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%> <%-- 引入需要的jstl标签库--%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<base href="<%=basePath%>"> <title>My JSP 'page.jsp' starting page</title> <meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="expires" content="0">
<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
<meta http-equiv="description" content="This is my page">
<script type="text/javascript">
function page(form,num){
//把传递来的num赋值给当前的页码
form.pageIndex.value=num;
form.submit();
} </script> </head> <body> <%-- 表单隐藏域 保存 当前页--%>
<input type="hidden" name="pageIndex">
<%--javaScript:伪协议 ! 不会跳转界面,只是让我们通过这个连接直接调用JavaScript代码 --%>
<tr>
<c:if test="${param.pageIndex>1}">
<td><a href="javaScript:page(document.forms[0],1)">首页</a></td>
<td><a href="javaScript:page(document.forms[0],${param.pageIndex-1})">上一页</a></td>
</c:if>
<%-- 如果当前页码小于总页数 --%>
<c:if test="${param.pageIndex <param.totalPageCount}">
<td><a href="javaScript:page(document.forms[0],${param.pageIndex+1})">下一页</a>
</td>
<td><a href="javaScript:page(document.forms[0],${param.totalPageCount})">最后一页</a>
</td>
</c:if>
<td><a href="addNews.jsp">新增</a></td>
</tr> </body>
</html>

公用的page.jsp

================使用servlet==========================

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<base href="<%=basePath%>"> <title>新闻信息的登录界面</title> <meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="expires" content="0">
<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
<meta http-equiv="description" content="This is my page">
<!--
<link rel="stylesheet" type="text/css" href="styles.css">
--> </head> <body>
<h1>登录界面</h1>
<%-- action="Login" Login必须在web.xml中又对应的url-pattern --%>
<form action="Login" method="post">
<table>
<tr>
<td>用户名:</td>
<td><input type="text" name="userName"/></td>
</tr>
<tr>
<td>密码:</td>
<td><input type="password" name="password"/></td>
</tr>
<tr>
<td></td>
<td><input type="submit" value="登录"/></td>
</tr>
</table>
</form>
</body>
</html>

修改login.jsp的action

public class LoginServlet extends HttpServlet { //处理登录请求的servlet

    public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
doPost(request, response); //交给 doPost()处理请求
} public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
System.out.println("进入了 LoginServlet");
request.setCharacterEncoding("utf-8");
//01.获取用户信息
String userName= request.getParameter("userName");
String password= request.getParameter("password");
User user=new User(); //把信息保存在 user中
user.setPassword(password);
user.setUserName(userName);
//02.从数据库取值
UserService service=new UserServiceImpl();
boolean flag= service.login(user);
if(flag){
//重定向到 新闻列表servlet 如果直接到新闻界面 是没有值的!
response.sendRedirect("NewsListServlet");
}else{
//重定向到 新闻登录界面
response.sendRedirect("login.jsp");
}
} }

创建LoginServlet

newsList.jsp修改后的代码

<%@page import="cn.bdqn.bean.News"%>
<%@page import="cn.bdqn.service.impl.NewsServiceImpl"%>
<%@page import="cn.bdqn.service.NewsService"%>
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme() + "://"
+ request.getServerName() + ":" + request.getServerPort()
+ path + "/";
%>
<%-- 引入需要的jstl标签库--%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<!DOCTYPE HTML>
<html>
<head>
<base href="<%=basePath%>"> <title>My JSP 'index.jsp' starting page</title>
<meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="expires" content="0">
<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
<meta http-equiv="description" content="This is my page">
<style type="text/css">
<%--
表格中的数据 居中显示 --%> td {
text-align: center;
}
</style>
</head>
<body>
<form action="NewsListServlet" method="get">
<h1>显示新闻信息</h1>
<table border="1">
<tr>
<td>新闻编号</td>
<td>新闻标题</td>
<td>新闻作者</td>
<td>创建时间</td>
<td>操作</td>
</tr> <c:forEach items="${news}" var="n" varStatus="s">
<c:if test="${s.count%2==0}">
<tr bgcolor="green">
</c:if>
<c:if test="${s.count%2!=0}">
<tr bgcolor="pink">
</c:if>
<td>${n.getId()}</td>
<td>${n.getTitle()}</td>
<td>${n.getAuthor()}</td>
<td>${n.getCreateDate()}</td>
<td><a href="update.jsp?id=${n.getId()}">修改</a>
</td>
</tr>
</c:forEach> <tr>
<td>当前页:${pageUtil.getPageIndex()}</td>
<td>总页数:${pageUtil.getTotalPageCount()}</td>
<td>总记录数${pageUtil.getTotalCountSize()}</td>
</tr> <%-- 引入需要的分页界面 --%>
<c:import url="page.jsp">
<c:param name="pageIndex" value="${pageUtil.pageIndex}"></c:param>
<c:param name="totalPageCount" value="${pageUtil.totalPageCount}"></c:param>
</c:import>
</table> </form>
</body>
</html>

把newsList.jsp中的java代码提取到NewsListServlet中

public class NewsListServlet extends HttpServlet {

    public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
doPost(request, response);
} public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
System.out.println("进入了 NewsListServlet");
PageUtil pageUtil=new PageUtil();
NewsService service =new NewsServiceImpl();
//获取分页的四要素
int pageSize = 3; //页大小
int pageIndex = 1; //当前页面
String num = request.getParameter("pageIndex");//获取pageIndex
if (num != null && num != "") { //因为第一次打开页面的时候 请求中 压根没有 pageIndex的属性
pageIndex = Integer.parseInt(num);
} else {
pageIndex = 1;
}
//给通用的工具类 赋值
pageUtil.setPageIndex(pageIndex);
pageUtil.setPageSize(pageSize);
pageUtil.setTotalCountSize(service.getTotalCountSize()); //总记录数
pageUtil.getTotalPageCount(); //获取总页数 List<News> news = service.getNewsByPageList(pageIndex, pageSize);
//把响应的数据放入作用域
request.setAttribute("news", news);
request.setAttribute("pageUtil", pageUtil);
//转发到newsList.jsp界面
request.getRequestDispatcher("/newsList.jsp").forward(request, response);
} }

NewsListServlet代码

<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5"
xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
<servlet>
<servlet-name>Login</servlet-name>
<servlet-class>cn.bdqn.servlet.LoginServlet</servlet-class>
</servlet>
<servlet>
<servlet-name>NewsListServlet</servlet-name>
<servlet-class>cn.bdqn.servlet.NewsListServlet</servlet-class>
</servlet> <servlet-mapping>
<servlet-name>Login</servlet-name>
<url-pattern>/Login</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>NewsListServlet</servlet-name>
<url-pattern>/NewsListServlet</url-pattern>
</servlet-mapping> <welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
</web-app>

web.xml文件中的配置

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<base href="<%=basePath%>"> <title>新闻信息新增界面</title> <meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="expires" content="0">
<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
<meta http-equiv="description" content="This is my page">
<!--
<link rel="stylesheet" type="text/css" href="styles.css">
-->
<%-- 引入我们需要的 富文本 编辑器 --%>
<script type="text/javascript" src="ckeditor/ckeditor.js"></script>
<style type="text/css">
div{
height:900px;
width:900px;
margin:auto;
padding: auto;
}
</style>
<script type="text/javascript">
<%--验证用户有没有选择 新闻类别 --%>
function check(){
var goryId= document.getElementById("goryId").value;
if(goryId==0){
alert("请选择新闻类别.....");
return false;
}
return true;
}
</script> </head>
<body>
<div>
<h1>新闻信息新增界面</h1>
<%-- action="NewsAddServlet" NewsAddServlet是web.xml文件中 url-pattern --%>
<form action="NewsAddServlet" enctype="multipart/form-data" method="post" onsubmit="return check()">
<table>
<tr>
<td>新闻分类:</td>
<td>
<select name="categoryId" id="goryId">
<option value="0">请选择新闻类别</option>
<option value="1">国内</option>
<option value="2">国际</option>
<option value="3">娱乐</option>
<option value="4">军事</option>
<option value="5">财经</option>
</select>
</td>
</tr>
<tr>
<td>新闻标题:</td>
<td><input type="text" name="title"/></td>
</tr>
<tr>
<td>新闻作者:</td>
<td><input type="text" name="author"/></td>
</tr> <tr>
<td>新闻摘要:</td>
<td><input type="text" name="summary"/></td>
</tr>
<tr>
<td>创建时间:</td>
<td><input type="date" name="createDate"/></td>
</tr>
<tr>
<td>选择文件:</td>
<td><input type="file" name="picPath"/></td>
</tr> <tr>
<td>新闻内容:</td>
<td><textarea class="ckeditor" name="content"> </textarea>
</td>
</tr>
<tr>
<td></td>
<td><input type="submit" value="新增"/></td>
</tr>
</table>
</form>
</div> </body>
</html>

修改addNews.jsp的action

public class NewsAddServlet extends HttpServlet { // 新闻的新增

    public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
doPost(request, response); // 默认执行doPost()
} public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
System.out.println("进入了NewsAddServlet");
News news = new News();
NewsService service = new NewsServiceImpl();
// 解决乱码问题
request.setCharacterEncoding("utf-8"); // 01.文件上传到 哪里去??? 我们必须指定用户的上传位置
String uploadFilePath = request.getSession().getServletContext()
.getRealPath("upload/");
// 不确定文件是否已经存在
File file = new File(uploadFilePath);
if (!file.exists()) {
// 不存在 创建
file.mkdirs();
}
// 02.判断前台的form表单是否带有文件
boolean flag = ServletFileUpload.isMultipartContent(request);
try {
if (flag) { // 如果是文件上传
/*
* 如果上传的文件比较小,则直接保存在内存中,速度快! 文件大的时候,以临时文件的形式,保存在电脑的临时文件夹中!
* 我们使用FileItemFactory 接口的对应 实现类 来完成 上传操作
*/
DiskFileItemFactory factory = new DiskFileItemFactory();
ServletFileUpload upload = new ServletFileUpload(factory);
// 能把请求中的所有元素进行获取! 返回一个FileItem的集合
List<FileItem> items = upload.parseRequest(request);
// 获取Iterator迭代器
Iterator<FileItem> iter = items.iterator();
// 事先给 没给元素定义一个名称
String fileName = "";
while (iter.hasNext()) { // 遍历出每一个元素
FileItem item = iter.next();
if (item.isFormField()) { // 如果是普通的元素
fileName = item.getFieldName(); // 获取普通元素的名称
if (fileName.equals("title")) {
news.setTitle(item.getString("utf-8"));
} else if (fileName.equals("author")) {
news.setAuthor(item.getString("utf-8"));
} else if (fileName.equals("content")) {
news.setContent(item.getString("utf-8"));
} else if (fileName.equals("summary")) {
news.setSummary(item.getString("utf-8"));
} else if (fileName.equals("createDate")) {
news.setCreateDate(new SimpleDateFormat(
"yyyy-MM-dd").parse(item.getString("utf-8")));
} else if (fileName.equals("categoryId")) {
news.setCategoryId(Integer.parseInt(item
.getString("utf-8")));
}
} else { // 操作上传的文件
String fimeName = item.getName(); // 获取上传文件的名称
if (fimeName != null && fimeName != "") {
File fullFile = new File(fimeName);
// 相当于在uploadFilePath 这个文件下面
// 创建一个文件fullFile.getName()
File saveFile = new File(uploadFilePath,
fullFile.getName());
// 写入 真正的上传
try {
item.write(saveFile);
} catch (Exception e) {
e.printStackTrace();
}
news.setPicPath(fullFile.getName()); // 给news的文件路径赋值
}
}
}
}
} catch (NumberFormatException e) {
e.printStackTrace();
} catch (FileUploadException e) {
e.printStackTrace();
} catch (ParseException e) {
e.printStackTrace();
}
service.addNews(news); // 调用底层代码 进行新增操作
// 新增成功了之后 需要返回到新闻列表界面 转发 会引起 表单的重复提交
// request.getRequestDispatcher("newsList.jsp").forward(request,
// response);
// 重定向 NewsListServlet 拿到值 放入作用于中 才能 去newsList.jsp页面
response.sendRedirect("NewsListServlet");
}
}

创建NewsAddServlet

=================实现新闻的修改===============================

<%@page import="cn.bdqn.bean.News"%>
<%@page import="cn.bdqn.service.impl.NewsServiceImpl"%>
<%@page import="cn.bdqn.service.NewsService"%>
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme() + "://"
+ request.getServerName() + ":" + request.getServerPort()
+ path + "/";
%>
<%-- 引入需要的jstl标签库--%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<!DOCTYPE HTML>
<html>
<head>
<base href="<%=basePath%>"> <title>My JSP 'index.jsp' starting page</title>
<meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="expires" content="0">
<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
<meta http-equiv="description" content="This is my page">
<style type="text/css">
<%--
表格中的数据 居中显示 --%> td {
text-align: center;
}
</style>
</head>
<body>
<form action="NewsListServlet" method="get">
<h1>显示新闻信息</h1>
<table border="1">
<tr>
<td>新闻编号</td>
<td>新闻标题</td>
<td>新闻作者</td>
<td>创建时间</td>
<td>操作</td>
</tr> <c:forEach items="${news}" var="n" varStatus="s">
<c:if test="${s.count%2==0}">
<tr bgcolor="green">
</c:if>
<c:if test="${s.count%2!=0}">
<tr bgcolor="pink">
</c:if>
<td>${n.getId()}</td>
<td>${n.getTitle()}</td>
<td>${n.getAuthor()}</td>
<td>${n.getCreateDate()}</td>
<td><a href="FindNewsServlet?id=${n.getId()}">修改</a>
<a href="NewsDelServlet?id=${n.getId()}">删除</a>
</td>
</tr>
</c:forEach> <tr>
<td>当前页:${pageUtil.getPageIndex()}</td>
<td>总页数:${pageUtil.getTotalPageCount()}</td>
<td>总记录数${pageUtil.getTotalCountSize()}</td>
</tr> <%-- 引入需要的分页界面 --%>
<c:import url="page.jsp">
<c:param name="pageIndex" value="${pageUtil.pageIndex}"></c:param>
<c:param name="totalPageCount" value="${pageUtil.totalPageCount}"></c:param>
</c:import>
</table> </form>
</body>
</html>

修改后的newsList界面

public class FindNewsServlet extends HttpServlet { // 根据id查询到指定的新闻

    public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
doPost(request, response); // doPost()
} public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
NewsService service = new NewsServiceImpl();
News news = service.findById(request.getParameter("id"));
// 放入作用域
request.setAttribute("news", news);
// 转发到update.jsp页面
request.getRequestDispatcher("/update.jsp").forward(request, response);
} }

点击修改按钮后进入的FindNewsServlet

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>
<%-- 引入需要的jstl标签库--%>
<%@ taglib prefix="f" uri="http://java.sun.com/jsp/jstl/fmt" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<base href="<%=basePath%>"> <title>新闻信息修改界面</title> <meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="expires" content="0">
<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
<meta http-equiv="description" content="This is my page">
<!--
<link rel="stylesheet" type="text/css" href="styles.css">
-->
<%-- 引入我们需要的 富文本 编辑器 --%>
<script type="text/javascript" src="ckeditor/ckeditor.js"></script>
</head> <body>
<h1>新闻信息修改界面</h1>
<form action="NewsUpdateServlet" enctype="multipart/form-data" method="post" onsubmit="return check()">
<table>
<tr>
<td>新闻分类:</td>
<td>
<select name="categoryId" id="goryId">
<option value="0">请选择新闻类别</option>
<%-- 下拉框内容的回显 --%>
<option <c:if test="${news.categoryId==1}">selected</c:if> value="1">国内</option>
<option <c:if test="${news.categoryId==2}">selected</c:if> value="2">国际</option>
<option <c:if test="${news.categoryId==3}">selected</c:if> value="3">娱乐</option>
<option <c:if test="${news.categoryId==4}">selected</c:if> value="4">军事</option>
<option <c:if test="${news.categoryId==5}">selected</c:if>value="5">财经</option>
</select>
</td>
</tr>
<tr>
<%-- 页可以使用表单的隐藏域 --%>
<td>新闻编号:</td>
<td><input type="text" value="${news.id}" name="id" readonly="readonly"/></td>
</tr>
<tr>
<td>新闻标题:</td>
<td><input type="text" value="${news.title}" name="title"/></td>
</tr>
<tr>
<td>新闻作者:</td>
<td><input type="text" value="${news.author}" name="author"/></td>
</tr> <tr>
<td>新闻摘要:</td>
<td><input type="text" value="${news.summary}" name="summary"/></td>
</tr>
<tr>
<td>创建时间:</td>
<td><input type="text" value="<f:formatDate value='${news.createDate}' pattern='yyyy-MM-dd'/>" name="createDate"/> </td>
</tr>
<tr>
<td>选择文件:</td>
<td><input type="file" name="picPath"/></td>
</tr> <tr>
<td>新闻内容:</td>
<td><textarea class="ckeditor" name="content">
${news.content}
</textarea>
</td>
</tr>
<tr>
<td></td>
<td><input type="submit" value="修改"/></td>
</tr>
</table>
</form>
</div>
</body>
</html>

修改后的update.jsp页面

public class NewsUpdateServlet extends HttpServlet { // 修改新闻

    public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
doPost(request, response); // doPost()
} public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
System.out.println("进入了NewsUpdateServlet");
News news = new News();
NewsService service = new NewsServiceImpl();
// 解决乱码问题
request.setCharacterEncoding("utf-8");
// 01.文件上传到 哪里去??? 我们必须指定用户的上传位置
String uploadFilePath = request.getSession().getServletContext()
.getRealPath("upload/");
// 不确定文件是否已经存在
File file = new File(uploadFilePath);
if (!file.exists()) {
// 不存在 创建
file.mkdirs();
}
// 02.判断前台的form表单是否带有文件
boolean flag = ServletFileUpload.isMultipartContent(request);
try {
if (flag) { // 如果是文件上传
/*
* 如果上传的文件比较小,则直接保存在内存中,速度快! 文件大的时候,以临时文件的形式,保存在电脑的临时文件夹中!
* 我们使用FileItemFactory 接口的对应 实现类 来完成 上传操作
*/
DiskFileItemFactory factory = new DiskFileItemFactory();
ServletFileUpload upload = new ServletFileUpload(factory);
// 能把请求中的所有元素进行获取! 返回一个FileItem的集合
List<FileItem> items = upload.parseRequest(request);
// 获取Iterator迭代器
Iterator<FileItem> iter = items.iterator();
// 事先给 没给元素定义一个名称
String fileName = "";
while (iter.hasNext()) { // 遍历出每一个元素
FileItem item = iter.next();
if (item.isFormField()) { // 如果是普通的元素
fileName = item.getFieldName(); // 获取普通元素的名称
if (fileName.equals("title")) {
news.setTitle(item.getString("utf-8"));
} else if (fileName.equals("author")) {
news.setAuthor(item.getString("utf-8"));
} else if (fileName.equals("content")) {
news.setContent(item.getString("utf-8"));
} else if (fileName.equals("summary")) {
news.setSummary(item.getString("utf-8"));
} else if (fileName.equals("createDate")) {
news.setCreateDate(new SimpleDateFormat(
"yyyy-MM-dd").parse(item.getString("utf-8")));
} else if (fileName.equals("categoryId")) {
news.setCategoryId(Integer.parseInt(item
.getString("utf-8")));
} else if (fileName.equals("id")) { // 设置新闻编号
news.setId(Integer.parseInt(item.getString("utf-8")));
}
} else { // 操作上传的文件
String fimeName = item.getName(); // 获取上传文件的名称
if (fimeName != null && fimeName != "") {
File fullFile = new File(fimeName);
// 相当于在uploadFilePath 这个文件下面
// 创建一个文件fullFile.getName()
File saveFile = new File(uploadFilePath,
fullFile.getName());
// 写入 真正的上传
try {
item.write(saveFile);
} catch (Exception e) {
e.printStackTrace();
}
news.setPicPath(fullFile.getName()); // 给news的文件路径赋值
}
}
}
}
} catch (NumberFormatException e) {
e.printStackTrace();
} catch (FileUploadException e) {
e.printStackTrace();
} catch (ParseException e) {
e.printStackTrace();
}
service.updateNews(news); // 调用底层代码 进行修改操作
// 重定向 NewsListServlet 拿到值 放入作用于中 才能 去newsList.jsp页面
response.sendRedirect("NewsListServlet");
}
}

点击修改后 提交到的NewsUpdateServlet

    // 修改新闻
public int updateNews(News news) {
getConnection();
// 之前 只是修改了 新闻标题 现在 全部都修改了
String sql = "update news_detail set categoryId=?,title=?,content=?,author=?,summary=?,createDate=?"
+ " where id=?";
Object[] params = { news.getCategoryId(), news.getTitle(),
news.getContent(), news.getAuthor(), news.getSummary(),
news.getCreateDate(), news.getId() };
int num = executeUpdate(sql, params);
return num;
}

修改NewsDaoImpl中的修改方法

=================实现新闻的删除===============================

public class NewsDelServlet extends HttpServlet { // 删除指定的新闻

    public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
doPost(request, response); // 默认执行doPost()
} public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
System.out.println("进入了NewsDelServlet ");
NewsService service = new NewsServiceImpl();
// 获取传递过来的id
String id = request.getParameter("id");
News news = service.findById(id);
System.out.println(news); // 测试 查看news信息
service.deleteNews(news); // 删除
// 重定向到 新闻处理servlet
response.sendRedirect("NewsListServlet");
} }

点击删除按钮后的NewsDelServlet

================验证用户登录后才能进入新闻详情界面=========================

public class LoginServlet extends HttpServlet { // 处理登录请求的servlet

    public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
doPost(request, response); // 交给 doPost()处理请求
} public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
System.out.println("进入了 LoginServlet");
// 01.获取用户信息
String userName = request.getParameter("userName");
String password = request.getParameter("password");
User user = new User(); // 把信息保存在 user中
user.setPassword(password);
user.setUserName(userName);
// 02.从数据库取值
UserService service = new UserServiceImpl();
boolean flag = service.login(user);
if (flag) {
// 把用户信息放入 作用域 过滤器中需要判断
request.getSession().setAttribute("user", user);
// 重定向到 新闻列表servlet 如果直接到新闻界面 是没有值的!
response.sendRedirect("NewsListServlet");
} else {
// 重定向到 新闻登录界面
response.sendRedirect("login.jsp");
}
} }

修改后的LoginServlet

public class LoginFilter implements Filter {

    public void destroy() {
System.out.println("LoginFilter在服务器关闭的时候 执行一次 销毁......");
} public void doFilter(ServletRequest request, ServletResponse response,
FilterChain chain) throws IOException, ServletException {
request.setCharacterEncoding("utf-8"); // 给所有的servlet设置编码格式 HttpServletRequest httpServletRequest = (HttpServletRequest) request;
HttpServletResponse httpServletResponse = (HttpServletResponse) response;
// 获取session中的用户
User user = (User) httpServletRequest.getSession().getAttribute("user");
// 获取用户请求的路径
String path = httpServletRequest.getRequestURI();
/**
* 判断用户url
* 我们的登录界面login.jsp 是不能拦截的
* 用户已经登录了 是不能拦截的
*/
if (path.indexOf("login") > -1 || (user != null)) {
chain.doFilter(request, response);
} else {
httpServletResponse.sendRedirect("login.jsp");
} } public void init(FilterConfig filterConfig) throws ServletException {
System.out.println("LoginFilter在服务器启动的时候 执行一次 初始化......");
} }

创建对应的LoginFilter过滤器

把login.jsp页面中的form表单 action改成login! 同样的  在web.xml中的LoginServlet对应的mapping  url 页要改成  /login

  <!--
web.xml文件 加载的顺序
01. context-param :所有servlet共享
02.listener
03.filter 如果有多个 按照 filterClass 加载的顺序
04.servlet filter 可以配置很多!
真正执行的顺序是什么? 按照filter-Mapping的顺序 执行! load-on-startup:
值没有设置,或者为负数的时候,都是在用户访问的时候 执行初始化操作!
值为0或者大于0时,都是在服务器启动的时候初始化! 值越小 初始化越早!
-->
/**
* 使用注解可以替换 web.xml文件中的配置
*
* 环境必须是java ee6版本
* value="/LoginServlet" 必须加上/
* urlPatterns={"/LoginServlet","login"}
* value和urlPatterns 不能同时存在
*
* 如果只有一个value属性可以省略
* 比如@WebServlet("/LoginServlet") 也是正确的!
* 等同于@WebServlet(value="/LoginServlet")
*/
@WebServlet("/LoginServlet")
public class LoginServlet extends HttpServlet
//多个初始化参数的配置
@WebServlet(value="/LoginServlet",initParams={@WebInitParam(name="name",value="小黑"),
@WebInitParam(name="age",value="50")})
public class LoginServlet extends HttpServlet {

jdbc03 使用servlet实现的更多相关文章

  1. servlet文件下载

    创建web工程servlet,新建DownloadServlet.java package com.xmyself.servlet; import java.io.File; import java. ...

  2. java中servlet的各种路径

    1. web.xml中<url-pattern>路径,(叫它Servlet路径!) > 要么以“*”开关,要么为“/”开头 2. 转发和包含路径 > *****以“/”开头:相 ...

  3. Servlet监听器笔记总结

    监听器Listener的概念 监听器的概念很好理解,顾名思义,就是监视目标动作或状态的变化,目标一旦状态发生变化或者有动作,则立马做出反应. Servlet中的也有实现监听器的机制,就是Listene ...

  4. JavaWeb——Servlet

    一.基本概念 Servlet是运行在Web服务器上的小程序,通过http协议和客户端进行交互. 这里的客户端一般为浏览器,发送http请求(request)给服务器(如Tomcat).服务器接收到请求 ...

  5. servlet 简介&comma;待完善

    什么是Servlet?① Servlet就是JAVA 类② Servlet是一个继承HttpServlet类的类③ 这个在服务器端运行,用以处理客户端的请求 Servlet相关包的介绍--javax. ...

  6. java web学习总结&lpar;五&rpar; -------------------servlet开发(一)

    一.Servlet简介 Servlet是sun公司提供的一门用于开发动态web资源的技术. Sun公司在其API中提供了一个servlet接口,用户若想用发一个动态web资源(即开发一个Java程序向 ...

  7. servlet使用入门

    创建web工程servlet,然后新建TestServlet.java package com.xmyself.servlet; import java.io.IOException; import ...

  8. 基于jsp&plus;servlet图书管理系统之后台万能模板

    前奏: 刚开始接触博客园写博客,就是写写平时学的基础知识,慢慢发现大神写的博客思路很清晰,知识很丰富,非常又价值,反思自己写的,顿时感觉非常low,有相当长一段时间没有分享自己的知识.于是静下心来钻研 ...

  9. &lbrack;Servlet&rsqb; 初识Servlet

    什么是Servlet? 定义 Servlet的全称是 Server Applet,顾名思义,就是用 Java 编写的服务器端程序. Servlet 是一个 Java Web开发标准,狭义的Servle ...

随机推荐

  1. 弱网测试IOS

    IOS测弱网非常方便,在设置-开发者-NETWORK LINK CONDITIONER的Status 进入后可以看到IOS自带了100%LOSS.3G.WiFi等常见场景 可以点击图标i进行查看或编辑 ...

  2. google API 点连线

    这个是模拟的数据,用于测试,为了方便学习 弹出框信息都是固定的,以及操作都不是写的循环,实际开发用 setInterval 或者for 以减少冗余. <!DOCTYPE html> &lt ...

  3. Log4j2 配置笔记(Eclipse&plus;maven&plus;SpringMVC)

    Log4j2相关介绍可以百度看下,这里只注重配置Log4j2 能够马上跑起来: 1.pom.xml文件中添加Log4j2的相关Maven配置信息 <!-- log4j2 --> <d ...

  4. php计算最后一次,第一次字符串出现位置

    strpos($str, n) 首次,n在str第一次出现位置, strrpos($str, n) 最后一次,n在str最后一次出现位置 strripos区分大小写

  5. CAS &lpar;1&rpar; —— Mac下配置CAS到Tomcat(服务端)(转)

    tomcat版本: tomcat-8.0.29 jdk版本: jdk1.8.0_65 cas版本: cas4.1.2cas-client-3.4.1 参考来源: CAS实现单点登录(SSO)经典完整教 ...

  6. webgl自学笔记——光照

    在Webgl中我们使用顶点着色器和片元着色器来为我们的场景创建光照模型.着色器允许我们使用数学模型来控制如何照亮我们的场景. 最好有线性代数的相关知识. 本章中: 光源.法线.材料 光照和着色的区别 ...

  7. 破解修改 Electron 软件 &vert; 游戏

    Electron 是 Github 发布跨平台桌面应用开发工具,支持 Web 技术开发桌面应用开发,其本身是基于 C++ 开发的,GUI 核心来自于 Chrome,而 JavaScript 引擎使用 ...

  8. 简单窗口与hbase数据库相连

    package shangke; import java.awt.Dimension; import java.awt.FlowLayout; import java.awt.event.Action ...

  9. 【静默】Oracle各类响应文件何在?

    [静默]Oracle各类响应文件何在? --root用户下执行: find -name *.rsp  / 1.创建数据库的响应文件:$ORACLE_HOME/assistants/dbca/dbca. ...

  10. 解决Sublime Text中文标题出现异常情况

    打开首选项-设置-用户 用以下覆盖原来配置,保存之后重新打开编辑器即可 {        "dpi_scale": 1.0,        "font_face&quot ...