servlet+jsp
1,验证码
作用:防止恶意注册(利用代码重复注册导致服务器瘫痪);
动态生成验证码servlet继承与HttpServlet,验证码通常是以图片的形式显示;
2,Servlet的运行机制
IE浏览器(以post传参request、response请求)---logins---》Servlet(实例化->init()初始化
->service()分配调用->doPost(),doGet(),doPut(),doDelete());
注意:init()初始化的对象会多次调用,不会马上销毁,过段时间会自动销毁,销毁时调用destroy()方法;
Servlet(c):继承GenericServlet(c)继承Servlet(i);
3,转发器
RequestDispatcher dispatcher = request.getRequestDispatcher();
dispater.forward(request,response);
利用request.setAttribute("","")和request.getAttribute()存取;
注:Struts本身就是一个转发器RequestDispatcher;
4,过滤器
继承于接口javax.servlet.Filter
主要用到 public void doFilter(ServletRequest arg0, ServletResponse arg1,FilterChain arg2)方法
注意:ServletRequest,ServletResponse和HttpServletRequest,HttpServletResponse的转换
和arg2.doFilter(arg0, arg1);
另外要配置web.xml
配制方法
首先注册:
<filter>
<description>
<filter-name>CheckFilter</filter-name>
<filter-class>com.zx.pethospital.servlet.CheckFilter</filter-class>
</filter>
需要过滤的(main.jsp)
<filter-mapping>
<filter-name>CheckFilter</filter-name>
<url-pattern>/main.jsp</url-pattern>
</filter-mapping>
5,监听器
1,对Session的监听: 继承类HttpSessionsListener
Session不是在访问Tomcat时马上创建的而是在访问Jsp时才会被创建的
SessionsAttribute监听Session的放和取
2,对application的监听: 继承类ServletContextListener
对Context的放和取进行监听
6,仓库application的应用
主要用于在线游戏中的在线人数和那些公共的属性
例子:
ServletContext(类的原型) application = this.getServletContext();在Servlet中
// ServletContext application = this.getServlet().getServletContext();在struts中
Map loginedUsers = (Map)application.getAttribute("loginedUsers");
loginedUsers.put(session.getId(), u);
application.setAttribute("loginedUsers", loginedUsers);
7,在web.xml中设置Sessions会话的参数
例子:设置会话为两分钟
<session-config>
<session-timeout>2</session-timeout>
</session-config>
8,配置文件
配置.properties(键值对)的文件
(1) Properties p = new Properties();//Properties是map的子类
FileInputStream fis = new FileInputStream("路径");//绝对路径
p.load(fis);//读文件中的键值对
p.getProperty("键");
(2) //简单些
InputStream is = this.getClass.getResourceAsStream("文件名");
PropertyResourceBundle p = new PropertyResourceBundle(file);
String driver = p.getString("driver");//获取值
9,用web.xml配置
(1)初始参数
<servlet>
<init-param>
<param-name>zfk</param-name>
<param-value>GBK</param-value>
</init-param>
</servlet>
在Servlet中获取zfk的值
String zfk = this.getinitparameter("zfk");
request.setCharcterEncoding(zfk);
(2)全局参数
<context-param>
<param-name>zif</param-name>
<param-value>GBK</param-value>
</context-param>
获取
ServletContext application = this.getServletContext();
String zif = application.getinitparameter("zif");
10,扩展标签
扩展html标签,但属于Jsp(S端)技术
官方标签:
内置:jap:useBean,jsp:setProperty,jsp:getPropety,jsp:forword(转发器),jsp:param,jsp:include
( request.getRequestDispatcher("index.jsp").forward(request,response);
等同与
<jsp:forward page="index.jsp"> )
定义:jstl需要插件.jar包
<%@ taglib Uri="http://java.sun.com/jsp/jstl/core" prefix="c">
第三方标签:要继承SimpleTagSupport
例子:我自定义的分页标签
import java.io.IOException;
import javax.servlet.jsp.JspException;
import javax.servlet.jsp.JspWriter;
import javax.servlet.jsp.tagext.SimpleTagSupport;
public class Fenye extends SimpleTagSupport {
private int pageNum;
private int pageEnd;
private String yeMian;
public String getYeMian() {
return yeMian;
}
public void setYeMian(String yeMian) {
this.yeMian = yeMian;
}
public int getPageNum() {
return pageNum;
}
public void setPageNum(int pageNum) {
this.pageNum = pageNum;
}
public int getPageEnd() {
return pageEnd;
}
public void setPageEnd(int pageEnd) {
this.pageEnd = pageEnd;
}
public void doTag() throws JspException, IOException {
JspWriter out = this.getJspContext().getOut();
// 首页
out.println("<td height=" + 34 + ">");
out.println("<font size=" + 4 + "><b>");
out.println("<a href=" + yeMian + "?pageNum=" + 1 + ">");
out.println("首页</a></b></font>");
out.println(" ");
// 上页
out.println("<td height=" + 34 + ">");
out.println("<font size=" + 4 + "><b>");
if (pageNum != 1) {
out
.println("<a href=" + yeMian + "?pageNum=" + (pageNum - 1)
+ ">");
}
out.println("上一页");
if (pageNum != 1) {
out.println("</a>");
}
out.println("</b></font>");
out.println(" ");
// 下页
out.println("<td height=" + 34 + ">");
out.println("<font size=" + 4 + "><b>");
if (pageNum != pageEnd) {
out
.println("<a href=" + yeMian + "?pageNum=" + (pageNum + 1)
+ ">");
}
out.println("下一页");
if (pageNum != pageEnd) {
out.println("</a>");
}
out.println("</b></font>");
out.println(" ");
// 最后页
out.println("<td height=" + 34 + ">");
out.println("<font size=" + 4 + "><b>");
out.println("<a href=" + yeMian + "?pageNum=" + pageEnd + ">");
out.println("最后一页</a></b></font>");
out.println(" ");
super.doTag();
}
}
自定义标签要注册在nytag.tld中注册
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE taglib PUBLIC "-//Sun Microsystems, Inc.//DTD JSP Tag Library 1.1//EN" "http://java.sun.com/j2ee/dtds/web-jsptaglibrary_1_1.dtd">
<taglib>
<tlibversion>1.2</tlibversion>
<jspversion>1.1</jspversion>
<shortname>my</shortname>
<tag>
<name>fenye</name>
<tagclass>com.zx.pethospital.view.util.Fenye</tagclass>
<bodycontent>empty</bodycontent>
<attribute>
<name>pageNum</name>
<required>false</required>
<rtexprvalue>true</rtexprvalue>
</attribute>
<attribute>
<name>pageEnd</name>
<required>false</required>
<rtexprvalue>true</rtexprvalue>
</attribute>
<attribute>
<name>yeMian</name>
<required>false</required>
<rtexprvalue>true</rtexprvalue>
</attribute>
</tag>
</taglib>