Java web从入门到放弃(3)

来源:互联网 发布:js显示当前时间年月日 编辑:程序博客网 时间:2024/05/21 10:30

第八章、Servlet技术

建立新的servlet和过滤器都需要在web.xml文件中添加配置信息
添加一个servlet的时候需要加入servlet
<servlet>    <servlet-name>MyServlet</servlet-name>    <servlet-class>com.song.servlet.MyServlet</servlet-class></servlet>
和servletmap。注意此处的servlet-name需要和上文代码中的servlet-name相同
<servlet-mapping>    <servlet-name>MyServlet</servlet-name>    <url-pattern>/servlet/MyServlet</url-pattern></servlet-mapping>

第九章、过滤器和监听器

1、过滤器

遇到写<filter-name>报错
参考 http://blog.csdn.net/niu_hao/article/details/25250213

例一、统计网站的访问数量
首先建立一个监听器负责记录数字count并且将count放到ServerletContext中

package com.song.filter;import java.io.IOException;import javax.servlet.Filter;import javax.servlet.FilterChain;import javax.servlet.FilterConfig;import javax.servlet.ServletContext;import javax.servlet.ServletException;import javax.servlet.ServletRequest;import javax.servlet.ServletResponse;import javax.servlet.http.HttpServletRequest;public class Filter2 implements Filter {private int count;        public Filter2() {}public void destroy() {}public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {count++;//将ServletRequest转化成HttpServletRequestHttpServletRequest req = (HttpServletRequest)request;//获取ServletContextServletContext context = req.getSession().getServletContext();//将来访数量值放入ServletContext中context.setAttribute("count", count);//向下传递过滤器chain.doFilter(request, response);}public void init(FilterConfig fConfig) throws ServletException {String param = fConfig.getInitParameter("count"); // 获取初始化参数count = Integer.valueOf(param);//将获取的参数转化为int型,然后赋值给私有变量count}}

然后在index.jsp中获取Context中的属性
<%@ page language="java" contentType="text/html; charset=utf-8"    pageEncoding="utf-8"%><!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"><html><head><meta http-equiv="Content-Type" content="text/html; charset=utf-8"><title>index</title></head><body><%=application.getAttribute("count") %></body></html>
这样就可以在每次刷新的时候增加访问量

例二、字符编码过滤器

首先编写CharactorFilter过滤器
package com.song.filter;import java.io.IOException;import javax.servlet.Filter;import javax.servlet.FilterChain;import javax.servlet.FilterConfig;import javax.servlet.ServletException;import javax.servlet.ServletRequest;import javax.servlet.ServletResponse;public class CharactorFilter implements Filter {String encoding = null;public void destroy() {}public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {if(encoding != null){request.setCharacterEncoding(encoding);response.setContentType("text/html;charset="+encoding);}chain.doFilter(request, response);}public void init(FilterConfig fConfig) throws ServletException {encoding = fConfig.getInitParameter("encoding");}}


注意:配置这个过滤器的时候需要将web.xml文件中的配置信息修改为
<filter>    <display-name>CharactorFilter</display-name>    <filter-name>CharactorFilter</filter-name>    <filter-class>com.song.filter.CharactorFilter</filter-class>    <init-param>      <param-name>encoding</param-name>      <param-value>UTF-8</param-value>    </init-param>  </filter>  <filter-mapping>    <filter-name>CharactorFilter</filter-name>    <url-pattern>/*</url-pattern>  </filter-mapping>


然后是AddServlet

package com.song.servlet;import java.io.IOException;import java.io.PrintWriter;import javax.servlet.ServletException;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;public class AddServlet extends HttpServlet {private static final long serialVersionUID = 1L;           public AddServlet() {        super();    }protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {doPost(request, response);}protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {PrintWriter out = response.getWriter();String id = request.getParameter("id");String name = request.getParameter("name");String author = request.getParameter("author");String price = request.getParameter("price");out.print("<h2>图书信息添加成功</2>");out.print("图书编号:"+id+"<br>");out.print("图书名称:"+name+"<br>");out.print("作者:"+author+"<br>");out.print("价格:"+price+"<br>");out.flush();out.close();}}

最后是负责输入数据的index.jsp页面

<%@ page language="java" contentType="text/html; charset=utf-8"pageEncoding="utf-8"%><!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"><html><head><meta http-equiv="Content-Type" content="text/html; charset=utf-8"><title>index</title></head><body><form action="AddServlet" method="post"><table align="center" border="1" width="350"><tr><td class="2" align="center" colspan="2"><h2>添加图书信息</h2></td></tr><tr><td align="right">图书编号:</td><td><input type="text" name="id"></td></tr><tr><td align="right">图书名称:</td><td><input type="text" name="name"></td></tr><tr><td align="right">作者:</td><td><input type="text" name="author"></td></tr><tr><td align="right">价格:</td><td><input type="text" name="price"></td></tr><tr><td colspan="2" class="2" align="center"><input type="submit"value="提交"></td></tr></table></form></body></html>