实验一 Servlet技术
一、实验目的:
1.理解Servlet的工作原理,
2.掌握创建和发布Servlet的方法,
3.熟悉Servlet的应用。
4.掌握维持会话技术,理解cookies与session的区别。
二、实验原理:
Servlet是Java EE的三大组件技术之一,主要用于MVC模式之中的控制器的设计。Servlet本身是Java程序,创建一个Servlet需要继承Servlet类或GenericServlet类或HttpServlet类,有三个主要的生命周期相关的方法:init()、service()、destroy(),一般会重写,会在service()中自动调用的doGet()和doPost()方法,对采用get方式或post方式提交的请求进行处理响应。
1、Cookie:Cookie是客户端技术,程序把每个用户的数据以cookie的形式写给用户各自的浏览器。当用户使用浏览器再去访问服务器中的web资源时,就会带着各自的数据去。这样,web资源处理的就是用户各自的数据了。
2、Session:Session是服务器端技术,利用这个技术,服务器在运行时可以为每一个用户的浏览器创建一个其独享的session对象,由于session为用户浏览器独享,所以用户在访问服务器的web资源时,可以把各自的数据放在各自的session中,当用户再去访问服务器中的其它web资源时,其它web资源再从用户各自的session中取出数据为用户服务。
三、实验内容:
一、熟悉web.xml文件中与servle的相关的部分。
二、应用servlet处理用户的表单。
三、使用cookie技术使用户在二周内免登录
四、应用session制作虚拟购物车。
四、实验步骤:
一、应用servlet处理用户的表单
1、新建立一个web应用程序
2、在应用程序中,建立一个regist.html文档。
3、在HTML文档中编写一个表单,表单的元素有:用户名(单行文本框)、密码、密码确认、姓名(单选)、兴趣爱好(多选)以及个人描述(多行文本)。
4、新建立一个servlet,用该servlet接收用户在regist.html表单中输入的信息,并显示。
源代码:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<form action="/show" method="post">
用户名:<input type="text" name="name"/><br>
密 码:<input type="password" name="password"/><br>
性 别: <input type="radio" name="sex" value="boy" />男<br>
<input type="radio" name="sex" value="girl"/>女<br>
密码确认:<input type="passwordagain" name="passwordagain"/><br>
兴趣爱好:
<input name="fav" type="checkbox" value="sing">唱歌<br>
<input name="fav" type="checkbox" value="dance">跳舞<br>
<input name="fav" type="checkbox" value="ball">打球<br>
<input name="fav" type="checkbox" value="game">打游戏<br>
<input type="submit" value="提交"/>
<input type="reset" value="重置"/>
</form>
</body>
</html>
package edu.xalead;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.Arrays;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class showServlet extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
request.setCharacterEncoding("utf-8");
response.setContentType("text/html;charset=utf-8");
String name = request.getParameter("name");
String password = request.getParameter("password");
String sex = request.getParameter("sex");
String[] fav = request.getParameterValues("fav");
PrintWriter pw = response.getWriter();
pw.print("<html><body>");
pw.print("<br>表单提交到servlet的数据如下:<br>");
pw.print("姓名:" + name + "<br>" );
pw.print("密码:" + password + "<br>");
pw.print("性别:"+ sex+ "<br>" );
pw.print( "爱好:"+ Arrays.asList(fav)+"<br>" );
pw.print("</body></html>");
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
this.doPost(request, response);
}
}
二、使用cookie技术使用户在二周内免登录
(1)新建一个login.jsp页面,制作一个表单,包含用户名和密码框登录按钮以及一个在二周内无需登录的选择框。该页面检查cookies中是否存在名为user的项,如果存在,则不显示登录表,并跳到hello.jsp页面。
(2)将登录的表单交由一个servlet来处理,这个servlet收集用户名和密码,并向客户端发送cookie。注意设置cookie的有效周期为2周。
源代码:
<%--
Created by IntelliJ IDEA.
User: lenovo
Date: 2019/10/26
Time: 17:15
To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>login.jsp</title>
</head>
<body>
<h2>登录</h2>
<%
//首先检查
Cookie[] cookies = request.getCookies();
String name = "";
String password = "";
if (cookies != null && cookies.length != 0) {
for (int i = 0; i < cookies.length; i++) {
if (cookies[i] != null) {
if (cookies[i].getName().equals("name")) {
name = cookies[i].getValue();
}
}
if (cookies[i] != null) {
if (cookies[i].getName().equals("password")) {
password = cookies[i].getValue();
}
}
}
}
if (!name.equals("") && !(password.equals(""))
&& name.equals("user")) {
request.getRequestDispatcher("/hello.jsp").forward(request,response);
} else {
%>
<form action="/cookie" method="post">
用户名:<input type="text" name="name" /><br>
密码:<input type="password" name="password" /><br>
是否保存两个周免登陆状态:
<%--<input type="checkbox" name="keep">两个周免登陆<br>--%>
<input type="radio" name="saveLoginState" value="1" checked="checked">是
<input type="radio" name="saveLoginState" value="0">否<br>
<input type="submit" value="登录">
</form>
<%
}
%>
<%
Cookie[] cookie = request.getCookies();
if(cookie!=null){
for(int i=0;i<cookie.length;i++){
if(cookie[i].getName().equals("user")){
request.getRequestDispatcher("hello.jsp");
}
}
}
%>
</body>
</html>
package edu.xalead;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class ServletCookie extends HttpServlet {
protected void doGet (HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
this.doPost(request, response);
}
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
response.setCharacterEncoding("UTF-8");
response.setContentType("text/html;charset=UTF-8");
/*String name = request.getParameter("name");
String passowrd = request.getParameter("password");*/
/*Cookie cookie1 = new Cookie("name", "name");
Cookie cookie2 = new Cookie("password", "password");
cookie1.setMaxAge(1209600);
cookie2.setMaxAge(1209600);
response.addCookie(cookie1);
response.addCookie(cookie2);*/
/*System.out.println(name + ":" + passowrd);*/
String name = request.getParameter("name");
String passowrd = request.getParameter("password");
String saveLoginState = request.getParameter("saveLoginState");
if (name != null && !(name.equals("")) && passowrd != null
&& !(passowrd.equals(""))) {
//若用户选择
if (saveLoginState != null && saveLoginState.equals("1")) {
Cookie cookie1 = new Cookie("name", name);
cookie1.setMaxAge(1209600);
response.addCookie(cookie1);
Cookie cookie2 = new Cookie("password", passowrd);
cookie2.setMaxAge(1209600);
response.addCookie(cookie2);
}
response.getWriter().println(name + " :" + passowrd);
} else {
response.sendRedirect("login.jsp");
}
}
}
三、应用session制作虚拟购物车。
(自行设计一个购物车,用户在不同页面跳转,并选定不同商品时,存储在一个数据结构中,并作为session中的一个attribute中暂存于session中,用户退出或结算时清除该购物车。无需连接数据库。要求有简单的数量选择。)
<%--
Created by IntelliJ IDEA.
User: lenovo
Date: 2019/10/23
Time: 11:00
To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Title</title>
</head>
<body>
<p> 这里是网上商城,选择您需要的商品添加到购物车 :
<form action="/addcar" method="post" name="form">
<select name="item" value="未选择">
<option value="TV" />电视机
<option value="apple"/>苹果
<option value="coke"/>可口可乐
<option value="milk"/>牛奶
<option value="tea"/>茶叶
</select>
<select name="item" value="未选择">
<option value="铅笔" />铅笔
<option value="港币"/>港币
<option value="素描纸"/>素描纸
<option value="橡皮"/>橡皮
<option value="壁纸"/>壁纸
</select>
<select name="item" value="未选择">
<option value="茶壶" />茶壶
<option value="靴子"/>靴子
<option value="袜子"/>袜子
<option value="酸奶"/>酸奶
<option value="糖果"/>糖果
</select>
<p>输入购买的数量:
<input type="text" name ="mount">
<p>选择计量单位:
<input type="radio" name="unit" value="个">个
<input type="radio" name="unit" value="公斤">公斤
<input type="radio" name="unit" value="台">台
<input type="radio" name="unit" value="瓶">瓶
<input type="radio" name="unit" value="部">部
<input type="radio" name="unit" value="支">支
<input type="radio" name="unit" value="张">张
<input type="radio" name="unit" value="双">双
<input type="radio" name="unit" value="把">把
<input type="submit" value="添加提交">
<input type="reset" value="重设">
</p>
</form>
<hr>
<a href="shopping2.jsp">其它物品</a>
<a href="remove.jsp">删除商品</a>
</p>
</body>
</html>
<%--
Created by IntelliJ IDEA.
User: lenovo
Date: 2019/10/26
Time: 18:36
To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Title</title>
</head>
<body>
<form action="/addcar" method="post" name="form">
<select name="item" value="未选择">
<option value="phone" />手机
<option value="computer"/>电脑
<option value="t-shitr"/>T恤
<option value="chopsticks"/>筷子
<option value="noodle"/>面条
</select>
<p>输入购买的数量:
<input type="text" name ="mount">
<p>选择计量单位:
<input type="radio" name="unit" value="部">部
<input type="radio" name="unit" value="台">台
<input type="radio" name="unit" value="件">件
<input type="radio" name="unit" value="双">双
<input type="radio" name="unit" value="把">把
<input type="submit" value="添加提交">
<input type="reset" value="重设">
</p>
</form>
</body>
</html>
<%--
Created by IntelliJ IDEA.
User: lenovo
Date: 2019/10/23
Time: 11:33
To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Title</title>
</head>
<body>
<p> 选择要从购物车中删除的商品:
<form action="/removegoods" method="post" name="form">
<select name="item" value="未选择">
<option value="TV" />电视机
<option value="apple"/>苹果
<option value="coke"/>可口可乐
<option value="milk"/>牛奶
<option value="tea"/>茶叶
</select>
<select name="item" value="未选择">
<option value="phone" />手机
<option value="computer"/>电脑
<option value="t-shitr"/>T恤
<option value="chopsticks"/>筷子
<option value="noodle"/>面条
</select>
<input type="submit" value="提交删除">
</form>
</body>
</html>
package edu.xalead;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.Enumeration;
public class AddCarServlet extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
response.setContentType("text/html;charset=utf-8");
response.setCharacterEncoding("utf-8");
request.setCharacterEncoding("utf-8");
PrintWriter pw = response.getWriter();
pw.println("<html>");
pw.println("<body>");
HttpSession session = request.getSession(true);
String item = request.getParameter("item"),
mount = request.getParameter("mount"),
unit = request.getParameter("unit");
String str = "Name:" +item+ " Mount:" + mount + " Unit:" + unit;
session.setAttribute(item,str);
pw.println("goods in your car :");
Enumeration e = session.getAttributeNames();
while(e.hasMoreElements()){
String name = (String) e.nextElement();
pw.println("<br>" + session.getAttribute(name));
}
pw.println("</body>");
pw.println("</html>");
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
this.doPost(request,response);
}
}
package edu.xalead;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.Enumeration;
public class RemoveGoodsServlet extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
response.setContentType("text/html;charset=utf-8");
response.setCharacterEncoding("utf-8");
PrintWriter pw = response.getWriter();
pw.println("<html>");
pw.println("<body>");
HttpSession session = request.getSession(true);
String item = request.getParameter("item");
session.removeAttribute(item);
pw.println("<h3>Now goods in your car :</h3>");
Enumeration e= session.getAttributeNames();
while(e.hasMoreElements()){
String name = (String) e.nextElement();
pw.println("<br>" + session.getAttribute(name));
}
pw.println("</body>");
pw.println("</html>");
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
this.doPost(request,response);
}
}