夏季学期软工综合实践小记(一)

本周是软工方面夏季学期的第一周,前三天我们在东软讲师刘老师的带领下完成了接下来的日子中需要的编程软件MyEclipse和数据库应用软件Navicat for MySQL以及相关环境的配置安装,并在后来的学习中逐步回顾了曾在数据库原理课程中学习过的SQL语句及其使用。

课堂上刘老师带领我们对JDBC、Java Servlet等常用编程框架作了了解,并讲授了不少软件的使用和编码的快速补全技巧,如:

在编程中可以通过快捷键 alt+shift+s 快速生成常用的 get()、set()或是构造方法

在实际开发过程中不少代码都可以通过快捷键 alt+/  进行快速补全,如最常用的输出语句  System.out.println()就可以通过  syso  关键字加快捷键的操作快速补全。其他时候这一快捷键也能得到经常性的应用,并且通过快捷键进行补全的代码会自动导入所需要的包,不需要再手动一个个字符输入,能够大大提升编程效率。

另外我们还创建了一个自己的在后续课程内容中经常使用的数据库mybatis,并通过代码实现对其进行连接、访问、查询、关闭连接等操作,下面附上代码

//驱动加载

static{

try {         Class.forName(DRIVER);      }

          catch (ClassNotFoundException e) {         e.printStackTrace();      }

}

//获取连接

public static void getConnection(){

try {         con = DriverManager.getConnection(URL, UNAME, UPWD);      }

         catch (SQLException e) {         e.printStackTrace();      }

}

//关闭连接

public static void closeAll(){

if(null!=rs){

try {     rs.close();            }

         catch (SQLException e) {            e.printStackTrace();         }

}

if(null!=ps){

try {            ps.close();         }

         catch (SQLException e) {            e.printStackTrace();         }

}

if(null!=con){

try {            con.close();         }

          catch (SQLException e) {           e.printStackTrace();         }

}

}

//查询操作

public static ResultSet executeQuery(String sql,Object[] obj){

getConnection();

//System.out.println(obj);

//如果语句不够完整,是需要进行拼接的

try {         ps = con.prepareStatement(sql);

if(null!=obj){

for(int i=0;i<obj.length;i++){                ps.setObject(i+1, obj[i]);            }

}

rs = ps.executeQuery();

}

       catch (SQLException e) {         e.printStackTrace();      }

return rs;

}

//统一的执行增   删   改操作的方法  insert   delete   update

public static int executeUpdate(String sql,Object[] obj){

int count = 0;

getConnection();//调用上面的连接方法获得与数据库的连接

try {         ps = con.prepareStatement(sql);

if(null!=obj){

for(int i=0;i<obj.length;i++){                ps.setObject(i+1, obj[i]);            }

}

count = ps.executeUpdate();

}

       catch (SQLException e) {         e.printStackTrace();      }

       finally{         closeAll();      }

return count;

}



通过以上方法我们实现了程序对数据库内容的访问和更新,并且通过接口UserinfoDao及其具体实现类以各类调用上述方法的方法实现了可以具体使用的功能,下面附上方法名

//插入用户信息,Userinfo 实体类携带用户信息

public boolean addUser(Userinfo userinfo);

//根据  用户姓名   修改   用户密码

public boolean updateUser(Userinfo userinfo);

//根据   用户姓名   删除   用户信息

public boolean deleteUser(String username);

//查询所有用户信息

public List<Userinfo>  findAll();

//根据用户名查询,基于实际情况,1个用户名只对应1个用户,因此只能查到1条记录

//所以,可以不使用list   而直接使用  Userinfo   作为方法返回类型

public Userinfo findByUsername(String username);



在前面的基础上,我们进一步创建了servlet框架的web工程,通过软件将代码发布到Tomcat服务器上并通过网页访问和使用代码,实现了网页页面和数据库内容通过代码层进行联通显示使用的目的。我们创建的数据库保存的是一些人员的信息,包括用户ID userid,用户名username和密码pwd,通过web工程及代码我们实现了通过网页访问相关端口和下辖地址进行用户登录、显示用户信息等功能,下面附上代码

