说三道四技术文摘-感悟人生的经典句子
说三道四 > 文档快照

J2EE基础问题两三问,追加200分。

编辑:说三道四文库 发布时间:2018-07-19 10:09
HTML文档下载 WORD文档下载 PDF文档下载
在JAVA版问了不少问题了,可回复次数和质量都不尽如意。
但是不懂总的问,要毕业嘛,没办法。
我的毕业设计是基于J2EE的网络购书系统,已经完成大半了,由于是JAVA新手现在有些逻辑处理的问题卡在那里,课题进行不下去,万分焦急。
1,关于javabean的问题:
   A:在JSP页面中有很多逻辑是通过database里面的非主键来判断的(例如:我要通过bookname来查找我要的书,而数据库bookinfo表中的key是bookid)。问题是在EJB的home interface里只有public Home findByPrimaryKey(String key) ,public home findAll()两项,我想问的是如何在javabean或jsp中实现根据非主键来搜索数据库。希望热心的大大们能提供一份简单例子:)
   B:在javabean中有没有简单的方法实现搜索结果的排序。
2。关于数据库:
    a:在J2EE中是不是数据库表必须要有主键key的?
    b:由数据库自动生成的key(如id)在CMP中如何处理?
3。关于JSP页面的:
   我的系统中把BOOK加入购物车里,为什么必须刷新以后,页面上才能显示放入的单子?
4。中文乱码的问题:
   在tomcat中的解决方案在J2EE里是否依然有效?
我觉得你的问题大部分和j2ee没什么关系
1.用sql语句搜索就可以了like
2. a:不管j2ee闲事,数据库中可以有主健也可以没有主健. 
   b:为什么要用CMP呢,我觉得他有一个最大的缺少就是不够灵活.可以用BMP嘛,你要处理什么?
3.因为你的页面没有重新请求数据,怎么可能会显示呢.除非你自己做个事件
4.一样一样一样的.自己写一个过滤器,通过web.xml加载,或是在你的取值前加request.setCharacterEncoding("GB2312");
1 A.在EJB中可以添加FIND方法,可一查找非主键的字段
 B.在SQL语句中用ORDER BY 排序
1.如果你用jb,很简单,右健点你的entitybean就可以添加一个finder方法,输入QL语句,类似于sql语句,可以随意查询任何字段...
如果手写,那就改写你的各个接口和ejb-jar.xml文件 .具体就不说了,看相关文档...
2.用ejb必须有主键.即使一般的数据库设计也都要有主键的呀,没有的话那根本就是一个不合格的数据库.虽然也能用.
 排序你可以自己建一个排序类.继承java.util.Comparator;具体代码搜一下以前的帖子,我有贴过.
 b.cmp生成的主键?没什么不方便的地方吧?我没遇到过问题..
3.不知道你什么意思,数据库变了,页面是静态的,必须要重新读取数据库才会显示数据库的内容,当然要刷新...不可能不用刷新的.

4.中文乱码是个很经典的问题,有专门的文章论述,搜一下...
  最笨的就是把所有的字符串自己转换一下编码
 new String(原str.getByte(原编码),"gb2312")
原编码 = request.getcharactencoding()(方法名可能有误)


1.在ejb bean 里面实现,这是masterEjb2.0BMP的例子:
/**
 * Finds all Accounts by a name
 */
public Collection ejbFindByOwnerName(String name) throws FinderException {
PreparedStatement pstmt = null;
Connection conn = null;
Vector v = new Vector();

try {
System.out.println("ejbFindByOwnerName(" + name + ") called");

/*
 * Acquire DB connection
 */
conn = getConnection();

/*
 * Find the primary keys in the DB
 */
pstmt = conn.prepareStatement("select id from accounts where ownerName = ?");
pstmt.setString(1, name);
ResultSet rs = pstmt.executeQuery();

/*
 * Insert every primary key found into a vector
 */
while (rs.next()) {
String id = rs.getString("id");
v.addElement(new AccountPK(id));
}

/*
 * Return the vector of primary keys
 */
return v;
}
catch (Exception e) {
throw new FinderException(e.toString());
}
finally {
/*
 * Release DB Connection for other beans
 */
try { if (pstmt != null) pstmt.close(); }
catch (Exception e) {}
try { if (conn != null) conn.close(); }
catch (Exception e) {}
}
}

在ejb Home中声明:
public Collection findByOwnerName(String name) throws FinderException, RemoteException;
依我个人观点,不是所有问题都得用EJB或J2EE来解决的。EJB和J2EE主要是将一些棘手的比较繁琐的安全和事务问题由容器来处理,其实也不全是这样,象BMP的实体Bean。反过来说,有相当一部分问题完全可以用javabean来实现。主要问题是,必须把结构弄清楚。将前台—中间—后台彻底划分出来,各负其责。
关于中文问题:要注意,JSP和java中使用的编码是不同的。往往从request对象中取出参数值
时,都要进行转换,然后将参数传入数据库。
问题3:
我的addtocart.jsp的代码(参考他人的)

<%@ page contentType="text/html;charset=gb2312" %>
//<%@ page import="sun.net.smtp.SmtpClient, java.io.*" %>
<%@ page language="Java" import="java.sql.*" %>

<jsp:useBean id="trans" scope="session" class="dbms.charConvert" />
<jsp:useBean id="sqlbean" scope="session" class="dbms.Conn" />
<%
String userid;

userid=(String)session.getValue("userid");
if (userid==null)
{
response.sendRedirect("../login/login.htm");
}
%>
<%String bookid,isbn,bname,rmb;
bookid=request.getParameter("bookid");
isbn=request.getParameter("isbn");
bname=request.getParameter("bname");
bname = new String(bname.getBytes("ISO-8859-1"),"gb2312");
rmb=request.getParameter("rmb");

//以下为了判断是否用户已定购此书,若已定够则数量加一,若否则增加新纪录。
String forsql="select * from cart where userid='"+userid+"'and bookid='"+bookid+"'";
ResultSet rsfor=sqlbean.executeQuery(forsql);
if(rsfor.next())
{
String sql="update cart set num=num+1 where userid='"+userid+"'and bookid='"+bookid+"'";
sqlbean.updateDb(sql);
}
else
{
String sql="insert into cart(userid,bookid,isbn,bname,rmb) values('"+userid+"','"+bookid+"','"+isbn+"','"+bname+"','"+rmb+"')";
sqlbean.updateDb(sql);
}

//定向到显示购物彻页面
response.sendRedirect("cart.jsp");
%>
owenyang(和java 在一起)

您的例子在CMP中可用吗?
其实我的第一个问题很简单,就是如何在CMP环境下实现通过数据表中不同的属性查找需要的数据项。
3.用servlet好象不用刷新吧?
备案号:鲁ICP备13029499号-2 说三道四 www.s3d4.cn 说三道四技术文摘