Java-Servlet跳转Servlet以及传参

涎涎原创约 1022 字大约 3 分钟...JavaJava

Java-Servlet跳转Servlet以及传参

注意

本博文仅供学术研究和交流参考,严禁将其用于商业用途。如因违规使用产生的任何法律问题,使用者需自行负责。

最近项目中有这么一个需求:

JSP中的按钮点击------->Servlet-1--------->Servlet-2作出判断并传参------JSP页面接收参数并展示

JSP跳转Servlet

login.jsp button2跳转到ToRegisterViewServlet

 <form name="form1" method="post" action="<%=request.getContextPath()%>/LoginServlet" id="loginForm">
 <--此处的action跳转到对应的LoginServlet是通过button为submit提交触发的-->
   <table width="933" border="0" align="center" cellpadding="0" cellspacing="0" style="margin:120px;">
  <tr>
    <td height="412" valign="top" background="<%=request.getContextPath()%>/images/bg_imgJava_46_1.jpg">
    <table height="300" border="0" cellspacing="0">
      <tr>
        <td colspan="2">
        <table width="200" border="0" cellspacing="0">
          <tr>
            <td width="78">
            <input name="button"  type="button"  class="butlogin" id="button" value="" onClick="UserLogin()">
            <--这是登录按钮-->
            </td>
            <td>&nbsp;</td>
            <td width="78">
            <input name="button2"  type="button"  class="butzc" id="button2"value="" onClick="UserRegistration()">
            <--这是注册铵钮需要跳转到另一个Servlet-->
            <script>
        function UserRegistration(){
		location.href = "<%=request.getContextPath()%>/ToRegisterViewServlet" ;
	}
            </script>
            </td>
          </tr>
        </table>
        </td>
      </tr>
    </table>
    </td>
  </tr>
</table>
 </form>

ToRegisterViewServlet

package net.ptcs.my12306.controller;

import java.io.IOException;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import net.ptcs.my12306.service.ProvinceService;

/**
 * Servlet implementation class ToRegisterViewServlet
 */
@WebServlet(description = "去往注册页面的servlet", urlPatterns = { "/ToRegisterViewServlet" })
public class ToRegisterViewServlet extends HttpServlet {
	private static final long serialVersionUID = 1L;
       

	@Override
	protected void service(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		
		//把所有省份数据传给页面
		request.setAttribute("provinces", ProvinceService.getInstance().getAllProvince());
		request.getRequestDispatcher("/user_register.jsp").forward(request, response);
	}

}

user_register.jsp 核心代码

<form action="<%=request.getContextPath()%>/UserServlet" method="post">
<input name="submit" type="submit" value="提交">
<input name="reset" type="submit" value="重置">
</form>

UserServlet

package net.ptcs.my12306.controller;

import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.Date;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import net.ptcs.my12306.entity.Users;
import net.ptcs.my12306.service.UserService;

/**
 * Servlet implementation class UserServlet
 */
@WebServlet(description = "", urlPatterns = { "/UserServlet" })
public class UserServlet extends HttpServlet {
	private static final long serialVersionUID = 1L;

	@Override
	protected void service(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		request.setCharacterEncoding("utf-8");
		response.setCharacterEncoding("utf-8");
		
		//1.获取数据
		String username=request.getParameter("username");
		String password=request.getParameter("password");
		String confirm_password=request.getParameter("confirm_password");
		String sex=request.getParameter("sex");
		String birthday_date=request.getParameter("birthday");
		
		//2.数据的非空校验和合法性校验
		StringBuffer sb = validateRegisterForm(username, password, confirm_password);
		
		if(sb.length() > 0) {
			//如果校验不通过,那么返回注册页面,让用户再注册一次
			request.setAttribute("message", "必填信息为空,请重新注册");
			request.getRequestDispatcher("/ToRegisterViewServlet").forward(request, response);
		}else {
			//3.调用底层service的注册方法添加用户到数据库
			Date birthday=null;
			try {
				birthday=new SimpleDateFormat("yyyy-MM-dd").parse(request.getParameter("birthday"));
			} catch (Exception e) {
				e.printStackTrace();
			}
			
			UserService userService=UserService.getInstance();
			
			Users user = new Users(request.getParameter("username"), request.getParameter("password"), 
					request.getParameter("sex").charAt(0), birthday);
			user.setLoginIp(request.getRemoteAddr());
			//服务端校验通过之后,注册方法调用之前,应该先判断用户名是否已经存在
			/*
			 * 则需要定义判断用户名是否已经存在的方法,如果存在则返回注册页面,提示用户名已经存在,
			 * 								 如果不存在则继续注册
			 */

			if(userService.isExistsUserName(username))
			{
				//用户名已经存在,回到注册页面
				request.setAttribute("message", "用户名已被占用");
				request.getRequestDispatcher("/ToRegisterViewServlet").forward(request, response);
		
			}else
			{

				if(userService.register(user))
				{
					//生产环境不用挨骂的代码:需求,既要有弹窗又要重定向登录页面
					
					response.sendRedirect(request.getContextPath()+"/login.jsp?message=registersuccess");
				}else
				{
					//注册失败,回到注册页面
					request.setAttribute("message", "注册失败");
					request.getRequestDispatcher("/ToRegisterViewServlet").forward(request, response);
				}
			}
		}
	}
	/**
	 * 对表单进行服务端校验的方法 
	 * @param username
	 * @param password
	 * @param confirm_password
	 * @return 
	 */
	private StringBuffer validateRegisterForm(String username, String password,
			String confirm_password) {
		StringBuffer validate_message=new StringBuffer();
		if(username==null||"".equals(username))
		{
			validate_message.append("用户名为空");
		}
if(password==null||"".equals(password)||confirm_password==null||"".equals(confirm_password))
		{
			validate_message.append("密码或者确认密码为空");
		}
		if(!password.equals(confirm_password))
		{
			validate_message.append("两次密码输入不一致");
		}
		if(validate_message.length()>0)
		{
			System.out.println(validate_message.toString());
			return validate_message;
		}
		return validate_message;
	}
}

因此处设置的键是message而UserServlet是跳转到 ToRegisterViewServlet 而 ToRegisterViewServlet 是跳转到 user_register.jsp

user_register.jsp接收参数

  1. jsp页面中写java代码
<span class="text_red">
<%=request.getAttribute("message")==null?"":request.getAttribute("message") %> </span>
  1. EL表达式
<span class="text_red">${message}</span>

拓展: EL表达式${message}默认从请求域拿数据 第一个是request 第二个是session 第三个是Application 并且EL表达式会默认进行非空判断

效果如下:


分割线


相关信息

以上就是我关于 Java-Servlet跳转Servlet以及传参 知识点的整理与总结的全部内容,希望对你有帮助。。。。。。。

上次编辑于:
贡献者: 涎涎
评论
  • 按正序
  • 按倒序
  • 按热度
Powered by Waline v2.15.4