JavaWab基础

来源:互联网 发布:屠龙战记翅膀进阶数据 编辑:程序博客网 时间:2024/06/08 14:24
1 jsp指令和动作 测试
(1)page指令:
import:<%@ page import="包名.类名" %>
pageEncoding:设定字符集
errorPage:设定错误页面
isErrorPage:用来设置错误页的标记
contentType:设定MIME类型和字符编码
(2)include指令: <%@ include file="logo.jsp"%>
注意的问题:
被包含的页面和本页面有相同的变量,报错
被包含的页面URL中携带参数,报错
(3)include动作:<jsp:include page="文件名"/>
include动作可以在每次客户端发出的请求时重新把资源包含进来,实时的更新。
include一个子元素jsp:param用来传递参数
<jsp:include page="文件名">
<jsp:param name="参数名" value="参数值"/>
</jsp:include>


(4)forward动作 使用时地址栏中的地址是不变的
<jsp:forward page="文件名">
include一个子元素jsp:param用来传递参数
2 两种跳转方法的区别
<jsp:forward page="文件名">和<%response.sendRedirect("文件名")%>
(1)使用forward的请求时浏览器中的地址不变,属于服务器端去请求资源。
(2)forward跳转到的页面可以共享前一个页面中request里面的数据,另一种方式则不可以。(sendRedirect可用来解决单击“重试”,造成的刷票)
(3)sendRedirect能够重定向到当前应用程序的其他资源,而且还能够重定向到同一个站点上的其他应用程序中的资源,甚至是使用绝对URL重定向到其他站点的资源,而forward只能
在同一个WEB应用内的资源之间的转发请求。如<%response.sendRedirect("http://www.google.com")%>但使用forward时则会报错
(4)执行效率上,forward效率比较高,因为跳转仅发生在服务器端,而redirect类似于再进行一次请求。
3 常见错误代码 使用方式:<%response.sendError(404);%>
(1)400 Bad Request 请求出现语法错误
(2)401 Unauthorized 客户试图未经授权访问手密码保护的页面
(3)403 Forbidden 资源不可用
(4)404 Not Found 无法找到指定位置的资源
(5)500 Internal server Error 服务器遇到了无法预料的情况,不能完成客户的请求。
4 Cookie保存登录信息
(1)将cookie写入客户端
Cookie nameCookie=new Cookie("account","xuyaohui");//新建cookie信息
    nameCookie.setMaxAge(10);//设置该信息的生命期限
    response.addCookie(nameCookie);//添加cookie到本地
(2)读取cookie信息
Cookie[] cookies=request.getCookies();//得到的是一个数组
    for(int i=0;i<cookies.length;i++)
    {
//key-value值对
    String name=cookies[i].getName();
    String password=cookies[i].getValue();
}
5 session对象:当访问网站时,服务器端已经分配了一个session对象给某个用户使用,对于该用户,不管在哪个页面,使用的session都是同一个。
(1) 往session中写内容
ArrayList<String> books=new ArrayList<String>();
      books.add("物理");
      books.add("数学");
      books.add("政治");
      session.setAttribute("books",books);
(2) 读取session中的内容
ArrayList<String> books=(ArrayList<String>)session.getAttribute("books");
    for(int i=0;i<books.size();i++)
    {
    String book=(String)books.get(i);
    out.println(book+"<BR>");
    }
注意一点呢:从session中获取一个集合,从集合中移除一个元素,但是该集合没有再放回session中,session中集合的内容还是会变化的。
比如:ArrayList<String> books=new ArrayList<String>();
      books.add("物理");
      books.add("数学");
      books.add("政治");
      session.setAttribute("books",books);
ArrayList<String> books=(ArrayList<String>)session.getAttribute("books");
books.remove("物理");//删除了,但是没有放回到session中
for(int i=0;i<books.size();i++)
    {
    String book=(String)books.get(i);
    out.println(book+"<BR>");//输出时只会显示两项,“物理”被删除了。
    }
(3) 用途
利用session保存登陆信息,一次访问session值不变
利用session传值
6 application对象:对于不同的客户端而言,服务器端对象是相同的,对于一个web容器而言,所有的用户都共同使用一个application对象。
将内容放入到application中:application.setAttribute(String name,object obj);
读取application中的内容:  application.getAttribute(String name);
移除内容:   application.removeAttribute(String name);

(1)利用application获取资源物理路径
//获取到物理路径可用于有些操作需要服务器硬盘读写地址有关,如文件上传
  String realPath=application.getRealPath("/");
7 servlet:在运行jsp时,服务器底层会将jsp编译成一个java类,这个类就是servlet
(1)生命周期:init()->service->destory() 注意:不管是get请求还是post请求,都会凋用service方法。
(2)servlet与jsp内置对象
获取out对象:PrintWriter out=response.getWriter();(注意:使用out时出现中文乱码,解决的方法是:response.setContentType("text/html;charset=GB2312");和response.setCharacterEncoding("gb2312");)
获得request和response对象:HttpServletRequest和HttpServletResponse
获取session对象:HttpSession session=request.getSession();
获取application对象:ServletContext application=this.getServletContext();
(3)跳转:当A页面跳转到B页面,存在大量的暂存数据,为了节省内存,可用使用forward跳转,避免把很多的内容存储到session中
使用response实现跳转:response.sendRedirect("**.jsp");
使用forward实现跳转: ServletContext application=this.getServletContext();
     RequestDispatcher rd=application.getRequestDispatcher("**.jsp");
     rd.forward(request,response);
(4)实现包含:
     ServletContext application=this.getServletContext();
     RequestDispatcher rd=application.getRequestDispatcher("URL地址");
     rd.include(request,response);
(5)设置参数:
1 全局参数:所有的servlet都可以访问
<context-param>
<param-name>参数名</param-name>
<param-value>参数值</param-value>
 </context-param>


获取:ServletContext application=this.getServletContext();
application.getInitParameter("参数名");

2 局部参数:只用相应的servlet才可以访问
<servlet>
<init-param>
<param-name>参数名</param-name>
<param-value>参数值</param-value>
</init-param>
</servlet>
获取:this.getInitParameter("参数名");




8 异常处理:自定义一个error.jsp用来实现统一的异常处理<% @ page language="java" pageEncoding="gb2312" isErrorPage="true" %>
isErrorPage的属性一定要设置为true
在web.xml中注册该页面:<error-page>
<exception-type>某种-exception</exception-type>
<location>/error.jsp</location>
</error-page>


9 过滤器
第一步:新建一个Filter,如设置request的编码
public class EncodingFilter implements Filter {
//消亡的方法
public void destroy() {
// TODO Auto-generated method stub

}
//过滤方法
public void doFilter(ServletRequest request, ServletResponse response,
FilterChain chain) throws IOException, ServletException {
request.setCharacterEncoding("gb2312");//设置编码
chain.doFilter(request,response);//表示请求向下传递

}
//初始化方法
public void init(FilterConfig filterConfig) throws ServletException {
// TODO Auto-generated method stub

}
第二步:在web.xml中配置
<filter>
<filter-name>EncodingFilter</filter-name>
<filter-class>filter.EncondingFilter</filter-classs>
</filter>
<filter-mapping>
<filter-name>EncodingFilter</filter-name>
<url-pattern>/*</url-pattern>  //过滤所有文件
</filter-mapping>


10 监听器
     servlet监听器和AWT监听器很相似,常见的监听器接口有四种
ServletContextListener:用于监听ServletContext的变化,如ServletContext的创建和销毁。(类似于jsp中的application)
ServletCOntextAttributeListener:当一个ServletContext中的属性变化时,用来监听
HttpSessionLister:类似于Session
HttpSessionAttributeListener:监听Session中的属性
     简单的监听器的实现session.setAttribute("account","xuyaohui");HttpSessionAttributeListener
     (1)新建一个类实现HttpSessionAttributeListener
     public class LoginListener implements HttpSessionAttributeListener {


public void attributeAdded(HttpSessionBindingEvent se) {
if(se.getName().equals("account"))
{
//当session.setAttribute("account","xuyaohui")执行完之后,设置的监听事件会获取到,从而打印出日志消息
System.out.print("日志消息:"+se.getName()+"登录!");
}
}
public void attributeRemoved(HttpSessionBindingEvent se) {
// TODO Auto-generated method stub
}
public void attributeReplaced(HttpSessionBindingEvent se) {
// TODO Auto-generated method stub
}
}
     (2)虽然建立了监听的类,但还需要在web.xml中声明才能实现监听
<listener>
<listener-class>xu.LoginListener</listener-class> //注意:类所在的包名,需要填写完整
</listener>


11 EL 表达式语言
简单实用${sessionScope.user.sex} 从session中取出对象user的属性sex


12 AJAX改善用户体验(异步)
(1)AJAX不是新技术,而是几个老技术的融合;
异步数据获取技术:使用XMLHttpRequest
基于标准的表示技术:使用XHTML与CSS
动态显示和交互技术:使用Document Object Model(文档对象模型)
数据交换和操作技术:使用XML与XSLT
javascript:将以上技术融合在一起
(2)实现AJAX需要五步
步骤1:在IE中实例化Msxml2.XMLHTTP var xmlHttp=new ActiveXObject("Msxml2.XMLHTTP");如果不是IE浏览器,实例化方法为: var xmlHttp=new XMLHttpRequest();
步骤2:指定异步提交的目标和提交方式,调用xmlHttp的open方法;xmlHttp.open("GET","info.jsp","true");其中true表示异步请求;
步骤3:指定XmlHttp状态变化时,需要进行的处理
xmlHttp.onreadystatechange=function(){
//处理代码
}
步骤4:编写处理代码
步骤5:发出请求;xmlHttp.send();


13 查询分页
(1)查询分页主要有两种机制:
基于缓存的分页:用户查询时,一次性把用户查询的全部记录查询出来,放到session中或者其他缓存机制中
基于查询的分页:俗称查询时分页,利用oracle的ROWNUM子句(其他数据库也有类似功能的子句,如MySQL数据库中的LIMIT子句)来限制结果集的大小和起止位置。每次查询只返回当页的内容。




14 JavaMail的实现
String to_mail="97291813@qq.com";
    String title="邮件";
    String content="我发送的邮件";
    /*1:创建邮箱的连接会话*/
    Properties prop=new Properties();
    prop.put("mail.smtp.auth","true");
    Session s=Session.getInstance(prop);
    /*2:创建邮箱*/
    MimeMessage message=new MimeMessage(s);
    message.setFrom(new InternetAddress("xianfengkeji_xinli@163.com"));
    message.setRecipient(Message.RecipientType.TO,new InternetAddress(to_mail));
    message.setSubject(title);
    message.setContent(content,"text/plain;charset=gb2312");
    message.setSentDate(new Date());
    message.saveChanges();
    /*3:连接到发送发的smtp服务器*/
    Transport transport=s.getTransport("smtp");
    transport.connect("smtp.163.com","xianfengkeji_xinli","463710");
    transport.sendMessage(message,message.getAllRecipients());
    transport.close();
    out.print("发送成功");























0 0