Servlet项目--由身份证号算出年龄
1.项目目录:
2.ageFormIDCard.jsp
<form action="ages" method="post"> <input type="submit" value="计算"/> </form>3.web.xml
<servlet> <servlet-name>MyServlet</servlet-name> <servlet-class>com.**.**.servletTest.AgeFromIDCard</servlet-class> </servlet> <servlet-mapping> <servlet-name>MyServlet</servlet-name> <url-pattern>/ages</url-pattern> </servlet-mapping> <welcome-file-list> <welcome-file>ageFormIDCard.jsp</welcome-file> </welcome-file-list>4.AgeFromIDCard.java(这里需要HttpServlet架包,在Java安装的目录的bin下有一个rt.jar引进就可以了)
public class AgeFromIDCard extends HttpServlet { @Override protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { Calendar ca = Calendar.getInstance(); int age = 0; int nowYear = ca.get(Calendar.YEAR); int nowMonth = ca.get(Calendar.MONTH)+1; int nowDay = ca.get(Calendar.DAY_OF_MONTH)+1; String idCard = "511002198702157548"; int IDYear = Integer.parseInt(idCard.substring(6,10)); int IDMonth = Integer.parseInt(idCard.substring(10,12)); int IDDay = Integer.parseInt(idCard.substring(12,14)); if(IDMonth - nowMonth > 0){ age = nowYear - IDYear - 1; System.out.println(age); } if(IDMonth - nowMonth == 0){ if(IDDay - nowDay > 0){ age = nowYear - IDYear -1; System.out.println(age); } age = nowYear - IDYear; System.out.println(age); } age = nowYear - IDYear ; System.out.println(age); } }5.运行Tomcat:
控制台输出结果:
总结:至此,已近完成计算,不过我预想的是那种输入身份证号再计算的 ,这只是初步项目 回头继续更新
要想项目效果变成这样:
1.ageFormIDCard.jsp
<form action="ages" method="post"> <input type="text" name="idCard" id="idCard"/> <input type="submit" value="计算"/> </form>2.ageResult.jsp
<body> <%=request.getAttribute("age")%> </body>3.web.xml页面没有变化
4.AgeFromIDCard.java
public class AgeFromIDCard extends HttpServlet { @Override protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { Calendar ca = Calendar.getInstance(); int age = 0; int nowYear = ca.get(Calendar.YEAR); int nowMonth = ca.get(Calendar.MONTH)+1; int nowDay = ca.get(Calendar.DAY_OF_MONTH)+1; String idCard = req.getParameter("idCard"); int IDYear = Integer.parseInt(idCard.substring(6,10)); int IDMonth = Integer.parseInt(idCard.substring(10,12)); int IDDay = Integer.parseInt(idCard.substring(12,14)); if(IDMonth - nowMonth > 0){ age = nowYear - IDYear - 1; req.setAttribute("age",age); RequestDispatcher rd=req.getRequestDispatcher("ageResult.jsp"); rd.forward(req,resp); } if(IDMonth - nowMonth == 0){ if(IDDay - nowDay > 0){ age = nowYear - IDYear -1; req.setAttribute("age",age); RequestDispatcher rd=req.getRequestDispatcher("ageResult.jsp"); rd.forward(req,resp); } age = nowYear - IDYear; req.setAttribute("age",age); RequestDispatcher rd=req.getRequestDispatcher("ageResult.jsp"); rd.forward(req,resp); } age = nowYear - IDYear ; req.setAttribute("age",age); RequestDispatcher rd=req.getRequestDispatcher("ageResult.jsp"); rd.forward(req,resp); }
总结:这种方法事业面转发,也可以直接用resp.getWriter().print(age);则不需要再建一个新的页面了
forward是服务器请求资源,服务器直接访问目标地址的URL,把那个URL的响应内容读取过来,然后把这些内容再发给浏览器.浏览器根本不知道服务器发送的内容从哪里来的,所以它的地址栏还是原来的地址.
redirect是服务端根据逻辑,发送一个状态码,告诉浏览器重新去请求那个地址.所以地址栏显示的是新的URL.
下一文会讲解,重定向和请求转发