public class LoginAction extends HttpServlet {

//如果具体页面文件里的方法写的是  get  那么尽可能在doGet里写具体方法   反之写的post  就在doPost里面写方法

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); //WEB-INF目录下的文件不可通过网页直接输入地址访问,只能通过别的方法以“转发”的形式进行访问,若进入工程目录底下的这一jsp文件则说明触发了该“转发”,即访问成功了

}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);

}



在具体的页面编写文件中,我们进行了如下内容的编辑:

//index.jsp

<body>

<a href="login.jsp">登陆</a><br/>

<!-- 上下是两种不同的表述方式,但意义均为点击两个<a>之间的汉字表示的连接后跳转入前面的地址 -->

<a href="http://localhost:8080/jspservlet_1/ListAllAciton">用户列表</a>

</body>

//login.jsp  此为实现检测用户输入内容进行登录的页面

<body>

<form action="LoginAction" method="get">

用户名:<input type="text" name="username" id="username"

placeholder="请输入账户" required="required"/>

<font color="red">${unameErr }</font>

<br/><!-- <br/>为换行符,实现页面中显示内容的换行 -->

<!--  required="required"表示此项必须填写,${  }为EL表达式 -->

密    码:<input type="password" name="pwd" id="pwd"

placeholder="请输入密码" required="required"/>

<font color="red">${pwdErr }</font>

<br/>

<input type="submit" value="登录"/>

</form>

</body>

//Users.jsp

<body>

<center><!-- 居中 -->

<h1>用户列表</h1>

<table border="1">

<tr>

<td>用户编号</td>

<td>用户名</td>

<td>用户密码</td>

</tr>

<!-- 第二行开始作信息显示,信息较多使用循环 -->

<!-- 这里使用了c标签,c:foreach标签items是用来接收数据的,var用于定义别名 -->

<c:forEach items="${users}" var="d">

<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>



通过几天的学习,我们在以往简单的编写方法和代码的基础上对软件的具体开发有了新的认识。以往都只是设计编写本地的一些小的程序,现在真正涉及到了能够具体用于项目级别开发的方法,像网页连接、数据库内容的使用等都是以前从未接触过的。

总的来讲近期所讲内容和以前的算法逻辑和程序编写相近,还是比较能够接受的,只是不同类和包之间的多次跳转对第一次接触较大型工程的我们来讲有些难以适应,希望后续的学习中能够获得更多有用的技能

时间: 2024-11-11 04:12:30

夏季学期软工综合实践小记(一)的相关文章

夏季学期软工综合实践小记(二)

短学期的软工实践前五天的学习结束了,虽然在课堂中我们学到了很多以前从未接触过的如:JDBC.Java Servlet等框架,XML语言和简单的网页制作语句的浅析,亦或是通过编程语言实现网页与数据库内容的桥接和使用等内容,但时间上总体来讲还是较为紧迫,加上很多基础的知识如网页制作技术.语句的使用和语法规则并未先修相关课程,这就造成很多基础内容都需要讲师在课堂上现场普及.虽然编程语句和逻辑与之前所学的相差不多,但一天的学习下来因为内容量大,并且整个工程在实际运作时会在多个文件之间跳转调用,实际理解起

软工综合实践 学习笔记02

在这次软件工程时间的短学期课程中,我学到了很多东西,现在重点说一下在本次课程中对我来说比较难也是比较感兴趣的地方:关于映射请求和返回值. 首先是@RequestMapping映射请求的一些知识点 1.Spring MVC使用@RequestMapping注解为控制器制定可以处理哪些URL请求 2.在控制器的类定义及方法定义处都可标注 类定义处:提供初步的请求映射信息.相对于WEB应用的根目录. 方法处:提供进一步的细分映射信息.相对于类定义处的URL,若类定义处未标注@RequestMappin

软工综合实践 学习笔记01

