接上篇
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);
和上面的类似