Servlet和jsp之间的传值经验总结(二)

接上篇

Servlet to jsp

request.getSession.setAttribute(“Object”,Object);

1.在登录操作是主要用到session,因为session数据放在服务器上,相对于cookie更为私密一点。
2.session内一般不会储存很多的信息,一般object是一个类,或者单个量。
servlet中:

userlogin usr=new userlogin(id,name,pass,memo);
request.getSession().setAttribute("usr",usr);

3.在系统退出登录时,需要去除session

request.getSession().removeAttribute("usr");

4.获取其中的属性值

userlogin userlogin=(userlogin)request.getSession().getAttribute("usr");
String username=userlogin.getUserName();
int id=userlogin.getUserId();

在jsp中使用以上的语句记得引入包,因为不是一个变量值,只用<%= session.getAttribute(“usr”)%>输出的内容是类中toString()的结果。
5.在jsp中记录和获取session值:

session.setAttribute("usr",usr);
session.getAttribute("usr");

在servlet和jsp中请求session方式的不同的原因。servlet在服务器端,当客户端请求服务器端时需要获取有效的sessionId(sessionId是当第一次打开浏览器时浏览器分配给客户端的,服务器根据cookie携带的sessionId区分是哪个用户的请求),对应的是request.getSession(),而在客户端就不用先获取了。

URL传值

1.一般在servlet中定向跳转用到的是:

request.getRequestDispatcher("/index.jsp").forward(request, response);

在其中传值可以写成

request.getRequestDispatcher("/index.jsp?username="+username).forward(request, response);

如果找不到定向的页面可以在之前加上request.getContextPath()
jsp中用request.getParameter(“username”);获取到

jsp to servlet

form

<form action="boardinsert.do">
		<input type="text" maxlength="50" name="message">
		<input type="submit" value="提交">
		<input type="button" value="返回" onclick="turn()">
	</form>

web.xml

 <servlet>
    <servlet-name>chatinsert.do</servlet-name>
    <servlet-class>com.Final.chatinsert</servlet-class>
  </servlet>
  <servlet-mapping>
    <servlet-name>chatinsert.do</servlet-name>
    <url-pattern>/chatinsert.do</url-pattern>
  </servlet-mapping>

url-pattern需要与form中的action一致需要,是在url中可以访问到的地址。
当web.xml未放在WEB-INF/lib下,可能会在地址出自动生出servlet目录从而出现404,可以在action中加入request.getContextPath()
servlet-name需要上下一致
servley-class的地址需要是可以找到的目录:按住Ctrl鼠标点击可以跳转到对应servlet就是存在正确的
在servlet中用request.getParameter()来获取

url

<c:forEach items="${userList }" var="item">
	<tr>
		<td>${item.userName }</td>
		<td><a href="<%=path %>/classmate.do?userId=${item.userId }&userName=${item.userName }">成员详情</a></td>
		<td><a href="<%=path %>/chat.do?userId=${item.userId}">私信</a></td>
	</tr>
</c:forEach>
-----------------------web.xml----------------------
<servlet>
    <servlet-name>classmate.do</servlet-name>
    <servlet-class>com.Final.classmate</servlet-class>
  </servlet>
  <servlet-mapping>
    <servlet-name>classmate.do</servlet-name>
    <url-pattern>/classmate.do</url-pattern>
  </servlet-mapping>
   <servlet>
    <servlet-name>chat.do</servlet-name>
    <servlet-class>com.Final.memberchat</servlet-class>
  </servlet>
  <servlet-mapping>
    <servlet-name>chat.do</servlet-name>
    <url-pattern>/chat.do</url-pattern>
  </servlet-mapping>

在xml中的url-pattern写名字就好了
如果不是用a标签来跳转,可以用script,在地址后面添加参数

<script type="text/javascript">
	function firm() {
		var msg=confirm("确定退出吗?");
		if(msg==true){
			window.location.href="<%=path%>/out.do";
		}else{
			return;
		}
	}
</script>

servlet中用request.getParameter()获取

servlet to servlet

url

request.getRequestDispatcher("/chat.do?userId="+centid).forward(request, response);

和上面的类似

session

request.setAttribute()

猜你喜欢

转载自blog.csdn.net/qq_41863865/article/details/88744608
今日推荐