分类号:TP311.1 UD C:D10621-408-(2007) 5926-0 paper51.com
图6 非法用户登录页面 paper51.com 当用户登录名不存在时所显示的页面如图7所示。 http://www.paper51.com http://www.paper51.com
内容来自论文无忧网 www.paper51.com
图7 用户名不存在时显示的页面 copyright paper51.com 主要代码: 内容来自www.paper51.com
html:formaction="/login.do" method="post"> paper51.com 该代码是在Login.jsp中实现由用户提交表单后提交到的控制器位置。提交方法为post. copyright paper51.com <action name="login"path="/login" scope="session" 内容来自www.paper51.com type="com.action.LoginAction"input="/Login.jsp"> 内容来自论文无忧网 www.paper51.com <forward name="recev"path="/reseviAll.jsp"></forward> 内容来自www.paper51.com <forward name="return"path="/Login.jsp"></forward> 内容来自www.paper51.com
</action> paper51.com
而在Struts框架中的关键是对核心配置文件Struts-Config.xml的配置, 该配置决定了整个应用程序的程序控制。该代码是在对Login.jsp提交上来的Action和ActionForm的查找做部署。名字为"login",提交路径为path="/login",生存周期为会话,该控制器的物理路径为type="com.action.LoginAction",<forward 标签为当控制器处理完后返回一个Actionorward的对象,该对象将在该标签内对应,查找到对应的name属性后,根据path跳转到对应的jsp.该action的name属性将找对应的ActionForm进行相应的表单填充。actionForm的配置代码如下 http://www.paper51.com <form-beanname="login" type="org.apache.struts.validator.DynaValidatorForm"> 内容来自www.paper51.com <form-propertyname="name"type="java.lang.String"></form-property> http://www.paper51.com <form-property name="pass"type="java.lang.String"></form-property> 内容来自www.paper51.com <form-property name="server"type="java.lang.String"></form-property> 内容来自论文无忧网 www.paper51.com </form-bean> 内容来自www.paper51.com 该ActionForm是一个动态的ActionForm,该类继承于 paper51.com org.apache.struts.validator.DynaValidatorForm,在<form-property标签里面指定他的属性和类型。 paper51.com
在对表单的非空验证的时候用了Validator验证框架,该框架的配置文件如下: 内容来自www.paper51.com <plug-inclassName="org.apache.struts.validator.ValidatorPlugIn"> paper51.com
<set-property property="pathnames" value="/WEB-INFalidator-rules.xml, copyright paper51.com /WEB-INF alidation.xml"/> 内容来自www.paper51.com </plug-in> copyright paper51.com 对应的配置文件的实现如下代码: copyright paper51.com <formname="login"> paper51.com <field property="name"depends="required"> http://www.paper51.com <arg0 key="name"/> paper51.com </field> http://www.paper51.com <field property="pass"depends="required"> http://www.paper51.com <arg0 key="pass"/> http://www.paper51.com
</field> http://www.paper51.com </form> copyright paper51.com </formset> 内容来自www.paper51.com 上面的代码是对表单的非空验证,<form name="login">是对应的要验证的表单名字,<fieldproperty="name" depends="required">中property为指定要验证的表单控件名字,depends为验证方法,该方法在Validator验证框架中已经定义。可以查阅alidator-rules.xml配置文件。 <arg0 key="pass"/> 内容来自www.paper51.com 为要输出信息的差数,该差数可以在资源文件中定义。 内容来自论文无忧网 www.paper51.com public ActionForwardexecute(ActionMapping mapping,ActionForm form, copyright paper51.com HttpServletRequestrequest,HttpServletResponse response){ 内容来自www.paper51.com DynaActionForm ac=(DynaActionForm)form; 内容来自www.paper51.com String ser=null; copyright paper51.com
if(((String)ac.get("server")).equals("1")){ 内容来自论文无忧网 www.paper51.com ser=(String)ac.get("name")+"@163.com";} http://www.paper51.com
elseif(((String)ac.get("server")).equals("2")){ paper51.com ser=(String)ac.get("name")+"@sina.com";} paper51.com
elseif(((String)ac.get("server")).equals("3")){ 内容来自www.paper51.com ser=(String)ac.get("name")+"@yahoo.com";} http://www.paper51.com 上面代码是控制器实现对用户权限的合法性的判断。其中Action是Struts框架中的控制器,通过重写它的execute方法实现Struts控制器。DynaActionForm ac=(DynaActionForm)form为实例已经填充的ActionForm对象。通过用户在下拉列表中选择的邮箱来判断代理服务器的名字。 http://www.paper51.com 对用户是否在数据库中存在的方法的调用 copyright paper51.com
CheckU cu=new CheckU(); copyright paper51.com booleant=cu.check((String)ac.get("name"),(String)ac.get("pass"),ser); paper51.com
HttpSessionsession=request.getSession(); 内容来自www.paper51.com session.setAttribute("server",ser); http://www.paper51.com if(t==false){ 内容来自论文无忧网 www.paper51.com ActionErrorserrors = new ActionErrors(); http://www.paper51.com
errors.add(ActionErrors.GLOBAL_ERROR,new ActionError("index.error")); 内容来自www.paper51.com this.saveErrors(request,errors); 内容来自论文无忧网 www.paper51.com
returnmapping.findForward("return");} http://www.paper51.com 如果数据库中该用户名字存在则返回一个TRUE,通过判断来选择是跳转到哪个页面。return mapping.findForward("return")就是返回一个在Struts-config.xml中存在的forward对象。 paper51.com publicboolean check(String name,String pass,String server){ 内容来自论文无忧网 www.paper51.com String sql="select * from Userinfo where uname=(?)and pass=(?) and server=(?)"; http://www.paper51.com 查询的游标字符串。 paper51.com booleanT=false; 内容来自www.paper51.com try{Class.forName(ul);} http://www.paper51.com
建立驱动。 http://www.paper51.com catch(ClassNotFoundExceptione){e.printStackTrace();} http://www.paper51.com try{Connection con=DriverManager.getConnection(ur); copyright paper51.com 建立连接 http://www.paper51.com try{PreparedStatementpt=con.prepareStatement(sql); copyright paper51.com
建立预编译对象。 内容来自www.paper51.com try{ pt.setString(1,name); 内容来自论文无忧网 www.paper51.com pt.setString(2,pass); http://www.paper51.com pt.setString(3,server); 内容来自论文无忧网 www.paper51.com 设置编译对象的差数。 paper51.com
ResultSetrs=pt.executeQuery(); http://www.paper51.com
用结果集来存储返回记录。 paper51.com while(rs.next()){T=true;}} http://www.paper51.com 如果有该记录返回真。 http://www.paper51.com finally{pt.close();}} paper51.com finally{con.close();}} copyright paper51.com catch(SQLExceptionq){q.printStackTrace();} paper51.com returnT; } copyright paper51.com 4.3 邮件发送模块 paper51.com
登录成功后点击超链接进入发邮件箱,在这里用户可以输入相应的信息,可超链接到发件箱,输入内容表单提交,进入控制器SendM,在execute方法里调用邮件发送核心代码(SendText.java),在该方法中利用SMTP发送邮件的代码,发送邮件主要需要4个主要的对象,Session对象,建立连接;Prop是Properties的对象,Properties是java.util包下的类,是一个集合类,封装SMTP协议的类;MimeMessage类,通过该对象来实现网络数据的传输,将发件人添加到列表中;sendmail为从表单中提交来的路径的字符串形式。通过他将正文和附件内容分开封装进行传输;附件以DataSource类型保存。发送邮件,从MimeMessage对象中获得发送人的地址列表,发送成功后进入secces界面。 内容来自www.paper51.com
http://www.paper51.com 内容来自论文无忧网 www.paper51.com |