jdbc03 使用servlet实现
<%@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实现的更多相关文章
- servlet文件下载
创建web工程servlet,新建DownloadServlet.java package com.xmyself.servlet; import java.io.File; import java. ...
- java中servlet的各种路径
1. web.xml中<url-pattern>路径,(叫它Servlet路径!) > 要么以“*”开关,要么为“/”开头 2. 转发和包含路径 > *****以“/”开头:相 ...
- Servlet监听器笔记总结
监听器Listener的概念 监听器的概念很好理解,顾名思义,就是监视目标动作或状态的变化,目标一旦状态发生变化或者有动作,则立马做出反应. Servlet中的也有实现监听器的机制,就是Listene ...
- JavaWeb——Servlet
一.基本概念 Servlet是运行在Web服务器上的小程序,通过http协议和客户端进行交互. 这里的客户端一般为浏览器,发送http请求(request)给服务器(如Tomcat).服务器接收到请求 ...
- servlet 简介,待完善
什么是Servlet?① Servlet就是JAVA 类② Servlet是一个继承HttpServlet类的类③ 这个在服务器端运行,用以处理客户端的请求 Servlet相关包的介绍--javax. ...
- java web学习总结(五) -------------------servlet开发(一)
一.Servlet简介 Servlet是sun公司提供的一门用于开发动态web资源的技术. Sun公司在其API中提供了一个servlet接口,用户若想用发一个动态web资源(即开发一个Java程序向 ...
- servlet使用入门
创建web工程servlet,然后新建TestServlet.java package com.xmyself.servlet; import java.io.IOException; import ...
- 基于jsp+servlet图书管理系统之后台万能模板
前奏: 刚开始接触博客园写博客,就是写写平时学的基础知识,慢慢发现大神写的博客思路很清晰,知识很丰富,非常又价值,反思自己写的,顿时感觉非常low,有相当长一段时间没有分享自己的知识.于是静下心来钻研 ...
- [Servlet] 初识Servlet
什么是Servlet? 定义 Servlet的全称是 Server Applet,顾名思义,就是用 Java 编写的服务器端程序. Servlet 是一个 Java Web开发标准,狭义的Servle ...
随机推荐
- shell每日发邮件
LOGFILE="$fank/"`date +"%Y%m%d"`"data"#每日文件 from="abc@123.com&quo ...
- android布局1
第二类:属性值必须为id的引用名“@id/id-name” 仅RelativeLayout中有效 android:layout_below 在某元素的下方 android:la ...
- · HTML使用Viewport
· HTML使用ViewportViewport可以加速页面的渲染,请使用以下代码<meta name=”viewport” content=”width=device-width, initi ...
- 写给新手看的Flask+uwsgi+Nginx+Ubuntu部署教程
学习 Flask,写完一个 Flask 应用需要部署的时候,就想着折腾自己的服务器.根据搜索的教程照做,对于原理一知半解,磕磕碰碰,只要运行起来了,谢天谢地然后不再折腾了,到下一次还需要部署时,这样的 ...
- 1、vs2012 mvc3项目ObjectContext类找不到的问题
在vs2012下找不到ObjectContext类,取而代之的是DBContext,实体对象的Attach方法,上下文的ObjectStateManager对象都找不到,解决办法: 在设计视图中打开E ...
- 转:windows xp下如何安装SQL server2000企业版
SQL2000企业版本 适用于WIN 2000 Server系统和Windows 2003系统,Windows XP一般装不了需要选用个人版或开发板.但是企业版也可以安装在xp系统下.这里介绍一个XP ...
- Facebook 开源三款图像识别人工智能软件
Facebook今天开源了三款人工智能图像分割(Image Segmentation)软件,分别是DeepMask.SharpMask和MultiPathNet,三款工具相互配合完成一个完整的图像识别 ...
- POJ3026 Borg Maze(最小生成树)
题目链接. 题目大意: 任意两点(点表示字母)可以连线,求使所有点连通,且权值和最小. 分析: 第一感觉使3维的BFS.但写着写着,发现不对. 应当用最小生成树解法.把每个字母(即A,或S)看成一个结 ...
- bzoj3575[Hnoi2014]道路堵塞
http://www.lydsy.com/JudgeOnline/problem.php?id=3575 总赶脚第二题总是比第三题难...... 好吧,这题一点思路都没有 听说用民科可以过掉大部分数据 ...
- Delphi TcxtreeList控件说明 转
Delphi TcxtreeList控件说明 树.cxTreeList 属性: Align:布局,靠左,靠右,居中等 AlignWithMargins:带边框的布局 Anchors:停靠 (akT ...