姓名: 魏增 学号: 6102213869 专业班级: 航天131班
实验名称:云计算课期中考试
实验目的: 1、掌握如何把Web程序部署到任意一个公共云平台。
2、熟悉利用云平台的数据库。
3、学习微信API的开发。
问题描述:在本地编译好带有数据库的java Web程序后,将该程序部署到任意一个公共的云平台上,利用云平台提供的数据库,之后在利用微信开发API去读取部署到云平台上的java Web程序。
实验要求:1、需要提交设计报告打印稿和电子稿
2、提交时间:本学期15周
实验内容:(1)选取任意一个“Web程序设计实验”,将实现的Java Web程序部署到任意一个公共云平台。
(2)【选做】选取带有后台数据库的Web程序
(3)【选选做】利用微信(公众号)开发API,读取公共云平台中的Web程序
操作步骤:
【第一步】选做web实验三本地测试:
实验内容 :
本实验使用MVC实现学生信息管理系统的基本功能。在MVC模式中,倡导控制、模型(逻辑)和视图分离,在JSP开发的系统中,Servlet用于控制系统的运行流程,JavaBean用于业务逻辑处理、数据传输和数据持久化,而JSP用于显示系统的处理结果。相应的软件结构也分为4层:表现层、控制层、逻辑层和持久层,另有数据传输层在各层之间传递数据。
1、实现学生信息的修改和删除操作;
2、实现学生信息的查询操作,可以指定学号、姓名、专业等,也可以查询所有学生;
3、实现学生修改自己信息的功能,但只能修改本人信息(禁止修改他人信息),且只能修改“出生日期”和“密码”,其他信息禁止修改(只能由管理员(教师)修改)。
提示:在登录LoginServlet中修改代码,将查到的Role对象的roleId属性也保存在session中,点击“修改本人信息”链接时,直接从session获取roleId(对应用户的ID)查到该记录,然后进行修改。
4、实现教师信息的录入、查询、修改和删除操作。
具体过程:【项目已经上传到附件里了没有图片(太大了)可运行,使用前请仔细阅读(试用前必读.txt)】
//** 不知道怎么开头写这个报告有两个作用交老师的报告,还要写个博客作为记录,为后面的学弟学妹做帮助。所以不知道写简单点还是复杂点。注:因为还要放到博客上所以内容也是比较狂野,表现作者个性,请读者不要介意。
1、登录 (先来个漂亮的首页)这个界面很简单不做介绍,数据提交到LoginServlet
调用 login = loginDao.getSearchByname(username, password);判断是否为空!LoginServlet代码只给出重要部分/*String sql="select * from login where name=? and password=?";
loginBean login=null;
try {
pre=con.prepareStatement(sql);
pre.setString(1, name);
pre.setString(2,password);
rs=pre.executeQuery();
if(rs.next()){
login=new loginBean();
login.setName(rs.getString("name"));
login.setPassword(rs.getString("password"));
login.setRole(rs.getByte("role"));
}
*/ //这样登录就做完了登录成功就会设置session参数为request.getSession().setAttribute("username", username);
request.getSession().setAttribute("password", password);
request.getSession().setAttribute("roleName", login.getRole());//然后跳转到Main.jsp页面如图,只放了一个连接<a href=”DisStudent.jsp”>学生列表</a>
【】然后转到主页面(DisStudent.jsp)显示学生列表这里会判断session里的权限如果是学生(Role==1)只能显示自己的信息也只能做修改操作:如图
学生权限显示(DisStudent.jsp)列表代码:<%
if(Integer.parseInt(Role) == 1) {
com.util.StudentBean stuBean = stuDAO.getSearchByname(name, password);
//获得StudentBean的一个对象
%>
<TR>
<TD><%=stuBean.getId() %></TD>
<TD><input type="text" value="<%=stuBean.getName() %>"/></TD>
<TD><input type="text" value="<%=stuBean.getNumber() %> "/></TD>
<TD><input type="text" value="<%=stuBean.getMajor() %>"/></TD>
<TD><input type="text" value="<%=stuBean.getAge() %>"/></TD>
<TD><input type="text" value="<%=stuBean.getSex() %>"/></TD>
<TD><input type="text" value="<%=stuBean.getGender() %>"/></TD>
<TD><input type="text" value="<%=stuBean.getBirthday() %>"/></TD>
<TD><input type="password" value="<%=stuBean.getPassword()%>"/></TD>
<TD><a href="update.jsp?id=<%=stuBean.getId() %>">修改</a></TD>
<%
if(Integer.parseInt(Role) == 1){
out.print("<h1>你丫的权限不够,无法删除!!</h1>");
}
%>
// 这里调用了stuDAO.getSearchByname(name, password);方法封装在StudentDAO.java里面还是只给出部分重要代码String sql="select * from student where name=? and password=?";
StudentBean student=null;
try {
pre=con.prepareStatement(sql);
pre.setString(1, name);
pre.setString(2,password);
rs=pre.executeQuery();
if(rs.next()){
student=new StudentBean();
student.setAge(rs.getInt("age"));
student.setBirthday(rs.getString("birthday"));
student.setGender(rs.getString("Gender"));
student.setId(rs.getString("id"));
student.setMajor(rs.getString("major"));
student.setName(rs.getString("name"));
student.setNumber(rs.getString("number"));
student.setSex(rs.getString("sex"));
student.setPassword(rs.getString("password"));
}
***如果是教师(Role==0 || Role==2)就可以查看所有学生列表并且可以随意修改删除并实现查询功能(DisStudent.jsp)代码为: if(Integer.parseInt(Role) == 2 || Integer.parseInt(Role) == 0) {
java.util.List<com.util.StudentBean> list = stuDAO.getSearch();
for (com.util.StudentBean stuBean:list) {
//获得StudentBean的一个对象
%>
<TR>
<TD><%=stuBean.getId() %></TD>
<TD><input type="text" value="<%=stuBean.getName() %>"/></TD>
<TD><input type="text" value="<%=stuBean.getNumber() %> "/></TD>
<TD><input type="text" value="<%=stuBean.getMajor() %>"/></TD>
<TD><input type="text" value="<%=stuBean.getAge() %>"/></TD>
<TD><input type="text" value="<%=stuBean.getSex() %>"/></TD>
<TD><input type="text" value="<%=stuBean.getGender() %>"/></TD>
<TD><input type="text" value="<%=stuBean.getBirthday() %>"/></TD>
<TD><input type="password" value="<%=stuBean.getPassword()%>"/></TD>
<TD><a href="update.jsp?id=<%=stuBean.getId() %>">修改</a></TD>
<TD><a href="servlet/Delete?id=<%=stuBean.getId()%>">删除</a></TD>
<%
}
if(Integer.parseInt(Role) == 1){
out.print("<h1>你丫的权限不够,无法修改和删除!!</h1>");
}
%>
</TABLE>
<p style="top: auto;right: auto;text-align: center;"><a href="AddStudent.jsp">添加学生</a></p>
<form style="top: auto;right: auto;text-align: center;" action="SearchResulet.jsp">
<p>学号:<input type="text" name="number"/></p>
<p>姓名:<input type="text" name="studentName"/></p>
<p>专业:<input type="text" name="major"/></p>
<p><input type="submit" name="查询"/></p>
<% }%>
这里调用了stuDAO.getSearch()方法返回一个学生(StudentBean)的列表代码为:String sql="select * from student";
ArrayList<StudentBean> list=new ArrayList<StudentBean>();
//获得prepareStatement对象
try {
pre=con.prepareStatement(sql);
rs=pre.executeQuery();
while(rs.next()){
StudentBean student=new StudentBean();
student.setAge(rs.getInt("age"));
student.setBirthday(rs.getString("birthday"));
student.setGender(rs.getString("Gender"));
student.setId(rs.getString("id"));
student.setMajor(rs.getString("major"));
student.setName(rs.getString("name"));
student.setNumber(rs.getString("number"));
student.setSex(rs.getString("sex"));
student.setPassword(rs.getString("password"));
list.add(student);
}
【】然后下一个版本就是怎样实现修改和删除的功能了,因为删除比较简单,就不在粘贴源代码了,重点介绍如何修改:当点击修改连接是跳转到Update.jsp 页面并且把要修改的id传过去,然后在Update.jsp页面通过id找到数据库里的数据并用form表单显示出来、如图:
实现这个功能主要是在jsp页面上调用了一个方法stuDAO.getSearchById(request.getParameter("id"))展现出来就可以了,这个方法也是封装在StudentDAO.java里面。//讲到这里相信这个方法也不用给出代码了,根据前面的类似方法就能够写的出来了。
【】展现出来之后就是修改内容点击提交把参数提交到UpdateServlet 然后在把接收到的参数封装到一个StudentBean中
调用=StudentDAO.getUpdate(student,request.getParameter("id"))方法
方法具体代码为:String sql="update student set name=?,number=?,major=?,age=?,sex=?,Gender=?,birthday=?,password=? where id=" + id;
int count=0;
try {
pre=con.prepareStatement(sql);
pre.setString(1,student.getName());
pre.setString(2,student.getNumber());
pre.setString(3,student.getMajor());
pre.setInt(4,student.getAge());
pre.setString(5,student.getSex());
pre.setString(6,student.getGender());
pre.setString(7,student.getBirthday());
pre.setString(8,student.getPassword());
count=pre.executeUpdate();
}
当数据库的数据通过上面的代码修改之后直接跳转到显示学生列表(DisStudent.jsp)页面拿出修改后的数据就可以了。
【注:上述修改那个功能显示时如果是学生(判断Role==1)登录的就只显示修改生日和密码、展现实现代码如下、这里主要是通过把其他的属性type设置成”hidden”然后在显示一下就可以了】<jsp:useBean id="stuDAO" class="com.dao.StudentDAO"/>
<%
if(Integer.parseInt(Role) == 1){
com.util.StudentBean stuBean = stuDAO.getSearchById(request.getParameter("id"));
%>
<form style="top: auto;right: auto;text-align: center;" action="servlet/UpdateServlet">
<p>学号:<input type="hidden" name="number" value="<%=stuBean.getNumber() %>"/><%=stuBean.getNumber() %></p>
<p>姓名:<input type="hidden" name="studentName" value="<%=stuBean.getName() %>"/><%=stuBean.getName() %></p>
<p>年龄:<input type="hidden" name="age" value="<%=stuBean.getAge() %>"/><%=stuBean.getAge() %></p>
<p>性别:<input type="hidden" name="studentSex" value="<%=stuBean.getSex() %>"/><%=stuBean.getSex() %></p>
<p>出生日期:<input type="text" name="studentBirthday" value="<%=stuBean.getBirthday() %>"/></p>
<p>专业:<input type="hidden" name="major" value="<%=stuBean.getMajor() %>"/><%=stuBean.getMajor() %></p>
<p>学年:<input type="hidden" name="Gender" value="<%=stuBean.getGender() %>"/><%=stuBean.getGender() %></p>
<p>密码:<input type="password" name="password" value="<%=stuBean.getPassword()%>"/></p>
<p>
<input type="hidden" name="id" value="<%=stuBean.getId() %>"/>
<input type="submit" value="确认修改"/>
</p>
<% }%> //如图
【好了下一个功能就是搜索查询了,稍微有点好玩】展现放在DisStudent.jsp里面把姓名、学号、专业三个参数可以为空传到SearchResulet.jsp 页面 这里主要调用了stuDAO.getSearch(name, number, major)方法返回一个StudentBean 的列表再循环拿出来展现。(这个方法写的稍微有点意思!)
代码:public ArrayList<StudentBean> getSearch(String name,String number,String major){
String sql1="select * from student where name=" + "\"" + name + "\"";
String sql2="select * from student where number=" + "\"" + number + "\"";
String sql3="select * from student where major=" + "\"" + major + "\"";
String sql[] = new String[3];
sql[0] = sql1;
sql[1] = sql2;
sql[2] = sql3;
ArrayList<StudentBean> list=new ArrayList<StudentBean>();
//获得prepareStatement对象
try {
for(int i=0;i<3;i++){
pre=con.prepareStatement(sql[i]);
rs=pre.executeQuery();
while(rs.next()){
StudentBean student=new StudentBean();
student.setAge(rs.getInt("age"));
student.setBirthday(rs.getString("birthday"));
student.setGender(rs.getString("Gender"));
student.setId(rs.getString("id"));
student.setMajor(rs.getString("major"));
student.setName(rs.getString("name"));
student.setNumber(rs.getString("number"));
student.setSex(rs.getString("sex"));
list.add(student);
}
}
【至此应该算是本地功能可实现了】
【第二步】将项目部署到新浪云平台:(当然在这之前我已经有过经验了)
(1)进入新浪云点击云应用SAE、进入控制台、创建应用设一个二级域名然后下面选A型 JVM数量选一个,确定创建就可以了(会提示每小时耗费5个云逗,还是比较经济实惠的)。如图
(2)第二步:进入刚才创建的引用左边有应用、代码管理、(当然这里我们选择上传war包,也可以用SVN在线管理代码,稍微有点复杂不做介绍了)、提示创建版本选择默认版本号为1 建好之后如图
(3)第三步:创建云端数据库建立数据表并实现Connection 连接代码更改>左边选择数据库与缓存服务选择共享型数据库> 初始化数库> 管理数据库(可能会提示输入安全密码、进入数据库管理界面选择SQL如图)>
【数据库建表并插入数据】login 表:
create table login(
name varchar(20) primary key,
password char(8),
role char(8)
);
//插入的数据:
insert into login values("aaa","aaa",0);
insert into login values("student","student",1);
insert into login values("teacher","teacher",2);
//student 表:
create table student(
id int primary key auto_increment,
name varchar(10),
number varchar(10),
major varchar(10),
age int,
sex varchar(10),
Gender varchar(10),
birthday varchar(10),
password varchar(25)
);
//插入的数据
insert into student values(null,"大白菜", "6102213869", "航天班", 18, "男", "大三", "1994-08-09","wei1126shazi");
insert into student values(null,"student", "6102213871", "航天班", 18, "女", "大三", "1994-08-09","student");
insert into student values(null,"teacher", "6102213871", "航天班", 18, "女", "大三", "1994-08-09","teacher");
【借下来的一步很重要】返回到上一个页面可以看到新浪云数据库的地址、端口、数据库名称、用户名、密码、如图
接下来用上述信息去修改项目里connection 连接语句如图
【好了最后一步打war包】在项目名称上右键> export> 选war file > next > 选择一个目录命名war包时要跟新浪云的应用名一样(然而之前我并没有这样命名却可以成功部署访问),接下来到 新浪云端的代码管理在应用后边 选择上传war包。等待刷新一下,就可以成功访问了,如图://看地址就知道是成功了,哈哈!
总结和感想: