S2J's Studio.

sjj的JavaWeb大作业

字数统计: 2.3k阅读时长: 8 min
2019/05/11 Share

一步步完成JavaWeb大作业

    前几天javaWeb老师布置了大作业,没有特定主题,题目要求:围绕自定义主题,运用java基础、JDBC、html、css、JavaScript、jsp、servlet基础,做出具有有页面登录注册功能、连接数据库进行增删改查。

页面登录功能

先完成较为简单的登录功能,暂时不进行有关数据库操作。

制作表单

     利用Myeclipse新建web项目,新建login.jsp页面。
制作表单可借鉴我之前的文章。在form里的简单设置

1
<form  class="login-form" action="login" method="post">

选用post方法是因为等会servlet里的用的是post方法而且post方法更加的安全。

servlet页面配置

重载dopost方法,
这时候有一个问题,怎么让servlet接受login页面的表单信息。使用request.getParameter获取信息,进行简单的验证,然后跳转到相应页面。跳转页面有俩个方法:
服务器跳转:getRequestDispatcher() 好处:不会显示出你的文件地址,让别人不能清楚知道你的内部结构。

客户端跳转:response.sendRedirect() 好处:当服务器崩溃了,那么sendRedirect则就会起很大的好处了。

1
2
3
4
5
6
7
8
9
//得到login页面的信息
String username = request.getParameter("Username");
String pwd = request.getParameter("Password");
//进行判断
if("admin".equals(username)&&"123456".equals(pwd)){
//服务器跳转到指定首页
RequestDispatcher rd = request.getRequestDispatcher("WEB-INF/index.jsp");
rd.forward(request, response);
}

当用户输入错误或者输入为空时,为了用户体验可以在servlet里传递信息到login页面,

1
request.setAttribute("error", "账号或密码错误");//传递数据

在login页面可以简单的通过EL表达式进行接收,也可以用getAttribute进行接收。

1
2
${error }//EL表达式
<%=request.getAttribute("error") %>//request的接收方法

配置web.xml文件

servlet和jsp页面都写好了,就要在web.xml中部署servlet。

1
2
3
4
5
6
7
8
<servlet>
<servlet-name>Login</servlet-name>//为servlet起名
<servlet-class>cn.Loginservlet.Login</servlet-class>//写你的servlet的文件地址
</servlet>
<servlet-mapping>
<servlet-name>Login</servlet-name>
<url-pattern>/login</url-pattern>//写 /+表单action填入内容,
</servlet-mapping>

这样就完成了表单登录并由servlet处理后进行跳转的操作,后面将更新首页设置和其他操作。

连接数据库