先谈一下关于SpringMVC概述 MCV在B/S系统下的应用: 用户发起request请供求至控制器(Controller) *控制接受用户请求的数据,委托给模型进行处理 控制器通过模型(Model)处理数据并得到处理结果 *模型通常是指业务逻辑 模型处理结果返回给控制器 控制器将模型数据在视图(View)中展示 *web中模型无法将数据直接在视图上显示,需要通过控制器完成.如果在C/S应用中模型是可以将数据 在视图中展示的. 控制器将视图response响应给用户 *通过视图展示给用户要的数

第二次小学期软工实践随笔

小学期后面两天的学习,我们进一步完善了我们的ssh框架,在Dao和Service包下我们声明好我们需要的操作方法: package com.crm.dao;import java.util.List;import com.crm.bean.Cust;public interface CustDao { /** * 保存客户信息 * @param cust */public void saveCustomer(Cust cust);/** * 删除客户信息 * @param cust */publ

该死的软工实践

这学期给我最大的感觉是比之前的每学期过得都快,可能是比较忙吧.还记得刚开始的时候,栋哥说可以退选实验的时候,有人和我说:”好像软工实践很麻烦的样子,要不我们退了吧“.其实,我也有打过退堂鼓,以为自己学也可以做点东西,但是我还是抱着这样的想法”找个大腿抱,水一水吧,毕竟过了这学期,又可以少修几学分了“,然后就没有去退选了.接下来就是开始这软工实践的日子.该开始总是想得很美好,以为这学期结束会有一个产品,上面写着made by ***,到最后还是生出了一个比较low的东西,那是第一次真正实践的东西,

软工项目总结

这学期软工小组的开发就快结束了,回想整个开发过程,感慨颇多. 首先是刚开学时的组队和选题,我们各自提了好多项目,有的太简单,有的没有价值,有的又太不切实际,最终我们选定付千山同学在高中设计的游戏作为题目,因为这既新颖又有前期调研,而且也比较有趣. 但其实,我之前从来没有游戏开发的经验,组员们也只了解一两门语言,几乎没有大型项目开发经验.所以,这次项目从技术选型到开发都是一边摸索一边做.现在回过头去看,有得有失.首先,Travis CI 的学习和使用是非常正确的决定,因为后端运行环境比较苛刻,不方

个人阅读作业2 软工方法论无用?

初步看了推荐的文章以后,我选择了最后一篇文章来阅读,原因是“软件工程的方法论到底有多少用处”这个问题也是我目前很大的一个疑问,于是我决定首先看看这篇文章怎么说. 文章在开头举了一个离我们很近的例子:结对编程到底是解决了代码评审的问题还是无谓地增加了沟通成本?作者提出增加沟通成本的意思很清楚:结对编程非但没有逃避代码评审的繁复,却增加了额外的工作量:沟通,并且这些沟通并没有起到期望的作用:使一段代码由两个人看过以后更加完美.我在结对编程中便遇到了这样的问题,当一个人在写代码时,他的思维运转是比较快

2017年秋软工-领跑衫获奖感言&amp;我最感谢的人

啥都不说,先上幅图.获得领跑衫,开心. 一.回忆 这是我第二次来上恩师杨的软件工程,第一次是2016年春,那时候我还是本科三年级的学生.忘了第一次为啥去蹭课,印象中是我的榜样亮哥把我给忽悠过去的?我也记不清了,这并不重要.第一次上软工课,迷糊.忐忑,人很少,除了软件所的师兄师姐以外,也就五六人来上课,而我在中期过后,由于想去外面的世界浪一浪,就跑到杭州实习去了,也就没把恩师的第一次软工课完整上完,遗憾 .而庆幸的是我这个不咋滴的研究生身份,让我有机会再次来上恩师杨的软工课.这次我依然是作为一名旁

第一次软工实践体会

不知不觉,软工实践小学期已经进行了三天,一开始,老师就明确了我们最终要做出什么:一个客户信息维护软件 首先,我们需要安装编写软件的环境:my eclipse Java enterprise 要说明的是my eclipse和之前我们学习java语言所用的eclipse稍有出入MyEclipse企业级工作平台(My Eclipse Enterprise Workbench,简称MyEclipse)是对EclipseIDE的扩展,利用它可以在数据库和J2EE的开发.发布,以及应用程序服务器的整合方面极