1.servlet相关知识(servlet主要用于处理显式的表单请求URL请求或者隐身的cookie或者session。)
Servlet 是服务 HTTP 请求 并实现 javax.servlet.Servlet 接口的 Java 类。Web 应用程序开发人员通常编写 Servlet 类来继承 javax.servlet.http.HttpServlet,并实现相应 Servlet 接口。具体的参见http://docs.oracle.com/javaee/6/tutorial/doc/bnafv.html;
servlet中的doGet()和doPost()的方法分别用于处理方式为get和post的请求,其函数接口如下:
void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {}
void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {}
其中request和response是javax.servlet 和 javax.servlet.http中封装的两个类,有多种方法。
request可能包含整个表单数据或者URL请求,在doGet或者doPost中可以通过request.getParamter(String name)获得相应名称的参数值,在去处理一些相应的数据库操作。
Enumeration request.getAttributeNames();//获得所有属性值,返回枚举类型
2常见的注意事项
2.1页面跳转和消息提示生成
request.setAttribute(String name,String content );//设置名称为name的属性值为content
dispatcher.foward(request,response);//也可以执行跳转操作,完成相应的操作,并最终完成相应的结果
两者的区别在于request.setAttribute()这个只是在一个周期内完成(一个周期大概指的是一个请求,指的是通过浏览器请求并完成到下一个新页面跳转之前这段过程),前者是相当于重新生成了request和response,有点类似于变量覆盖或者重新赋值。后者就只是重新完成对原页面重新请求。
2.2 网络中中文字符传递乱码问题
这个问题必须要了解的是java中的网络传输使用的是ISO-8859-1的字符集,所以直接传递中文参数返回的是ISO-8859-1编码的信息,所以乱码的根本原因在于编码问题。
这个网络传递主要分两种,一种是url直接传递中文参数,另一种是是表单传递一定的中文参数。
解决办法:
在使用前使用java.net中分装好了的URLEncoder和URLDecoder两个类,其提供了解码和转码的静态方法。例如:
<a href=’./MyJsp2.jsp?act=<%=URLEncoder.encode("北京人 非常好 =-")%>’>testa>
在处理中可以使用如下的方式:
String tempVal = URLDecoder.decode(request.getParameter("act"));
out.println(new String(tempVal.getBytes("ISO-8859-1"), "gb2312"));
就可以将iso-8859-1编码的中文转换成gb2312的编码,便不会出现乱码。
3.创建邮件的过程
Properties prop = new Properties();//读取Java的配置文件
prop.setProperty("mail.host", "smtp.163.com");//设置SMTP服务器的主机信息
prop.setProperty("mail.transport.protocol", "smtp");
prop.setProperty("mail.smtp.auth", "true");
//使用JavaMail发送邮件的5个步骤
//1、创建session
Session session = Session.getInstance(prop);
//开启Session的debug模式,这样就可以查看到程序发送Email的运行状态
session.setDebug(true);
//2、通过session得到transport对象
Transport ts = null;
try {
ts = session.getTransport();
//3、使用邮箱的用户名和密码连上邮件服务器,发送邮件时,发件人需要提交邮箱的用户名username和密码给smtp服务器,用户名和密码都通过验证之后才能够正常发送邮件给收件人。
ts.connect("smtp.163.com", username, password);
//4、创建邮件
Message message = null;
message = createAttachMail(session,path,ms.getPostName(),email);
//5、发送邮件
ts.sendMessage(message, message.getAllRecipients());
ts.close();
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
private MimeMessage createAttachMail(Session session,String path,String subject,String email) throws Exception//创建一个附件邮件,其中MimeMessage是基于MIME协议封装的一个类,用于创建邮件
{
MimeMessage message=new MimeMessage(session);
message.setFrom(new InternetAddress("[email protected]"));//设置发件人
message.setRecipient(Message.RecipientType.TO, new InternetAddress(email));/设置收件人
message.setSubject("应聘:"+subject);
MimeBodyPart text = new MimeBodyPart();
text.setContent("来自于智能招聘平台", "text/html;charset=UTF-8");
MimeBodyPart attach=new MimeBodyPart();
DataHandler dh=new DataHandler(new FileDataSource(path));
attach.setDataHandler(dh);
attach.setFileName(dh.getName());
MimeMultipart mp=new MimeMultipart();
mp.addBodyPart(attach);
mp.addBodyPart(text);
mp.setSubType("mixed");//附件邮件设置为mixed模式
message.setContent(mp);
message.saveChanges();//更新报文头部相应的内容
return message;
}