在这里,我们使用mysql建立登录用户表,如下图所示:
首先,我们需要新建一个web application项目:
点击下一步按钮弹出新的窗口,在窗口中设置项目的名称和位置:
创建完项目后,我们需要配置tomcat服务器,点击图中的编辑结构按钮:
然后弹出运行/调试配置窗口,在左侧栏中找到tomcat,并点击其中的Local按钮:
但是,由于之前的idea中打了汉化包的原因,导致这里的Local无法点击,查阅资料需要卸载汉化包,但是在这里卸载汉化包之后打开idea就报错,所以只能更换另一个未汉化的版本重新进行Tomcat配置:
然后,进行资源热部署:
部署结束后,在项目中新建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<cookies.length;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");
}
}
在上面的代码中的doPost方法中,已经写了关于cookie的代码,这里不再阐述。
前两步的效果图如下:
public void sessionCreated(HttpSessionEvent arg0) { System.out.println("createSession....."); Map<String,Object> 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<String,Object> application=ActionContext.getContext().getApplication(); int onlineNumber=Integer.parseInt(application.get("onlineNumber").toString())-1; application.put("onlineNumber", onlineNumber); }
要解决这一问题,我们必须建立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
原文:https://www.cnblogs.com/tianhaoqi/p/13047673.html