Eclipse创建带Servlet的JSP程序

  前面的《Eclipse创建带JavaBean的JSP程序》文章中,介绍了如何在留言簿程序中使用JavaBean和JSP,其中重要的代码逻辑都放在了JSP文件中,例如用户注册信息处理、用户登录信息验证、用户留言处理等。这么做的不足之处主要包括修改代码不方便,代码复用度不高。这段时间在看《Head First Servlets and JSP》,书中对MVC的初步介绍中也在说可以使用JSP+Servlet+JavaBean实现MVC,其中Model对应JavaBean,View对应JSP,Controller对应Servlet。
  本文在留言簿项目中增加Servlet技术,并将JSP文件中的代码逻辑放在Servlet和JavaBean中,使JSP文件主要负责数据展示。

程序实现

  主要创建三个Servlet:RegisterServlet、LoginServlet和MessageServlet。在项目上点右键,选择New->Other,在新建窗口中的Web文件夹下找到Servlet,然后点击下一步按钮。
在这里插入图片描述  然后设置Servlet的命名空间、类名等属性,自建的Servlet一般都是从HTTPServlet类派生的,这里不用改超类名字。
在这里插入图片描述
  然后是设置Servlet的映射地址,这里的映射地址是客户端访问Servlet时使用的地址。按照《Head First Servlets and JSP》书中的介绍(推荐各位看看这本书,写的很浅显易懂),一个Servlet有三个名字:物理文件名,类名和映射名,一看这三个名字就知道是什么意思,这里就不解释了。个人根据映射名就像是艺名,通过设置艺名,让客户端只知道艺名,不用管Servlet的真实名字,这样不仅安全,后续Servlet发生变化对客户端影响也小。点击下一步按钮,继续进行设置。
在这里插入图片描述
  最后一步是设置Servlet中要复写的函数,这里主要是doPost和doGet,其它函数暂时用不到,点击结束按钮完成Servlet创建。
在这里插入图片描述
在这里插入图片描述
  同理创建LoginServlet和MessageServlet。这三个Servlet类与映射URL的配置关系是通过在Servlet类前放置@WebServlet实现的,采用的是Servlet的新特性,对该新特性的说明请参照文献5-6。没有这个新特性时,映射关系一般是放在web.xml文件中的,该文件默认放在WEB-INF文件夹中。之前创建项目时没有勾选自动创建web.xml选项,因此只有手动添加。查看网上文章,添加web.xml文件要么是从其它地方复制一个到WEB-INF文件夹内,要不就在项目上点右键,然后选择Java EE Tools->Generate Deployment Descriptor Stub自动产生一个新的。
在这里插入图片描述
  使用LoginServlet替代deal.jsp的功能,主要代码如下:

	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// TODO Auto-generated method stub
		//response.getWriter().append("Served at: ").append(request.getContextPath());
		ServletContext application = this.getServletContext();
		UserBuffer userBuffer=(UserBuffer)application.getAttribute("users");
		if(userBuffer==null)
		{
			userBuffer=new UserBuffer();
			application.setAttribute("users", userBuffer);
		}
		
		User user=new User();
		user.setName(request.getParameter("name"));
		user.setPassword(request.getParameter("password"));
			
		if(userBuffer.ValidateUser(user))
		{
			request.getRequestDispatcher("messageboard.jsp").forward(request,response);
		}
		else
		{
			response.sendRedirect("error.jsp");
		}
	}

  保留registerresult.jsp,但是将其中的处理代码放在RegisterServlet中。

    ServletContext application = this.getServletContext();
	UserBuffer userBuffer=(UserBuffer)application.getAttribute("users");
	if(userBuffer==null)
	{
		userBuffer=new UserBuffer();
		application.setAttribute("users", userBuffer);
	}
	
	User user=new User();
	user.setName(request.getParameter("name"));
	user.setPassword(request.getParameter("password"));
	user.setEmail(request.getParameter("email"));
	
	String isRegistered=userBuffer.IsUserRegisiterd(user.getName())?"Y":"N";
	application.setAttribute("isRegistered", isRegistered);
	
	response.sendRedirect("registerresult.jsp");

  将messageboard.jsp中汇总留言的代码放到messageservlet中,并将messageboard.jsp中提交留言的action设置为messageservlet:

    ServletContext application = this.getServletContext();
	String msg=request.getParameter("msg");
	String allMsgs="";		
	
	if(msg!=null)
	{
		allMsgs=(String)application.getAttribute("messages");
		if(allMsgs==null)
		{
			allMsgs=msg;
		}
		else
		{			
			allMsgs+="<br>"+msg;
		}		
		application.setAttribute("messages", allMsgs);
	}	
	request.getRequestDispatcher("messageboard.jsp").forward(request,response);

  最终的程序效果和之前差不多,就不贴界面了。整个程序的代码放在了GitHub上,地址为:https://github.com/guochao2299/SimpleMessageBoard/tree/20200517

参考文献:
[1]Java Web设计实用教程
[2]Java Web从入门到精通
[3]JSP程序设计与案例教程
[4]Head First Servlets and JSP
[5]https://www.zhihu.com/question/41914148
[6]https://blog.csdn.net/weixin_42442713/article/details/84142832

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值