新闻发布系统
新闻发布系统 项目文档
项目具体功能:
1. 创建数据库
1.创建new数据库
2.创建数据表
3.添加列
4.
2.创建项目并建立分层
6.搭架构,显示静态页面
3.登录,注销+传值
1.登录(难度指数:☆☆☆)
1.我们从登陆界面开始做起:
登陆后界面
首先我们看index.jsp页面的form表单的那块
我们创建分层是需要建立一个dao的接口写一个登录的方法
然后它的实现类daoimpl中写具体的实现类(里面写SQL代码等。。。)
你可以先在控制台试一下你的登录代码,如果好使在在servlet中实现。
假设我们 好使了,这时候需要在
我们创建分层时需要建立的一个servlet的类
在doPost()里写具体实现的方法
在这里我们需要弄一个判断,便于以后的使用,就是定义的oop那个,
String oop =request.getParameter("action");
New一个实现为了连接数据库
usersdaoimpl udi=new usersdaoimpl();
我们需要获取到文本框的代码就是用getParameter(“name”);方法。
String name=request.getParameter("name");
String pwd=request.getParameter("pwd");
我们定义一个boolean类型的变量,调用实现类中的login()方法。
如果返回true则成功,并且跳转页面admin
request.getRequestDispatcher("newspages/admin.jsp").forward(request, response);
这里我们用转发的方法。
2.表单校验
2.另外这个是表单校验,我们一定要严谨,专业,这才能体现出我们的技术。。。。
3.
4.另外这和校验是用Juery,我们需要熟悉Jquery.
Jquery 判断登录的账号密码是否为空,如果为空着提示(用户名密码不能为空)。如果不是,参考上面的文档。
2.传值(登录名)(难度指数:☆)
我们跳转页面时需要把登录名传过去,我们这里2行代码就可以实现.
Servlet:request.getSession().setAttribute("name", name);
top.jsp页面里:欢迎您:<%=session.getAttribute("name")%>
否则返回false,跳转回登录界面
request.getRequestDispatcher("/index.jsp").forward(request, response);
3.注销(难度指数:☆☆☆)
这里我们登录就做好了 ,下面我们做注销。。。。
我们注销主要实现的功能就是点击注销以后我会跳转到index.jsp页面以便别的用户继续登录,并且我们需要把之前的name删除。
这里我们之前的判断就用上了
String oop =request.getParameter("action");
点击a标签我们会注销判断如果action=logout的话,我们执行注销的代码。
//注销
第一步,把name名字删除 request.getSession().removeAttribute("name");
第二步.跳转页面,跳转到登录页面。
这里我们必须用转发,不可以用重定向!!!!!!!!!!
request.getRequestDispatcher("/index.jsp").forward(request, response);
这里我们会经常报错,:404,500,501 等等
这时候我们需要细心了,仔细检查路径问题,还有一个最重要的问题,
4.连接数据库
那就是我们在连接数据库是用的BaseDao是专门连接数据库的,我们需要连接MySQL,数据库
并且我们需要一个jar的包,类似一个小奶瓶
这样我们的数据库就可以连接了
5.web.xml文件
还有就是我们的web.xml文件,它也是特别重要的
<?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">
<display-name></display-name>
<servlet>
<description>This is the description of my J2EE component</description>
<display-name>This is the display name of my J2EE component</display-name>
<servlet-name>UserInfoServlet</servlet-name>
<servlet-class>cn.news.servlet.servlet.UserInfoServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>UserInfoServlet</servlet-name>
<url-pattern>/UserInfoServlet</url-pattern>
</servlet-mapping>
<welcome-file-list>
<welcome-file>UserInfoServlet</welcome-file>
</welcome-file-list>
</web-app>
这个是我们的xml文件
我们需要添加的是
<servlet>
<description>This is the description of my J2EE component</description>
<display-name>This is the display name of my J2EE component</display-name>
<servlet-name>UserInfoServlet</servlet-name>
<servlet-class>cn.news.servlet.servlet.UserInfoServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>UserInfoServlet</servlet-name>
<url-pattern>/UserInfoServlet</url-pattern>
</servlet-mapping>
Servlet-name:servlet名字
Servlet-class:包名加上servlet名
都是在<servlet></servlet>中的
Servlet-name:servlet名字
Url-pattern:/随意起 但是建议见名知意。。
这俩个是在<servlet-maping></servlet-mapping>中写。
我们出现的很多错误几乎都是路径的错误,这里我们需要细心一些。
重定义是全路径
转发不是全路径
6.乱码解决
并且我们也经常出现代码乱码的问题我们可以有几种解决方法。
1.在代码中解决的
request.setCharacterEncoding("utf-8");
5.直接软件解决的话就得是
6.Windon---->preferences---->
7.
8.
9.这里也是一种,另外如果是jsp文件的话,也有可以改编码格式的
10.
11.我所知道的乱码修改的方法就是这些了
7.显示主题列表(难度指数:☆☆)
1.news.dao接口:返回一个List集合里面填你需要的实体类名称
2.
3.news.dao.impl实现类:这里是JAVA OOP的具体代码,如果这个你不会我建议你从学一学那本书,挺重要的,这里我就不多说了。。。
4.
5.Servlet中调用:调用impl实现类,点出他的方法,返回List集合,然后传值,把获取的list的集合传到jsp页面中然后显示(中间的那个for增强是我调试时候用的,不需要)。
6.
7.Jsp页面的代码:这里我们需要做的工作就是显示列表。首先我们获取到servlet传过来的集合,然后把它遍历显示就可以了。
8.
9.这样我们的显示列表就做好了。不过肯定会有错的,需要调试的,debug...
1.首先是传的集合list别传错了,
2.获取集合时候需要强转
List<news2> list=(List<news2>)request.getAttribute("list");
3.记得导一个实体类的包 cn.news.entity.*.
每个人出现的错误可能不同,所以一定要仔细。。。。。。
8.添加主题(难度指数:☆☆☆)
1.写接口:
声明一个int类型的方法:如果你插入的值大于0个就返回true,我自认为这个比较容易,简单。因为我们只需要增加一个名字,所以我们直接填String name
2.实现类
3.
4.
3.Servlet
4.在这里我们需要获取文本框中的name,然后调用impl中的方法,把获取到的name值放进去,if返回的行数大于1,则代表返回成功,跳转嗲主题列表的页面,否则在留在主界面
5.
4.jsp页面:点击跳转页面,并传过去一个判断值就可以了。
5.
6.对于增加,在做servlet之前一定要做测试,不要对自己太自信,这样如果后来出错的时候你调试的时候也省事。
9.删除主题(难度指数:☆☆☆)
1.Dao接口
2.Daoimpl实现类
3.
3.Servlet:把jsp中点击获取的id传过来,调用删除的方法,判断返回行数是否大于0,如果大于0则代表删除成功,并且跳转到主题列表的页面,如果删除失败则返回到当前界面
4.
4.jsp页面:,获取点击的id,并把id传到servlet中。,修改和删除都是通过for增强中获取的id...
5.
6.常出现的错误:
Servlet跳转错
获取名字有错
地址填错
请仔细看清
在xml文件中如果你添加一个servlet 文件中会默认一个/serlvet/Servlet这个的路径 但是我们现实没有 ,我的处理方法是把前面的那个serlvet去掉 直接剩/Servlet这个就可以了。
还有一个就是 删除是按照id进行修改的,我们用id=<%=item.getTid()%>这个方法获取你选中的id然后传值 传到Servlet界面中就可以 。
这里我们遍历 需要的是for增强 以后我们学了代码会更加简单。。
10.修改主题(难度指数:☆☆☆☆)
在做主题的这块,我认为修改是比较难的一块。。
具体分析流程:点击修改 把它的名字获取到,传到你要修改的界面的修改主题名称的文本框中,然后进行修改,点击提交以后把主题名字修改了,就好了。。。
1.Jsp修改主题页面
2.我们是在主题列表的页面 内点击修改 跳的页面,所以我们主题页面应该写
3.
这里包括修改,删除,还有显示主题列表的代码,修改是传的id和name ,删除只传id.把值传到addservlet中。
这里 updatetopic是修改的时候赋值的过程,当你点击修改的时候你会跳转到修改主题的页面,当你进去修改页面时,你点击的主题名称会传到你要修改的文本框中,这样你就可以进行修改了,然后你把修改后的值填好后点击提交按钮,你就可以去查看你是否修改成功了。
这里我们是通过request.setAttribute(“tname”, name)的方法传过去的名字 和id
然后再获取你修改后文本框的值 调用修改的方法 进行提交修改的操作 ,这样数据就提交到了数据库中。。一样 ,修改后我们依旧跳到主题列表的页面。。
11.添加主题
12.这是添加主题的界面
点击添加主题跳到下一个界面
13.这个就是添加 主题的界面,我们需要 把
主题,标题,作者,摘要,内容,和上传文件,这几个给他填上,然后机就可以提交添加了。。。
另外标注的红框框,,比如上传文件 和显示主题,这个是相对难的一点。。
我们经常出现的错误也是我比较烦的就是,空指针 java,nullPointExection这个 500.
还有就是404路径的错误
还有一些501 等等。。。。。
11.添加新闻(难度指数:☆☆☆☆)
添加的代码相对比较多,因为这里包括文件上传 ,还有就是我们需要把下拉框中的值换成我们数据库中应该有的主题类的值 然后进行添加、
我们的添加操作 :1在admin界面中我们点击添加新闻,就会跳到添加新闻的主界面,在主界面中我们需要添加的项有,新闻类型,新闻标题,新闻作者,新闻摘要,新闻内容,关于新闻的上传文件。。如果填好后点击提交按钮就可以 提交了,,这里,关于上传文件我不怎么懂,给你们一些注释吧。。。
这是关于文件上传的代码和注释。。。。
<%
//解决乱码问题
request.setCharacterEncoding("utf-8");
//判断请求信息中的内容是否是"multipart/form-data"类型
boolean flag=ServletFileUpload.isMultipartContent(request);
if(flag){
//找到一个解析器,解析请求中的各个项目
//工厂参数是一个接口,用他的实现类
FileItemFactory factory=new DiskFileItemFactory();
//如果要解析,必须借助工厂参数
ServletFileUpload upload=new ServletFileUpload(factory);
//使用parseRequest 返回一个类型为FileItem的list集合
List<FileItem> list=upload.parseRequest(request);
//每一个fileitem都代表一个表单元素
//使用迭代器迭代
Iterator<FileItem> iter=list.iterator();
//使用while循环进行逐项迭代
//iter.hasNext()判断下一个有没有元素
while(iter.hasNext()){
//如果下一个不为空
FileItem item= iter.next();
if(item!=null){
//对当前item进行判断看是普通的还是上传用的
boolean bool= item.isFormField();
if(bool){//证明是普通表单
//获取该表单的value
String name=item.getFieldName();//返回表单元素的name值
if(name.equals("uname")){
out.print(item.getString("utf-8"));
}
}else{//是一个上传文件域
String fname=item.getName();//上传文件域的文件名
//扔到服务器目录下
String path="/upload/";//文件上传不能使用相对路径
//转换为绝对路径
path=this.getServletContext().getRealPath(path);
//构建一个file对象,借助File对象的getname方法
File file=new File(fname);
//构建一个file对象 第一个参数父路径 第二个参数子路径
File ffile=new File(path,file.getName());
item.write(ffile);
out.print("上传成功");
}
}
}
}
%>
另外我们这里有进行判断 如果是表单元素我们走XXX 如果是文件上传我们走XXX,这里我们看清楚 。。
这里我们方法有了 我们就可以整合了往Servlet中整合,
首先 我们判断一下判断好是添加后 我们开始写代码。。
1.new一下实体类
2.代码进行一下编码格式的调整
3.下面这段是文件上传的代码 ,上文中有我就不解释了。
4.判断是表单元素 我们把文本框中的值传过来用
String name =item.getFieldName();
If(name.equals(“ntitle”)){
newss.setNtitle(item.getString(“utf-8”));
}
的方法进行传值 因为我们使用了文件上传 所以我们之前的传值方法不好使了。。
String name=request.getParameter(“name”);
这个方法不好用了 所以必须用这个方法。。
这里面的表单元素的值获取完之后我们看一下我们的文件上传是否是好使的,如果都没什么问题,我们就可以调用添加新闻的方法了。
把我们获取到的值添加到方法中,然后提交到数据库了这样我们添加操作就成功了。
添加完后我们跳转到admin.jsp页面,在管理员界面中我们有新闻列表的显示 ,这样我们添加完后便于我们直接观察我们的操作是否成功。。。
这里我们需要进行下拉框显示的,根据选中的名字获取其id然后进行添加的操作
点击添加新闻我们会跳到addServlet这个servlet层 并且action=toplist的这和判断中的。。
添加新闻就这么多,相比之前的主题的添加还是有一定的难度的。
我做这个项目时经常有一个大的debug那就是做好这一块,在测试的时候上一块就不好使,经常连主界面都不显示。这样我们做东西就比较费劲了, 不过没办法。。。
下一个是修改新闻,修改新闻更加的难,它比添加多了一个方法,他需要把你选中的新闻的其他信息传到你要修改的页面中,然后在进行修改,他们添加没太大的差别,多了一个方法,SQL语句换一下 ,我认为是这样的。。。
12.修改新闻+分页显示新闻列表
(难度指数:☆☆☆☆☆)
修改 很难
下面是具体实现步骤 :
以下是具体代码:
这个是我在admin.jsp页面通过EL的方法遍历的新闻列表,并且可以分页,通过分页的方法显示的,分页是在登录后写的
分页代码:
并且你需要弄一个实体类:page
并且还有2个方法
这些只是分页的显示列表
下面就是关于修改的代码:
在这里遍历一个数组,并且在每一个文本框中获取值
这个是新闻修改的Serlvet层的代码:
调用的方法:在newsdaoimpl层中:不想在做多余的解释了。。。