基于JSP+SERVLET的新闻发布系统(一)
本系统使用的是基于JSP+SERVLET+TOMCAT6
数据库使用的是MYSQL
IDE是MYECLIPSE8.5,页面编辑使用的是百度的ueditor,比较适合咱国人
采用MVC模式,使用的关键技术,通用的分页技术,一些项目开发的小技巧,如批量删除,,,本文章适合刚学习JSP+SERVLET,但没有实战经验的童鞋。欢迎交流学习。
1,第一个模块是登陆处理。
关键代码如下:
<form action="${pageContext.request.contextPath }/user?method=login" onsubmit="return submitCheck();"
method="post" id="loginForm">
<fieldset>
<legend>用户登录</legend>
用户名:<input type="text" id="userName" name="userName" /><br /> <br/>
密 码:<input
type="password" id="password" name="password" /><br />
<input type="submit" value="登录" /> <br />
<span id="msg" style="color: red">${msg}</span>
</fieldset>
</form>
<span id="msg" style="color: red">${msg}</span>该句代码用于反馈后台的校验信息,如用户名与密码不匹配等。
接受参数使用的是一个小工具类
User user = (User) CopyPropertyUtil.copyPropertiesFromRequest(request,
User.class);
该方法会自动的把接受到的FORM表单的值赋值到User类中,可以节省很多重复性的代码。
SERVLET的关键代码如下:
if ("login".equals(method)) {
user = userService.checkUser(user);
if (StringUtils.isNotBlank(user.getUserName())) {
HttpSession session = request.getSession();
session.setAttribute("user", user);
request.getRequestDispatcher("index.html").forward(request,
response);
} else {
request.setAttribute("msg", "用户名或密码错误");
request.getRequestDispatcher("index.jsp").forward(request,
response);
}
}
request.setAttribute("msg", "用户名或密码错误");用于反馈错误信息到登陆页面。
2,登陆成功则是菜单栏,由于时间有限,没有做菜单的动态生成。
在LEFT.JSP中,查询的链接统一用user?method=query method的query ,在该方法中写了通用的分页,并且是加上查询结果的分页。
if ("query".equals(method)) {
queryAll(request, response, user);
}
public void queryAll(HttpServletRequest request,
HttpServletResponse response, User user) throws ServletException,
IOException {
int currPage;
try {
currPage = Integer.valueOf(request.getParameter("currPage"));
} catch (Exception e) {
currPage = 1;
}
Page page = new Page();
List<User> list = userService.findAll(user);
page.setTotalPage(list.size());
page.toPage(currPage);
list = userService.findAll(user, page);
request.setAttribute("user", user);
request.setAttribute("page", page);
request.setAttribute("userList", list);
request.getRequestDispatcher("/user/userList.jsp").forward(request,
response);
}
request.setAttribute("page", page); 该对象用于保存分页的信息.
List<User> list = userService.findAll(user); 该方法是查询出需要显示的集合数据。
DAO代码如下:
public List findAll(User user){
Connection conn = DBUtil.getConnection();
ArrayList list= new ArrayList();
StringBuilder sb = new StringBuilder();
sb.append("select * from user where 1 = 1 ");
if(StringUtils.isNotBlank(user.getUserName())){
sb.append(" and userName like '%"+user.getUserName()+"%'");
}if(StringUtils.isNotBlank(user.getRole())){
sb.append(" and role like '%"+user.getRole()+"%'");
}
ResultSet rs = DBUtil.querySQL(sb.toString(), null,conn);
try{
while(rs.next()){
User temp = new User();
temp.setUserId(rs.getInt(1));
temp.setUserName(rs.getString(2));
temp.setPassword(rs.getString(3));
temp.setRole(rs.getString(4));
list.add(temp);
}
}catch(Exception e){
e.printStackTrace();
}finally{
DBUtil.closeAll(rs, null, conn);
}
return list;
}
效果如下:
接下来将重点讲解基于查询结果的分页技术。
由于查询条件的是通过FORM提交,但是在点击“下一页”的时候仍需保存之前的查询条件,可采用如下方式解决。
<a href="${pageContext.request.contextPath}/user?currPage=${page.currPage+1 }&method=queryPage&userName=${user.userName}&role=${user.role}">下一页</a>
将查询条件放在链接中,这样就能一直保存查询的条件,查询出正确的结果。
但是由于通过表单提交跟链接的解码方式不一样,因此需另外处理。
解码如下:
if ("queryPage".equals(method)) {
String userName = null, role = null;
// 当查询条件是通过链接的时候,由于是中文,所以需要进行解码
if (StringUtils.isNotBlank(request.getParameter("userName")))
userName = new String(request.getParameter("userName")
.getBytes("ISO-8859-1"), "UTF-8");
if (StringUtils.isNotBlank(request.getParameter("role")))
role = new String(request.getParameter("role").getBytes(
"ISO-8859-1"), "UTF-8");
user.setUserName(userName);
user.setRole(role);
queryAll(request, response, user);
}
这样就能完美解决基于查询结果的分页了。
3‘SELECT动态获取数据
角色中的数据是动态加载的,可使用如下语句获得:
<select name="role" id=""role"" style="width: 100">
<option value="">请选择</option>
<%
Role role = new Role();
RoleService roleService = new RoleService();
List<Role> roleList = roleService.findAll(role);
if(roleList!=null&&roleList.size()>0){
for(int i=0;i<roleList.size();i++){
role=roleList.get(i);%>
<option value="<%=role.getRoleId() %>">
<%=role.getRoleName() %>
</option>
<%}
}%>
</select>
4,删除使用的是批量删除,其实批量删除很简单,如果说难的话就是JS不会用,
我们可以通过CHECKBOX获取所有选中的ID,然后拼接成字符串,提交到后台,可拼接成1,2,3,5
后台可以使用如下方法去拆分
String str = request.getParameter("str");
str = str.substring(0, str.length() - 1);
String box[] = str.split(",");
for (String temp : box) {
int userId = Integer.valueOf(temp);
user.setUserId(userId);
userService.delUser(user);
}
先上传这么多,晚点更新其他模块。
基于JSP+SERVLET的新闻发布系统(一)的更多相关文章
- 基于JSP+SERVLET的新闻发布系统(三)
拖了这么久..今天把栏目管理还有新闻管理模块的也挂出来.. 栏目管理跟用户管理一样. 这里重点讲解新闻管理. 效果图如上: 1,可选择栏目类别,且栏目类别是动态生成的. 默认生成的文章是未审核状态的. ...
- 基于JSP+SERVLET的新闻发布系统(二)
接下来讲解的是通过AJAX验证用户名是否已经添加 用户名: <input type="text" name="userName" id="use ...
- 基于JSP+Servlet开发手机销售购物商城系统(前台+后台)源码
基于JSP+Servlet开发手机销售购物商城系统(前台+后台) 开发环境: Windows操作系统 开发工具:Eclipse/MyEclipse+Jdk+Tomcat+MySQL数据库 运行效果图: ...
- DRP PK 牛腩新闻发布系统
一.JSP与ASP (1)Web服务器的支持:大多数通用的Web服务器如:Apache.Netscape和Microsoft IIS都支持JSP页面,只有微软本身的Microsoft IIS和Pers ...
- News新闻发布系统
News新闻发布系统分页的实现 1.首先我们要在NewsDAO中创建一个方法,返回List<NewsEntity>集合,其中pageIndex表示当前页,pageSize表 ...
- 基于JSP的学术交流论坛系统的设计与实现
版权声明:本文为[博主](https://zhangkn.github.io)原创文章.未经博主同意不得转载. https://creativecommons.org/licenses/by-nc-s ...
- 安卓项目-利用Sqlite数据库,开发新闻发布系统
本教程致力于程序员可以快速的学习安卓移动端手机开发. 适合于已经习得一种编程语言的同仁. 更多志同道合,想要学习更多编程技术的大神们. 小弟不才,麻烦关注一下我的今日头条号-做全栈攻城狮. 本文章是基 ...
- 基于jsp+servlet图书管理系统之后台万能模板
前奏: 刚开始接触博客园写博客,就是写写平时学的基础知识,慢慢发现大神写的博客思路很清晰,知识很丰富,非常又价值,反思自己写的,顿时感觉非常low,有相当长一段时间没有分享自己的知识.于是静下心来钻研 ...
- 【NodeJS 学习笔记04】新闻发布系统
前言 昨天,我们跟着这位大哥的博客(https://github.com/nswbmw/N-blog/wiki/_pages)进行了nodeJS初步的学习,最后也能将数据插入数据库了 但是一味的跟着别 ...
随机推荐
- java的for循环问题的解决,以及安卓中ListView插入数据的问题
package test.testdemo; import org.springframework.jdbc.core.JdbcTemplate; import com.util.Pub; publi ...
- FPGA知识大梳理(三)verilogHDL语法入门(2)知识汇总
1,时序逻辑.将上次的练习修改成时序逻辑会如何设计. always @ (posedge clock) 2,block 与unblocking A,有clock的always中通常使用nonbloc ...
- 转: ajax跨域之JSONP
事件背景: 某个站点分为静态产品介绍页面(或由于某原因需要静态化),和一个独立的在线应用程序.静态产品页面属于www.a.com下,而在线应用程序作为一个相对独立的系统存在于app.a.com上. 在 ...
- IOS算法(三)之插入排序
直接插入排序(Insertion Sort)的基本思想是:每次将一个待排序的记录,按其keyword大小插入到前面已经排好序的子序列中的适当位置,直到所有记录插入完毕为止. 设数组为a[0-n-1]. ...
- 《Android第一行代码》笔记
学习Android开发差点儿相同有两年时间了.期间也做了大大小小的一些项目.近来抽出闲暇想把Android基础强化一下,之前在网上看到了郭霖郭大神的几篇博客.从中受益不少.于是花了近一周时间看完了郭神 ...
- mac 系统开发android,真机调试解决方式(无数的坑之后吐血总结)
近期学习android开发,安装了ADT开发环境之后,启动模拟器,慢的要死啊,全然不如苹果的好用,没法,自己买个android手机,准备联机调试程序.没想到在这个过程中,遇到了好多的坑,作为一个新人, ...
- cygwin中vim的使用方法
vim类似Windows中的记事本,功能非常强大. vim的使用技巧 1.vim text.txt text存在则打开,不存在则类似新建一个叫text的txt文件 2.退出 按esc切换到命令模式,然 ...
- 【QT相关】Image Viewer Example
结合QLable和QScrollArea显示一个图片. QLable典型用于用户展示文本,但是也能展示图片.QScrollArea提供了一个滚动视图,如果子控件超过了框架限制,QScrollArea自 ...
- [Swust OJ 1026]--Egg pain's hzf
题目链接:http://acm.swust.edu.cn/problem/1026/ Time limit(ms): 3000 Memory limit(kb): 65535 hzf ...
- tomcat编译通过问题
tomcat 编译后 的类 和 网站目录不能同名!