JavaBean学习
1. 不带参数的构造方法
2. getXXX、setXXX
3. 是为了能使用反射机制
JSP访问JavaBean
1. 导入JavaBean类 <%@ page import……
2. 声明JavaBean对象 <jsp:useBean id=… class=… scope=…
3. 访问JavaBean属性 <jsp:getProperty name=… property=…
接口Servlet
抽象类GenericServlet
抽象类HttpServlet
每一个Servlet都必须要实现Servlet接口,GenericServlet是个通用的、不特定于任何协议的Servlet,它实现了Servlet接口,而HttpServlet继承了GenericServlet,所以开发时候仅需要继承HttpServlet即可。
Servlet接口中定义了一个service方法,HttpServlet实现了该方法,不需要重写。
[img]http://dl.iteye.com/upload/attachment/0067/2704/eac77893-f278-392e-a7b6-94fbf40c2014.png[/img]
我们在开发中仅需要重写doXXX方法即可,如重写doPost方法
attribute在tomcat中的实际意义:其实就是个HashMap
[img]http://dl.iteye.com/upload/attachment/0067/2707/2cdfbc30-89ef-3210-9a4b-e78a59754217.png[/img]
1.对于Tomcat来说,它会将客户传递过来的参数放在一个Hashtable中,其定义为:
private Hashtable<String, String[]> paramHashStringArray = new Hashtable<String, String[]>();
这是个String->String[]的键值映射。
2.某些Servlet在web.xml文件中只有<servlet>元素而没有<servlet-mapping>元素,那么无法通过url地址的方式访问这个servlet了,那么会在<servlet>元素中配置一个<load-on-startup>子元素,让容器在启动的时候自动加载该Servlet,并且调用其init方法完成一些全局性的初始化工作。
[img]http://dl.iteye.com/upload/attachment/0067/2709/af5941cc-75ac-320a-beff-e1b8428249fa.png[/img]
ServletContext就是jsp内置对象application。
[img]http://dl.iteye.com/upload/attachment/0067/2711/cd194696-5137-3904-8af2-8bca0fcac040.png[/img]
在编写代码时需要非常细致地考虑多线程的同步问题。
Servlet过滤器(filter):
需要在web.xml中进行配置(Filters are configured in the deployment descriptor of a web application.)
Servlet过滤器能够对容器的请求和响应对象进行检查和修改;其本身并不生成请求和响应对象,只提供过滤作用;过滤器能够在Servlet被调用之前检查Request对象,修改Request Header和Request内容;同理,检查Response对象,并修改内容等;Servlet过滤器负责过滤的web组件可以使Servlet、JSP和HTML文件。
Servlet过滤器的过滤过程:
[img]http://dl.iteye.com/upload/attachment/0067/2717/3b688810-f758-35cf-a8e1-3c98915d940f.png[/img]
Filter接口:
所有的Servlet过滤器类都必须实现javax.servlet.Filter接口。这个接口含有3个过滤器类必须实现的方法:
init() doFilter() destroy()
Examples that have been identified for this design are:
1. Authentication Filters
2. Logging and Auditing Filters
3. Image conversion Filters
4. Data compression Filters
5. Encryption Filters
6. Tokenizing Filters
7. Filters that trigger resource access events
8. XSL/T filters
9. Mime-type chain Filter
[img]http://dl.iteye.com/upload/attachment/0067/2719/2992e860-7df6-38fd-aeb5-9271bb9c34b6.png[/img]
request对象及response对象都是由容器生成的。
过滤器是个链式请求处理过程(FilterChain)
过滤器的配置文件均在servlet的前面:
[img]http://dl.iteye.com/upload/attachment/0067/2721/424a3c2e-5bff-34ba-be07-3a70afc3c740.png[/img]
Filter会在容器启动的时候就进行初始化,此时调用init方法。如果有一个filter启动时失败了,那么整个web应用都没法正常启动。而Servlet是在用户访问的时候才进行初始化,并且一个Servlet启动失败不会影响其他的Servlet的应用,这点与Filter是非常不一样的。
所以必须保证Filter代码的完全正确性!
使用Servlet过滤器,通常在web.xml中配置很难做到精细化处理,如想有些jsp或servlet不应该被排查过滤,而有些需要的话,则应该在Filter的doFilter方法中进行判断处理,如判断用户时候正常登陆的话,可以判断该用户的session是否存在,如session.getAttribute(“…”)为null的话表明用户没有正常登陆,则可以在过滤器中进行重定向(sendRedirect)处理到登陆界面,而不是执行下一个过滤器。
Filter简化了Servlet/JSP的开发过程,将一些既需要在jsp中判断又需要在servlet中判断的过程仅需要放在Filter中写好即可。Filter的作用性仅次于Servlet/JSP。
一个Filter的小实验:
当用户提交的用户名含有zhang这些字符则替换为li;
当用户提交的评论中含有gongchandang,则替换为***;
首先写comment.jsp
然后写CommentServlet
接着写CommentFilter
然后配置web.xml
最后写CommentResult.jsp
(申明下:代码中貌似用了taobao字样,那是纯粹本人搞玩而已,自身实力太烂,不敢玷污TB。还要感谢相关的Servlet学习视频,有些截图来自于那里!)
1. 不带参数的构造方法
2. getXXX、setXXX
3. 是为了能使用反射机制
JSP访问JavaBean
1. 导入JavaBean类 <%@ page import……
2. 声明JavaBean对象 <jsp:useBean id=… class=… scope=…
3. 访问JavaBean属性 <jsp:getProperty name=… property=…
接口Servlet
抽象类GenericServlet
抽象类HttpServlet
每一个Servlet都必须要实现Servlet接口,GenericServlet是个通用的、不特定于任何协议的Servlet,它实现了Servlet接口,而HttpServlet继承了GenericServlet,所以开发时候仅需要继承HttpServlet即可。
Servlet接口中定义了一个service方法,HttpServlet实现了该方法,不需要重写。
[img]http://dl.iteye.com/upload/attachment/0067/2704/eac77893-f278-392e-a7b6-94fbf40c2014.png[/img]
我们在开发中仅需要重写doXXX方法即可,如重写doPost方法
attribute在tomcat中的实际意义:其实就是个HashMap
[img]http://dl.iteye.com/upload/attachment/0067/2707/2cdfbc30-89ef-3210-9a4b-e78a59754217.png[/img]
1.对于Tomcat来说,它会将客户传递过来的参数放在一个Hashtable中,其定义为:
private Hashtable<String, String[]> paramHashStringArray = new Hashtable<String, String[]>();
这是个String->String[]的键值映射。
2.某些Servlet在web.xml文件中只有<servlet>元素而没有<servlet-mapping>元素,那么无法通过url地址的方式访问这个servlet了,那么会在<servlet>元素中配置一个<load-on-startup>子元素,让容器在启动的时候自动加载该Servlet,并且调用其init方法完成一些全局性的初始化工作。
[img]http://dl.iteye.com/upload/attachment/0067/2709/af5941cc-75ac-320a-beff-e1b8428249fa.png[/img]
ServletContext就是jsp内置对象application。
[img]http://dl.iteye.com/upload/attachment/0067/2711/cd194696-5137-3904-8af2-8bca0fcac040.png[/img]
在编写代码时需要非常细致地考虑多线程的同步问题。
Servlet过滤器(filter):
需要在web.xml中进行配置(Filters are configured in the deployment descriptor of a web application.)
Servlet过滤器能够对容器的请求和响应对象进行检查和修改;其本身并不生成请求和响应对象,只提供过滤作用;过滤器能够在Servlet被调用之前检查Request对象,修改Request Header和Request内容;同理,检查Response对象,并修改内容等;Servlet过滤器负责过滤的web组件可以使Servlet、JSP和HTML文件。
Servlet过滤器的过滤过程:
[img]http://dl.iteye.com/upload/attachment/0067/2717/3b688810-f758-35cf-a8e1-3c98915d940f.png[/img]
Filter接口:
所有的Servlet过滤器类都必须实现javax.servlet.Filter接口。这个接口含有3个过滤器类必须实现的方法:
init() doFilter() destroy()
Examples that have been identified for this design are:
1. Authentication Filters
2. Logging and Auditing Filters
3. Image conversion Filters
4. Data compression Filters
5. Encryption Filters
6. Tokenizing Filters
7. Filters that trigger resource access events
8. XSL/T filters
9. Mime-type chain Filter
[img]http://dl.iteye.com/upload/attachment/0067/2719/2992e860-7df6-38fd-aeb5-9271bb9c34b6.png[/img]
request对象及response对象都是由容器生成的。
过滤器是个链式请求处理过程(FilterChain)
过滤器的配置文件均在servlet的前面:
[img]http://dl.iteye.com/upload/attachment/0067/2721/424a3c2e-5bff-34ba-be07-3a70afc3c740.png[/img]
Filter会在容器启动的时候就进行初始化,此时调用init方法。如果有一个filter启动时失败了,那么整个web应用都没法正常启动。而Servlet是在用户访问的时候才进行初始化,并且一个Servlet启动失败不会影响其他的Servlet的应用,这点与Filter是非常不一样的。
所以必须保证Filter代码的完全正确性!
使用Servlet过滤器,通常在web.xml中配置很难做到精细化处理,如想有些jsp或servlet不应该被排查过滤,而有些需要的话,则应该在Filter的doFilter方法中进行判断处理,如判断用户时候正常登陆的话,可以判断该用户的session是否存在,如session.getAttribute(“…”)为null的话表明用户没有正常登陆,则可以在过滤器中进行重定向(sendRedirect)处理到登陆界面,而不是执行下一个过滤器。
Filter简化了Servlet/JSP的开发过程,将一些既需要在jsp中判断又需要在servlet中判断的过程仅需要放在Filter中写好即可。Filter的作用性仅次于Servlet/JSP。
一个Filter的小实验:
当用户提交的用户名含有zhang这些字符则替换为li;
当用户提交的评论中含有gongchandang,则替换为***;
首先写comment.jsp
<%@ page language="java" import="java.util.*" pageEncoding="GB18030"%>
<body>
<form action="CommentServlet" method="post">
<br> username:<input type="text" name="username"><br>
comments:<textarea name="comment" rows="10" cols="7"> </textarea><br>
<input type="submit" value="submit">
</form>
</body>
</html>
然后写CommentServlet
public class CommentServlet extends HttpServlet {
private static final long serialVersionUID = 8152348267462962556L;
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
// String username = (String) req.getAttribute("username");
// String comment = (String) req.getAttribute("comment");
req.getRequestDispatcher("commentResult.jsp").forward(req, resp);
}
}
接着写CommentFilter
public class CommentFilter implements Filter {
public void init(FilterConfig filterConfig) throws ServletException {
// TODO Auto-generated method stub
}
public void doFilter(ServletRequest request, ServletResponse response,
FilterChain chain) throws IOException, ServletException {
HttpServletRequest req = (HttpServletRequest) request;
HttpServletResponse resp = (HttpServletResponse) response;
String username = req.getParameter("username");
String comment = req.getParameter("comment");
username = username.replace("zhang", "li");
comment = comment.replace("gongchandang", "****");
req.setAttribute("username", username);
req.setAttribute("comment", comment);
chain.doFilter(request, response);
//chain.doFilter(req, resp);
}
public void destroy() {
// TODO Auto-generated method stub
}
}
然后配置web.xml
<filter>
<filter-name>CommentFilter</filter-name>
<filter-class>com.taobao.filter.CommentFilter</filter-class>
</filter>
<!-- 这里仅过滤CommentServlet这个Servlet -->
<filter-mapping>
<filter-name>CommentFilter</filter-name>
<url-pattern>/CommentServlet</url-pattern>
</filter-mapping>
最后写CommentResult.jsp
<%@ page language="java" import="java.util.*" pageEncoding="GB18030"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<body>
username:<%=request.getAttribute("username")%><br>
comment:<%=request.getAttribute("comment")%><br>
</body>
</html>
(申明下:代码中貌似用了taobao字样,那是纯粹本人搞玩而已,自身实力太烂,不敢玷污TB。还要感谢相关的Servlet学习视频,有些截图来自于那里!)