实验报告一
201026810304_软工1001班_程银超
一. 数据库表格及记录:
创建数据库SQL:
创建数据库表SQL:
插入几条记录:
二. 使用JDBC访问数据库结果:
代码:
<%@ page language="java" contentType="text/html; charset=gbk"
pageEncoding="gbk"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gbk">
<title>Test Mysql</title>
</head>
<body>
<%@ page import="java.sql.*" %>
<%
Class.forName("com.mysql.jdbc.Driver");
Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/Testdb","root","");
Statement st=conn.createStatement();
st.setMaxRows(20);
String sqlStr="select * from rgusers";
ResultSet rs=st.executeQuery(sqlStr);
while(rs.next())
{%>
<%=rs.getString("username")%> <br>
<%
}
rs.close(); st.close(); conn.close();
%>
</body></html>
三. 使用连接池技术访问数据库结果:
代码:
<%@ page language="java" contentType="text/html; charset=gbk"
pageEncoding="gbk"%>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gbk">
<title>Test Mysql</title>
</head>
<body>
<%@ page import="java.sql.*" %>
<%@ page import="javax.sql.*" %>
<%
DataSource dataSource;
Context context=new InitialContext();
dataSource=(DataSource)context.lookup("java:comp/env/jdbc/Testdb");
Connection dbConnection=null;
dbConnection=dataSource.getConnection();
Statement st=conn.createStatement();
st.setMaxRows(20);
String sqlStr="select * from rgusers";
ResultSet rs=st.executeQuery(sqlStr);
while(rs.next())
{%>
<%=rs.getString("username")%> <br>
<%}
rs.close(); st.close(); conn.close();
%>
</body>
</html>
实验收获及碰到的问题:
问题:
Mysql在dos下真是难打啊!
刚开始不知道该怎么用,后来通过一系列方法才做出了数据库,dos跟以前的其他数据库的图形界面有很大差异,一步错步步错!
本科实验报告
课程名称: Java EE编程技术
实验项目: 语法基础代码风格实验
实验地点: 逸夫楼404
专业班级:软件1028 学号: 2010005249
学生姓名: 赵才轩
指导教师: 高保禄
2013 年 4 月 26 日
一.实验目的
熟悉Java、JSP、Servlet、Html等相关语法,培养良好的代码风格,为其他实验做好准备。
二.实验内容
熟悉NetBeans开发环境,通过编写一个Jsp调用Servlet的程序,熟悉Java、JSP、Servlet、Html等相关语法,培养良好的代码风格。可以任选以下任一题目:
A. 网站计数器;
B. 简易购物车;
C. 编写一个自定义标记,将Servlet返回的英文字符串转换为大写。
三、实验要求:
参照课本,快速熟悉相关内容,按所需题目编写程序,熟悉Java等编程语言或技术的基本编程技巧,注重良好的代码风格(如变量命名、代码注释、Servlet与类中代码的结构等),初步掌握编写Web应用程序的能力。
2)设法在用户主目录中以home_mycal的文件名来调用mydir/mycal文件。
四、实验环境:
软件环境:Windows 7/XP/2000/2003/2008,NetBeans5.5.1/6.5/7.3;
硬件环境:P4 2.4G/80G/1G/64M及较高配置的PC机。
五、实验步骤和实验结果:(A、B、C三个实验都有)
A.网站计数器:
(1)思维方法:首先,网页浏览次数每个用户都可以查看,所以用Servlet上下文去保存数据;再者:网站计数器要确保在网页重新部署时或服务器重新启动时记得数不会从1开始,所以,我选择用文件把Servlet上下文的数据进行保存;最后,如果在用户访问一次就要读写文件的话,这样效率会很低,所以我利用Servlet的生命周期,把文件的读放在init()方法中,把文件的写放在destory()方法中,这样就完成了对浏览网页的计数。
(2)实现方法:(由于代码较多,所以选择重要的代码写入报告中)
l Init()方法:(实现了读文件,如果不存在文件则创建一个,并写入初值)
public void init() throws ServletException {
String counter=null;
File FCounter=new File("j:\\counter.txt");
if(!FCounter.exists())
try {
FCounter.createNewFile();
FileWriter fw=new FileWriter("j:\\counter.txt");
BufferedWriter bw=new BufferedWriter(fw);
bw.write("0");
bw.close();
} catch (IOException ex) {
Logger.getLogger(ZCXWebCount.class.getName()).log(Level.SEVERE, null, ex);
}
try {
FileReader fr=new FileReader("j:\\counter.txt");
BufferedReader br=new BufferedReader(fr);
try {
counter=br.readLine();
br.close();
} catch (IOException ex) {
Logger.getLogger(ZCXWebCount.class.getName()).log(Level.SEVERE, null, ex);
}
} catch (FileNotFoundException ex) {
Logger.getLogger(ZCXWebCount.class.getName()).log(Level.SEVERE, null, ex);
}
this.getServletContext().setAttribute("counter", counter);
}
l Destory()方法:(实现了跟新文件内容的功能)
public void destroy() {
String counter=null;
try {
FileWriter fw=new FileWriter("j:\\counter.txt");
BufferedWriter bw=new BufferedWriter(fw);
counter=(String) this.getServletContext().getAttribute("counter");
bw.write(counter);
bw.close();
} catch (IOException ex) {
Logger.getLogger(ZCXWebCount.class.getName()).log(Level.SEVERE, null, ex);
}
}
l processRequest()方法:(实现了用户浏览后加一的功能,以及显示给用户)
protected void processRequest(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("text/html;charset=UTF-8");
PrintWriter out = response.getWriter();
String counter=null;
counter=(String) this.getServletContext().getAttribute("counter");
int count=Integer.parseInt(counter);
count++;
counter=String.valueOf(count);
this.getServletContext().setAttribute("counter", counter);
try {
out.println("<html>");
out.println("<head>");
out.println("<title>网站计数器</title>");
out.println("</head>");
out.println("<body>");
out.println("<center><h1>赵才轩网页计数器</h1>");
out.println("<h1>访问次数:" +this.getServletContext().getAttribute("counter") + "</h1>");
out.println("</center></body>");
out.println("</html>");
} finally {
out.close();
}
}
(3)简易截图:
B.简易购物车
(1)思维方法:首先,在这个简易的购物车中我不设计数据库,只是从简单的思路中说明问题,所以我的商品数据在jsp页面中体现,并且各个商品的默认属性都是一致的,只是数据不同,这些属性用表单的形式发送处理;再者,我用对象ArrayList去收集购物车中的数据,并用会话session中的setAttribute()方法去保存用户的购物车,再用getAttribute()方法把购物车中的数据显示给用户,最后,在显示出购物车的数据后可以再放回商品页面继续购物。
(2)实现方法:(由于在jsp页面中只是显示了商品信息,所以,在报告中只简单列出一个商品页面)
l 显示主菜单,也就是在ZCXShoping.jsp中所以商品的简单信息。(由于重复代码太多,这里不给出代码了)
l 点击查看详细信息进入此商品的详细信息。(简单列出一个商品的信息)
<%@page contentType="text/html" pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>zcx电脑</title>
</head>
<body>
<h1>zcx电脑</h1>
<form action="ZCXShopingCl" method="post">
<table width="100%">
<tr><td>商品:<input type="text" name="zcx1" style="border: 0px;" value="zcx电脑"/></td></tr>
<tr><td>价格:¥<input type="text" name="zcx2" style="border: 0px;" value="10000"/></td></tr>
<tr><td>颜色:<select name="zcx3">
<option>蓝色<option>红色<option>银色<option>黑色
</select></td></tr>
<tr><td>个数:<input type="text" name="zcx4" size="3"/></td></tr>
<tr><td><input type="submit" value="加入购物车"/></td></tr>
</table>
</form>
</body>
</html>
l 点击加入购物车后进行处理,用servlet ZCXShopingCl.java进行处理并显示购物车中的信息。
processRequest()方法:
protected void processRequest(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("text/html;charset=UTF-8");
request.setCharacterEncoding("UTF-8");
PrintWriter out = response.getWriter();
String zcx1=request.getParameter("zcx1");
String zcx2=request.getParameter("zcx2");
String zcx3=request.getParameter("zcx3");
String zcx4=request.getParameter("zcx4");
String zcx="商品:"+zcx1+"   价格:¥"+zcx2+"   颜色:"+zcx3+"   个数:"+zcx4;
HttpSession session=request.getSession();
ArrayList Goods=(ArrayList)session.getAttribute("Goods");
Goods.add(zcx);
session.setAttribute("Goods", Goods);
try {
out.println("<html>");
out.println("<head>");
out.println("<title>购物车</title>");
out.println("</head>");
out.println("<body><center>");
out.println("<h1>欢迎进入赵才轩购物车</h1>");
for(int i=0;i<Goods.size();i++)
out.println(Goods.get(i)+"<br/><br/>");
out.println("<a href="+"ZCXShoping.jsp"+">回到购物页面</a>");
out.println("</center></body>");
out.println("</html>");
} finally {
out.close();
}
}
(3)简易截图:
v 进入中页面ZCXShoping.jsp页面
v 查看详情zcx电脑
v 填入相关属性后,点击加入购物车,可以看到所选商品的信息。
v 点击返回购物页面,继续按上述步骤操作几次。
说明:这只是完成了简单的购物车,如果还想加其他功能,比如说计算总价等之类的功能还可以实现。
C.编写一个自定义标记,将Servlet返回的英文字符串转换为大写
(1)思维方法:要处理的对象是字符串,所以这个标记必须有一个字符串属性,明确了这点后就可以为次标记先建立标记描述符,然后在生成标记处理程序,最后在jsp页面中进行说明,引用。
(2)实现方法:
Ø 新建一个标记描述符ZhuanHuan.tld(只提供主要代码)
<tag>
<name>ZCXZhuanHuanCl</name>
<tag-class>zcx.biaoji.ZCXZhuanHuanCl</tag-class>
<body-content>scriptless</body-content>
<attribute>
<name>biaoji</name>
<rtexprvalue>true</rtexprvalue>
<type>java.lang.String</type>
</attribute>
</tag>
Ø 新建一个标记处理程序ZCXZhuanHuanCl.java(只提供主要代码)
private String biaoji;
@Override
public void doTag() throws JspException {
JspWriter out = getJspContext().getOut();
try {
out.println("Servlet变大写:" +biaoji.toUpperCase());
JspFragment f = getJspBody();
if (f != null) {
f.invoke(out);
}
} catch (java.io.IOException ex) {
throw new JspException("Error in ZCXZhuanHuanCl tag", ex);
}
}
Ø 编写ZCXXianShi.jsp引用标记
<%@page contentType="text/html" pageEncoding="UTF-8"%>
<%@taglib uri="/WEB-INF/tlds/ZhuanHuan.tld" prefix="zcx01" %>
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>JSP Page</title>
</head>
<body>
<center>
<h1>赵才轩标记处理</h1>
<zcx01:ZCXZhuanHuanCl biaoji="Servlet"/>
</center>
</body>
</html>
(3)简易截图
² 部署后运行ZCXXianShi.jsp
六、实验心得
其实做实验才是提高自身职业能力的时候,从大二开始完完整整的做完数值计算试验后对编程的思想有了极大的提高,从这门课开始,感觉已经不是编码实现就万事大吉了,而重要的是思想,是思路,要完成一个需求,必须的文档是决定成功的重要因素,在本次实验中思路都比较简单,没有必要做相关文档,主要是让我们熟练各种技术,但是,这几个实验中我的收获还是相当大的,深刻理解了session,servlet生命周期,容器、组件等概念,我记得在大二的时候我很纳闷,如此多的代码,程序员的脑子能接受吗?当时我们学习的时候看见代码就生畏,然而,今天的我明白了面向对象的正真含义,就是这样一个思想才使程序员能够轻轻松松的看懂代码,在本次实验中,有自定义标记的引用,其实也是为了简化代码,我们一看到所谓的标记就知道他的作用,虽然有时我们并不知道它怎么实现的,但是比起读几万行的代码我们轻松多了,而且这些机制不仅可读性好,而且容易维护和改进,我不得不佩服外国人的思想,他们就是在不断的简化我们的生活,所以,我们学习不仅要学技术,而且要学思想,这样才能是自己进步的更快!
JavaEE基础实验报告2实验名称Servlet的开发应用实验目的1掌握Servlet的一般开发过程2掌握servlet的配置3掌…
Javaee开发技术实验报告辅导员意见:实验名称:STRUTS框架技术及应用计算机科学与工程系计算机科学与技术专业班第实验小组作者…
JavaEE实验报告本科实验报告课程名称:JAVAEE编程技术实验项目:语法基础与代码风格实验实验地点:逸夫楼302专业班级:学号…
延安大学计算机学院实验报告附页延安大学计算机学院实验报告附页延安大学计算机学院实验报告附页延安大学计算机学院实验报告附页延安大学计…
院系计算机科学学院专业计算机科学与技术专业年级09级课程名称JavaEE编程技术学号09061059姓名蓝潇莹指导教师徐胜舟20x…
软件学院设计性实验报告一实验目的1熟练掌握SSH3个框架的加载2熟练掌握各框架配置文件的结构和标记3掌握框架集成的方法和步骤二实验…
中南民族大学计算机科学学院JavaEE实验报告20xx20xx第一学期课程名称J2EE及其应用院系年级20xx专业计算机科学与技术…
JAVAEE开发技术实验报告第四次实验实验题目JavaEE开发环境安装和配置桂林电子科技大学计算机科学与工程学院1实验目的掌握Ja…
JavaEE基础实验报告2实验名称Servlet的开发应用实验目的1掌握Servlet的一般开发过程2掌握servlet的配置3掌…