servlet应用

1.建立用户表

  在这里,我们使用mysql建立登录用户表,如下图所示:

servlet应用_第1张图片

 

 2.编写一个servlet进行用户名和密码校验,获取登录页面的用户名密码,并显示出来

首先,我们需要新建一个web application项目:

servlet应用_第2张图片

 

 点击下一步按钮弹出新的窗口,在窗口中设置项目的名称和位置:

servlet应用_第3张图片

 

 创建完项目后,我们需要配置tomcat服务器,点击图中的编辑结构按钮:

servlet应用_第4张图片

 

 然后弹出运行/调试配置窗口,在左侧栏中找到tomcat,并点击其中的Local按钮:

servlet应用_第5张图片

 

 但是,由于之前的idea中打了汉化包的原因,导致这里的Local无法点击,查阅资料需要卸载汉化包,但是在这里卸载汉化包之后打开idea就报错,所以只能更换另一个未汉化的版本重新进行Tomcat配置:

servlet应用_第6张图片

 

 servlet应用_第7张图片

 

 servlet应用_第8张图片

 

 servlet应用_第9张图片

 

 然后,进行资源热部署:

servlet应用_第10张图片

 

 部署结束后,在项目中新建servlet,然后编写servlet的代码,如下:

package servlet;

import javax.servlet.http.Cookie;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

/**
 * Servlet implementation class MyServlet
 */
@WebServlet("/MyServlet")
public class MyServlet extends HttpServlet {
    private static final long serialVersionUID = 1L;
       
    /**
     * @see HttpServlet#HttpServlet()
     */
    public MyServlet() {
        super();
        // TODO Auto-generated constructor stub
    }

    /**
     * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
     */
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        // TODO Auto-generated method stub
        response.getWriter().append("Served at: ").append(request.getContextPath());
    }

    /**
     * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
     */
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        // TODO Auto-generated method stub
        // 判断是否拥有cookie
        Cookie[] cookies = request.getCookies();
        //String value = "";
        if (cookies != null) {
            for (int i=0;i) {
                if (cookies[i].getName().equals("remember")) {
                    response.sendRedirect("After.html");
                    return;
                }
            }
        }
        String username = request.getParameter("username");
        String password = request.getParameter("password");
        String remember = request.getParameter("remember");
        // 判断账号密码是否正确,默认账号密码为:tom  123
        if (username != null && password != null) {
            if (!username.isEmpty() && !password.isEmpty() ) {
                if (username.equals("tom") && password.equals("123")&&remember!=null) {
                    Cookie newCookie = new Cookie("remember", "1");
                    newCookie.setMaxAge(30*24*60*60);
                    response.addCookie(newCookie);
                    response.sendRedirect("After.html");
                    return;
                } else if(username.equals("tom") && password.equals("123")){
                    response.sendRedirect("After.html");
                    return;
                }
            }
        }
        response.sendRedirect("Login.html");
    }
}

 

 

3.使用cookie,如果用户在登录时选择保存登录信息,30天内,用户无需登录

  在上面的代码中的doPost方法中,已经写了关于cookie的代码,这里不再阐述。 

前两步的效果图如下:

获取登录的用户名与密码:

自动填充密码:

servlet应用_第11张图片

 

 4.使用session,显示计科院网站当前在线人数

    public void sessionCreated(HttpSessionEvent arg0) {

        System.out.println("createSession.....");

        Map application=ActionContext.getContext().getApplication();

        //从web配置文件中得到属性的值,如果创建一个session就加一,销毁减一

        int onlineNumber=Integer.parseInt(application.get("onlineNumber").toString())+1;

        application.put("onlineNumber", onlineNumber);

    }



    public void sessionDestroyed(HttpSessionEvent arg0) {

        System.out.println("deleteSession.....");

        Map application=ActionContext.getContext().getApplication();

        int onlineNumber=Integer.parseInt(application.get("onlineNumber").toString())-1;

        application.put("onlineNumber", onlineNumber);

    }

5.使用过滤器解决乱码问题,登录时用户名为中文可能不能正常识别,解决该问题

  要解决这一问题,我们必须建立Filter,代码如下:

public class MyFilter implements Filter {

    /**
     * Default constructor. 
     */
    public MyFilter() {
        // TODO Auto-generated constructor stub
    }

    /**
     * @see Filter#destroy()
     */
    public void destroy() {
        // TODO Auto-generated method stub
    }

    /**
     * @see Filter#doFilter(ServletRequest, ServletResponse, FilterChain)
     */
    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
        // TODO Auto-generated method stub
        // place your code here

        // pass the request along the filter chain
        
        
        request.setCharacterEncoding("utf-8");
        response.setCharacterEncoding("utf-8");
        response.setContentType("text/html;charset=utf-8");
        chain.doFilter(request, response);
    }

    /**
     * @see Filter#init(FilterConfig)
     */
    public void init(FilterConfig fConfig) throws ServletException {
        // TODO Auto-generated method stub
    }

}

码云地址:https://gitee.com/tianhaoqi/servlet

 

你可能感兴趣的:(servlet应用)