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.


下一文会讲解,重定向和请求转发

猜你喜欢

转载自blog.csdn.net/bentigerkin/article/details/78481002
今日推荐