这周进行了课程实践,题目是老掉牙的图书管理系统,因为一些原因,原本打算做前端的我做了全栈,虽然最后交的不是我写的,就当练手了。
首先上部分运行截图:
前端部分:采用bootstrap与layui结合,导航栏,输入框,按钮用的layui,表格用的bootstrap,大部分样式在原有框架的基础上进行了重构。
后端部分:管理员对用户和图书的管理,用户对图书的各种操作均是对数据库的更改,为方便对数据库进行操作,将各种操作封装到dao层中。Jsp用于接收信息,在 servlet中对jsp传来的数据进行逻辑判断与操作。
Java部分 servlet包,dao层,数据类,数据库连接模板如下
Jsp界面部分如下 其中的static用来放一些css ,img ,js,字体资源等
一些注意事项:
一.在写的过程中会遇到各种需要共享数据的情况。
Jsp与Servlet之间的传值有两种,一种是Jsp传值给Sevlet,另一种是Servlet传值给Jsp;使用request、response对象完成传值,具体实现如下:
1.JSP传值给Servlet
JSP传值给Servlet有几种形式:Form表单传值,url传值,其他方式传值
a、form表单传值:
JSP页面有:<input type="text" name="user_name" />
在servlet中接收数据需要这样写
String user_name=request.getParameter("user_name");
b、url传值
我没用过,了解之后再来更新。
c、java代码传值
java片段代码,servlet只能接到 session.setAttribute("testSession","Hello session")
的内容,而接不到 request的内容。在 servlet里用 request.getSession().getAttribute("testSession")
获取 session内容。
2.Servlet传值给Jsp
具体实现如下:
java代码:
String a= "abccdefg ";
request.setAttribute( "ValueA ",a);
request.getRequestDispatcher( "网址/jsp页面 ").forward(request,response);
jsp页面:
<%
String s =(String)request.getAttribute( "ValueA ");
%>
jsp页面就可以取出Servlet的值。
3.servlet与servlet之间共享数据
我是用的servletContext
servlet1中这么写
this.getServletContext().setAttribute("user",user);
servlet2中这么接收
User user=(User)this.getServletContext().getAttribute("user");
user是一个Javabean 类对象,在接收的时候要进行强制类型转换
二、跳转问题
1…从servlet到jsp的方法
从 servlet转到 jsp不外乎两种方法,重定向 和 url转发
a、重定向 ( Redirect):是路径的跳转,内容和 url都改变。不允许带 request参数( session参数可以),即不允许在servlet里给 request对象使用setAttribute方法传给下一页面。在 servlet里使用 response.sendRedirect(url) 方法。注意这里的 url前不带斜线 /,如 response.sendRedirect(”test.jsp“)
b、url转发 ( Forward):是页面的跳转,页面内容发生改变,url不变。可以带 request和 session参数。在 servlet里使用 getServletConfig().getServletContext().getRequestDispatcher(url).forward(request, response)。而这里的url前需要带斜线 /,如getServletConfig().getServletContext().getRequestDispatcher(”/test.jsp“).forward(request, response)
2、从jsp到servlet的方法
a、表单:post方法提交表单
b、链接:url方式(带参数)
三、在servlet中通过dao类中的方法实现对数据库的操作如添加记录但是中文乱码问题
在使用dao类增加方法的servlet中添加这两句代码就可以了
//设置编码格式
request.setCharacterEncoding("utf-8");
response.setContentType("text/html;charset=utf-8");
亲测这样往数据库写中文不会乱码了。
四、前端页面如何实现点击导航栏链接在导航不变的前提下在当前页面出现各种不同的页面
这个就比较简单啦,用框架iframe就行啦,注意不是frame,这个标签已经被淘汰。
五、前端页面如何实现iframe中的页面撑满除导航剩下的所有部分
给iframe添加如下样式
iframe {
margin-left: 200px;
height: 100%;
width: 100%;
position:absolute;
}
定位absolute+宽高100%就行啦
本系统的缺点
有个bug就是没有判断用户是否达到了借阅上限,也就是说用户可以借无数本书没有限制,因为一个人写全栈太累了,懒得写了,有机会会再改改,另外缺少超期罚款功能。最重要的是没有使用ajax,鬼知道我怎么想的学js的时候把它跳过去了,看着那不停刷新的页面我简直想哭,现在就开始补ajax了。
现在想起来的问题就这些吧,还有什么重要问题会再补充。
源码抽空传GitHub上。
github源码地址:
写的不是特别好,敬请谅解,毕竟后端不是我拿手的。。。如果具有参考意义的话给点个star吧。。。