先利用MySQL建立一个数据库,加入用户表t_user添加一个用户将用户名密码设定好,
这时候要导入一个mysql的jar包(下载教程
把他移入到lib目录下。具体许多操作可自行度娘或者谷歌。

捷径和陷阱

捷径

这里讲一些捷径或者bug的解决方法。
在代码内重复度出现的片段可以考虑封装成为类,像数据库的连接、一些用户的导入、字符判断都可以自己封装这样下次调用就会很轻松。

2、 前端设计在上学期对我来说是一个很麻烦的步骤,因为我排版很差,开始看网上教程有个jquery—easyui 但老师说这个过时了,很多网站并不兼容,于是我把前端推到重新开始写(当时也是崩溃)。但后来接触到了bootstrap,发现了懒人前端设计的妙招,它的栅格系统可以很明显的把页面区分开来,就像是一张表格分为各种格子,然后往里面填入div就好了,bootstrap里面还有一些组件的使用,直接复制粘贴就好了,懒人亲测很有效。

3、但凡用到java的地方调试(debug)都是一个很好的找出错误的选择

陷阱

这里具体列出我碰到令人头疼的一些bug,或容易忽略的地方。

1、数据库用完不关闭,这样内存上会没有得到释放,容易出错。

2、分不清一些基本的方法的具体用处:request.getParameter() 用在servlet从jsp页面获取到信息,反之从servlet传给jsp则有许多方法,request.setAttribute或者放在session中传递给前端页面,但建议不要放在session中,因为session中的占用内存太多容易崩溃。

3、重定向和请求分派(转发)的区别:

重定向一般适用于页面跳转但却不需要传递request中的值,而转发的话会将转发内容传递到前端页面,所以重定向之后接收不到request里的值是很正常的。

4、差一条java知识点 用于循环判断的 xxx.next()使用一次少一次,举个例子,之前我为了调试,在判断循环之前打印了一次xxx.next() 然后诡异的事情发生了,明明控制台显示为true但debug却进不去while循环,这就是因为使用了一次,恰好我的next()只有一次,所以直接跳过循环。(本人觉得有点坑爹,所以放出来了)

5、在jsp页面使用el表达式千万记得贴上el需要的标签<%@taglib prefix=”c” uri=”http://java.sun.com/jsp/jstl/core" %>(本人因为这个标签没贴,导致我一个卡了一下午没找到错误)只要页面有使用el表达式就要记得把这个加上去,切记切记。

6、 从jsp页面传值回来发现乱码,网上有好多解决方案:这里贴一个最简洁的

1
2
3
request.setCharacterEncoding("utf-8"); //1
response.setContentType("text/html;charset=utf-8"); //2
response.setCharacterEncoding("utf-8"); //3

把上面的语句加在servlet的相应响应方法下就可以轻松解决乱码问题。

7、 servlet里语句传给sql时明明控制台未出现乱码,但数据库却不能接收,这个问题我今天下午刚遇到,网上找了各种解决方案但都不管用,因为我根本不知道是传给sql时编码不匹配造成的,后来在以为大四学长的帮助下搞了一个小时一步步调试才找到,下面是解决方案。

1
private String dbUrl="jdbc:mysql://localhost:3306/db_studentInfo?useUnicode=true&characterEncoding=gb2312";

在数据库连接的后面加上?和后面的内容,就可以解决莫名其妙的无法连接问题,但原理我还没找到,先解决了再说。

8、 记得每创一个servlet要在xml上建立相应路径和包。

新发现的一些方法

数据库的增加

数据库的增加操作跟查找有些不同,相对来说,我认为查找是最好执行的,只需要select就好,不像增加需要去改动数据库内的数据,所以在问了学长和百度之后,也掌握了。可能删改的操作会和增加一样,准备明天把删改搞定。

这里可以用一个对我而言比较新的插入方法

1
2
3
4
5
6
PreparedStatement ps=null;
sql="insert into t_student(name,class,birth) values (?,?,?)";
ps=con.prepareStatement(sql);
ps.setString(1,name);
ps.setString(2, sclass);
ps.setString(3, birth);

对我而言这种类似于java里的占位符占位,然后再把数据传入,但这里有一个坑是我找了很久后发现的,就是按照常理,大家可能都认为应该先传值再进行数据库操作,在这里,则是先把数据库内容通过prepareStatement方法传入,再通过PreparedStatement传值,最后千万不用再进行数据库操作,不然会发现数据库并没有添加。
相比很傻的使用Stringbuffer或者string在后面扩充来说要简单得多
下面是痴呆方法

1
sql="insert into t_student values( null,"+"'"+name+"',"+"'"+sclass+"',"+"'"+birth+"')";

这样看起来就要呆很多,而且麻烦,但不想动脑使用新方法的话,这个也是挺保险的。

关于bootstrap的知识

上面提过的,大部分可以认为是懒人页面排版啊布局之类的应用,但里面的栅格系统是真的强,把你的页面,有你随意定义布局,而且很简单明了,像以前调一个页头页脚加内容和侧边导航栏,使用div一个个排好位置改变大小margin,还要考虑适应性响应性,但bootstrap可以让你很快的排出来,就像让你再表格上画图会更简单一样,bootstrap就是这么让你更加快速,而且在建立注册页面的时候,发现提供了input里的type类型可以有好多种,例如Emil,可以在用户输入不符合邮箱地址的时候自动弹出提示窗口,要使用js去写就要写至少几十行的代码。

温馨提示:不要过于偷懒和投机取巧,前期可以自己写的还是自己写吧。

CATALOG
  1. 1. 页面登录功能
  2. 2. 捷径和陷阱
    1. 2.0.1. 捷径
    2. 2.0.2. 陷阱
  • 3. 新发现的一些方法