§
§ 实验支持环境设备需求
§ 软件支持工具
Java开发工具
Eclipse SDK Version: 3.2.2 Build id: M20070212-1330
J2EE开发工具
MyEclipse Version: 5.1.1 GA
JAVA运行环境工具
JDK(java) Version: 1.5.0_09
Java(TM) 2 Runtime Environment(JRE)
Version: build 1.5.0 Standard Edition
Java HotSpot(TM) Client VM
Version: build 1.5.0_09-b03
mixed mode)
JSP容器
Tomcat Version: 5.5.25 apache-tomcat-5.5.25
§ 实验步骤
- 创建一个Servlet:MyServlet.java
1)File->New->Servlet,Config package path:org.luonix.servlets and Servlet Name:MyServlet,then next->finished.
注意:Servlet MyServlet必须继承HttpServlet类(或继承抽象类GenericServlet或扩展接口Servlet)
2)配置web.xml文件
<servlet>
<description>
This is the description of my J2EE component
</description>
<display-name>
This is the display name of my J2EE component
</display-name>
<servlet-name>MyServlet</servlet-name>
<servlet-class>org.luonix.servlets.MyServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>MyServlet</servlet-name>
<url-pattern>/servlet/MyServlet</url-pattern>
</servlet-mapping>
3)根据客户端的请求方式实现doXXX(HttpServletRequest request, HttpServletResponse response)或service(HttpServletRequest request, HttpServletResponse response)方法。
public void doGet(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {
response.setContentType("text/html");
PrintWriter out = response.getWriter();
out.println("<!DOCTYPE HTML PUBLIC /"-//W3C//DTD HTML 4.01 Transitional//EN/">");
out.println("<HTML>");
out.println(" <HEAD><TITLE>A Servlet</TITLE></HEAD>");
out.println(" <BODY>");
out.print(" This is ");
out.print(this.getClass());
out.println(", using the GET method");
out.println("Hello World");
out.println(" </BODY>");
out.println("</HTML>");
out.flush();
out.close();
}
4)部署WEB工程到TOMCAT服务器中
5)运行测试
打开浏览器,输入http://127.0.0.1:8080/j2ee-exp/servlet/MyServlet
This is class org.luonix.servlets.MyServlet, using the GET method Hello World
6)在配置文件中添加初始化参数
<init-param>
<param-name>name</param-name>
<param-value>罗小勇</param-value>
</init-param>
<init-param>
<param-name>englishname</param-name>
<param-value>Xiaoyong Luo</param-value>
</init-param>
<init-param>
<param-name>sex</param-name>
<param-value>male</param-value>
</init-param>
<init-param>
<param-name>age</param-name>
<param-value>22</param-value>
</init-param>
7)显示配置参数
修改doGet(HttpServletRequest request, HttpServletResponse response)如下:
response.setCharacterEncoding("UTF-8");
out.println("this is my profile:");
out.println(this.getServletConfig().getInitParameter("name"));
out.println(this.getServletConfig().getInitParameter("englishname"));
out.println(this.getServletConfig().getInitParameter("sex"));
out.println(this.getServletConfig().getInitParameter("age"));
java.util.Enumeration params = this.getServletConfig().getInitParameterNames();
for(;params.hasMoreElements();){
out.println(this.getServletConfig().getInitParameter(params.nextElement().toString()));
}
8)部署WEB工程到TOMCAT服务器中,运行测试
打开浏览器,输入http://127.0.0.1:8080/j2ee-exp/servlet/MyServlet
This is class org.luonix.servlets.MyServlet, using the GET method Hello World this is my profile: 罗小勇 Xiaoyong Luo male 22 male 22 Xiaoyong Luo 罗小勇
- 基于以上例子,使用Form提交两项数据:用户名和密码。编写一个Servlet进行用户名的划分:当用户名中只出现a~z、A~Z和0~9这样的字母时,Servlet指派到JSP英文页面显示欢迎信息;其余情况指派到中文JSP页面。
1) 修改Servlet MyServlet.java,添加如下内容:
out.println("<form action=/"" + request.getContextPath() + "/filter/MyFilter/" method=/"post/">");
out.println("<table align=/"center/">");
out.println("<tr>");
out.println("<td align=/"center/">");
out.println("account:</td>");
out.println("<td align=/"left/"><input type=/"text/" name=/"account/"/></td>");
out.println("</tr>");
out.println("<tr>");
out.println("<td align=/"center/">");
out.println("password:</td>");
out.println("<td align=/"left/"><input type=/"password/" name=/"password/"/></td>");
out.println("</tr>");
out.println("<tr>");
out.println("<td align=/"center/">");
out.println("<input type=/"submit/" value=/"submit/"></td>");
out.println("<td align=/"center/"><input type=/"reset/" value=/"reset/"/></td>");
out.println("</tr>");
out.println("</table>");
out.println("</form>");
创建一个Servlet Filter:MyFilter,MyFilter.java实现过滤功能,用于判断是否只出现a~z、A~Z和0~9这样的字母,其中doFilter(ServletRequest request, ServletResponse response,FilterChain filterchain)实现如下:
this.account = request.getParameter("account");
this.password = request.getParameter("password");
javax.servlet.RequestDispatcher dispatcher = null;
boolean isEN = true;
for(int i=0; i<this.account.length(); i++){
if(!(this.account.charAt(i) >= '0' && this.account.charAt(i) <= '9' ||
this.account.charAt(i) >= 'a' && this.account.charAt(i) <= 'z' ||
this.account.charAt(i) >= 'A' && this.account.charAt(i) <= 'Z' ))
isEN = false;
}
if(isEN)
dispatcher = request.getRequestDispatcher("/servlet/EN");
else
dispatcher = request.getRequestDispatcher("/servlet/CN");
dispatcher.forward(request, response);
其中,下画线部分,通过javax.servlet.RequestDispatcher转发器转发,如果出现了中文等类似的字符,则转发到/servlet/CN所对应的Servlet中去,否则转发到/servlet/CN所对应的Servlet中去。
2) Servlet CN.JAVA,EN.JAVA
分别对应于转发后的中文或英文页面。
3) 最终的WEB.xml配置如下:
<servlet>
<description>
This is the description of my J2EE component
</description>
<display-name>
This is the display name of my J2EE component
</display-name>
<servlet-name>MyServlet</servlet-name>
<servlet-class>org.luonix.servlets.MyServlet</servlet-class>
<init-param>
<param-name>name</param-name>
<param-value>罗小勇</param-value>
</init-param>
<init-param>
<param-name>englishname</param-name>
<param-value>Xiaoyong Luo</param-value>
</init-param>
<init-param>
<param-name>sex</param-name>
<param-value>male</param-value>
</init-param>
<init-param>
<param-name>age</param-name>
<param-value>22</param-value>
</init-param>
</servlet>
<servlet>
<description>
This is the description of my J2EE component
</description>
<display-name>
This is the display name of my J2EE component
</display-name>
<servlet-name>CN</servlet-name>
<servlet-class>org.luonix.servlets.CN</servlet-class>
</servlet>
<servlet>
<description>
This is the description of my J2EE component
</description>
<display-name>
This is the display name of my J2EE component
</display-name>
<servlet-name>EN</servlet-name>
<servlet-class>org.luonix.servlets.EN</servlet-class>
</servlet>
<filter>
<description>my filter</description>
<display-name>myfilter</display-name>
<filter-name>myfilter</filter-name>
<filter-class>org.luonix.servlets.MyFilter</filter-class>
</filter>
<servlet-mapping>
<servlet-name>MyServlet</servlet-name>
<url-pattern>/servlet/MyServlet</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>CN</servlet-name>
<url-pattern>/servlet/CN</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>EN</servlet-name>
<url-pattern>/servlet/EN</url-pattern>
</servlet-mapping>
<filter-mapping>
<filter-name>myfilter</filter-name>
<url-pattern>/filter/MyFilter</url-pattern>
</filter-mapping>
§ 最终运行结果