短学期的软工实践前五天的学习结束了,虽然在课堂中我们学到了很多以前从未接触过的如:JDBC、Java Servlet等框架,XML语言和简单的网页制作语句的浅析,亦或是通过编程语言实现网页与数据库内容的桥接和使用等内容,但时间上总体来讲还是较为紧迫,加上很多基础的知识如网页制作技术、语句的使用和语法规则并未先修相关课程,这就造成很多基础内容都需要讲师在课堂上现场普及。虽然编程语句和逻辑与之前所学的相差不多,但一天的学习下来因为内容量大,并且整个工程在实际运作时会在多个文件之间跳转调用,实际理解起来难度还是不小。如果可能的话建议校方在今后的开展相关教学活动之前硬性的要求学生先修相关基础课程,以期避免这样吃力且低效的学习过程。
课堂上刘老师还向我们推荐了CSDN论坛、Editplus以及对网页制作有所帮助的Bootstrap等软件和资源获取途径,并且教授了不少非常实际且易用的编程技巧。
本周的之后两天我们在刘老师的带领下主要完成了工程 jspservlet_1 的编写,其主要功能内容为工程名下子目录 cn.neusoft.action 中的 ListAllAciton.java 和 LoginAction.java 两个servlet类。前者的作用在于在网页中以三列的表格的形式显示数据库中所有人员的姓名username、用户编号userid和密码pwd,后者的作用则为让访问网页的用户进行登录操作,下面附上代码
//Users.jsp文件,实际访问网页的时候主要是访问这个页面,其中就调用了ListAllAction文件中的方法,附上的代码是文件中的主要部分
<body>
<center><!-- 在网页中居中显示 -->
<h1>用户列表</h1>
<table border="1">
<tr>
<td>用户编号</td>
<td>用户名</td>
<td>用户密码</td>
</tr>
<!-- 第二行开始作信息显示,信息较多使用循环 -->
<!-- c:foreach 标签的 items 是用来接收数据的,var用于定义别名 -->
<c:forEach items="${users}" var="d">
<!-- 此处使用了c标签,foreach表示循环,后面的${ }为EL表达式,作为在本页面中接收其他文件传来数据的容器 -->
<tr>
<!-- ${d.userid }中 . 后面的userid是Userinfo实体类中属性的名字,必须严格对应大小写 -->
<td><a href="#">${d.userid}</a></td>
<td>${d.username}</td>
<td>${d.pwd}</td>
</tr>
</c:forEach>
</table>
</center>
</body>
//ListAllAction
public class ListAllAciton extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
//网页编码设置
response.setContentType("text/html");
request.setCharacterEncoding("utf-8");
response.setCharacterEncoding("utf-8");
//获取数据
UserinfoDao userinfoDao = new UserinfoDaoImpl();
List<Userinfo> list = userinfoDao.testListAll();
//把信息传递给页面再跳转
//注意,这里使用的是“request”转发,这种情况可以携带数据,相对的“response”重定向则不能携带数据
request.setAttribute("users", list);
request.getRequestDispatcher("Users.jsp").forward(request, response);
}
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
doGet(request, response);
}
}
//login.jsp文件,实际访问网页的时候主要是访问这个页面,其中就调用了LoginAction文件中的方法,附上的代码是文件中的主要部分
<body>
<form action="LoginAction" method="get">
用户名:<input type="text" name="username" id="username"
placeholder="请输入账户" required="required"/>
<font color="red">${unameErr }</font>
<br/>
密 码:<input type="password" name="pwd" id="pwd"
placeholder="请输入密码" required="required"/>
<font color="red">${pwdErr }</font>
<br/>
<input type="submit" value="登录"/>
</form>
</body>
//LoginAction
public class LoginAction extends HttpServlet {
//如果具体页面文件里的方法写的是 get 那么尽可能在doGet里写具体方法 反之写的post 就在doPost里面写方法
//即上面一段代码中标红的 method="get"
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("text/html");
response.setCharacterEncoding("utf-8");
request.setCharacterEncoding("utf-8");
//获取页面中输入的信息 request.getParameter("username") username 是对应的网页中 input 框的 name
String username = request.getParameter("username");
String pwd = request.getParameter("pwd");
System.out.println("获取的用户名"+username);
System.out.println("获取的密码"+pwd);
//乱码转换 可以将 ISO-8859-1 标准转为 utf-8 也可以转换成别的形式
username = new String (username.getBytes("ISO-8859-1"),"utf-8");
System.out.println("转码之后的用户名:"+username);
UserinfoBiz biz = new UserinfoBizImpl();
String msg = biz.UserLogin(username, pwd);
//根据返回的结果,进行页面跳转
if(msg.equals("ok")){
request.setAttribute("uname", username);
request.getRequestDispatcher("WEB-INF/jsp/success.jsp").forward(request, response);
}else if(msg.equals("unameErr")){
request.setAttribute("unameErr", "用户名错误!");
request.getRequestDispatcher("login.jsp")
.forward(request, response);
}else if(msg.equals("pwdErr")){
request.setAttribute("pwdErr", "密码错误!");
request.getRequestDispatcher("login.jsp").forward(request, response);
}
夏季学期软工综合实践小记(二)