您的位置:首页 > 编程语言 > Java开发

Java中 操作Servlet域中的值以及会话技术 cookie

2018-03-28 20:56 477 查看
XML文件
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://xmlns.jcp.org/xml/ns/javaee" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd" id="WebApp_ID" version="3.1">
<display-name>SH-web-servlet-03</display-name>
<welcome-file-list>
<welcome-file>index.html</welcome-file>
<welcome-file>index.htm</welcome-file>
<welcome-file>index.jsp</welcome-file>
<welcome-file>default.html</welcome-file>
<welcome-file>default.htm</welcome-file>
<welcome-file>default.jsp</welcome-file>
</welcome-file-list>
<servlet>
<servlet-name>demo01</servlet-name>
<servlet-class>com.lanou3g.Demo01</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>demo01</servlet-name>
<url-pattern>/demo01</url-pattern>
</servlet-mapping>

<servlet>
<servlet-name>demo02</servlet-name>
<servlet-class>com.lanou3g.Demo02</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>demo02</servlet-name>
<url-pattern>/demo02</url-pattern>
</servlet-mapping>

<servlet>
<servlet-name>demo03</servlet-name>
<servlet-class>com.lanou3g.Demo03</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>demo03</servlet-name>
<url-pattern>/demo03</url-pattern>
</servlet-mapping>

<servlet>
<servlet-name>demo04</servlet-name>
<servlet-class>com.lanou3g.Demo04</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>demo04</servlet-name>
<url-pattern>/servlet/demo04</url-pattern>
</servlet-mapping>

<servlet>
<servlet-name>demo05</servlet-name>
<servlet-class>com.lanou3g.Demo05</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>demo05</servlet-name>
<url-pattern>/servlet/demo05</url-pattern>
</servlet-mapping>

<servlet>
<servlet-name>demo06</servlet-name>
<servlet-class>com.lanou3g.Demo06</servlet-class>
</servlet>
<
4000
servlet-mapping>
<servlet-name>demo06</servlet-name>
<url-pattern>/servlet/demo06</url-pattern>
</servlet-mapping>

<servlet>
<servlet-name>demo07</servlet-name>
<servlet-class>com.lanou3g.Demo07</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>demo07</servlet-name>
<url-pattern>/servlet/demo07</url-pattern>
</servlet-mapping>

</web-app>


将form表单上的参数传到Servlet中

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<form action="/SH-web-servlet-03/demo01" method="post">
用户名:<input type="text" name="username"/>
<br>
密码:<input type="text" name="password"/>
<br>
男<input type="radio" name="sex" value="男" checked="checked" />
<br>
女<input type="radio" name="sex" value="女" />
<br>
<input type="checkbox" name="hobby" value="篮球"/>篮球
<input type="checkbox" name="hobby" value="唱歌"/>唱歌
<input type="checkbox" name="hobby" value="画画"/>画画
<br>
<select name="city">
<option>---请选择---</option>
<option>北京</option>
<option>天津</option>
<option>上海</option>
</select>
<br>
<input type="submit" value="提交">

</form>
</body>
</html>


public class Demo01 extends HttpServlet {

public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// fun1(request, response);
// fun2(request, response);

// 设置响应编码格式
response.setContentType("text/html;charset=UTF-8");
// 告诉服务器 请求的内容是什么编码格式的
request.setCharacterEncoding("UTF-8");
// 把表单数据封装到对象中
// 参数1 要封装的对象 注意: 该对象要符合javabean规范
// 参数2 map集合
User user = new User();
Map<String, String[]> map = request.getParameterMap();
try {
BeanUtils.populate(user, map);
System.out.println(user);
} catch (IllegalAccessException | InvocationTargetException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}

}

private void fun2(HttpServletRequest request, HttpServletResponse response) throws UnsupportedEncodingException {
// 设置响应编码格式
response.setContentType("text/html;charset=UTF-8");
// 告诉服务器 请求的内容是什么编码格式的
request.setCharacterEncoding("UTF-8");

// 利用getParameterNames()打印表格
Enumeration<String> enumeration = request.getParameterNames();
while (enumeration.hasMoreElements()) {
String name = enumeration.nextElement();
// 根据name取出对应值
String[] values = request.getParameterValues(name);
for (String value : values) {
System.out.println(value);
}
}
}

private void fun1(HttpServletRequest request, HttpServletResponse response) throws UnsupportedEncodingException {

// 设置响应编码格式
response.setContentType("text/html;charset=UTF-8");
// 告诉服务器 请求的内容是什么编码格式的
request.setCharacterEncoding("UTF-8");

// 获取表单中 所有提交的数据打印
String username = request.getParameter("username");
System.out.println(username);
String password = request.getParameter("password");
System.out.println(password);
String sex = request.getParameter("sex");
System.out.println(sex);
// 获取复选框传递的值
String[] hobby = request.getParameterValues("hobby");
if (hobby != null) {
for (String h : hobby) {
System.out.println(h);
}
}
String city = request.getParameter("city");
System.out.println(city);
}

public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doGet(request, response);
}

}


请求转发 请求重定向 请求包含 获取Servlet域中的值

/*
* 请求转发
* 请求重定向
* 请求包含
*
* Request 也是一个域对象
* 域对象内部就是维护了一个map集合(有添加删除获取的方法)
* request域的作用范围: 一次请求当中 可以获取到域中保存的数据
*/
public class Demo02 extends HttpServlet {

public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// 乱码两句
response.setContentType("text/html;charset=UTF-8");
request.setCharacterEncoding("UTF-8");
// 给request域中 添加值
request.setAttribute("name", "xiaoming");

// 获取字符流
PrintWriter out = response.getWriter();

// 请求包含
// 相当于把两个页面的响应合成为一个响应 返回给浏览器
// 请求转发 浏览器只能响应一次数据
request.getRequestDispatcher("/demo03").include(request, response);
// 响应一句话
out.write("123");

System.out.println("demo02结尾");
//fun1(request, response);
//fun2(response);
}

private void fun2(HttpServletResponse response) throws IOException {
// 请求重定向 查看是否能获取域中的值
// 重定向是两次请求 不能获取到request域中的值
// 重定向即可以访问 本地服务器 也可以访问 非本地服务器
//      response.setHeader("location", "/SH-web-servlet-03/demo03");
//      response.setStatus(302);
// 这句和上面两句是一样的 只不过是另一种方法
response.sendRedirect("/SH-web-servlet-03/demo03");

}

private void fun1(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// 请求转发 获取转发器
// 请求转发是一次请求 可以获取到request域中的值
// 请求转发 只是服务器内部的访问
//              不管你怎么写路径 始终都在项目路径下
RequestDispatcher dispatcher = request.getRequestDispatcher("/demo03");
dispatcher.forward(request, response);
}

public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doGet(request, response);
}

}

public class Demo03 extends HttpServlet {

publ
c345
ic void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

response.getWriter().write("456");
// 获取request域中 保存的值
String name = (String)request.getAttribute("name");
System.out.println("Demo03" + name);
}

public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doGet(request, response);
}

}


会话技术

/*
* 会话技术
* 客户端(浏览器)和服务端进行交互(会话)
* 当浏览器关闭的时候 这次交互(会话)结束
* 例如打电话
* 会话中有两个技术
* 1.小饼干 cookie(客户端技术)
* cookie是保存在浏览器中的缓存数据
* 当我发起一个请求 请求一个Servlet 进行逻辑处理(添加一个商品进购物车)
* 处理完成后 给客户端(浏览器)一个响应
* 响应中携带者记录了购买的什么商品的cookie
* 让浏览器保存起来 可以是保存在内存当中(结束会话 cookie被清除) 也可以保存在硬盘中(结束会话 依然存在 相当于一个文件)
* 当用浏览器再一次请求购物车的时候
* 会携带着之前保存的 cookie 去访问
* 每个网站可以保存20个cookie 整个浏览器 可以保存300个cookie
*
* 注意:第一次访问浏览器是不会携带cookie去访问的 因为cookie还没有产生
* 只有当第一次请求之后的响应中可以把cookie写回到浏览器中
*
* 2.HttpSession(服务端技术)
* HttpSession是保存在服务端中的
*
* 显示上次登录的时间
* 思路:
* 第一次访问的时候 利用cookie 响应到(写到)浏览器中
* 下次再访问的时候 从cookie中把时间取出来
*/
public class Demo04 extends HttpServlet {

public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
response.setContentType("text/html;charset=UTF-8");
request.setCharacterEncoding("UTF-8");

// 读取cookie
Cookie[] cookies = request.getCookies();
if (cookies != null) {
// 遍历数组
for (Cookie cookie : cookies) {
if (cookie.getName().equals("lastTime")) {
// 取出cookie的值
String value = cookie.getValue();
// 字符串转Long
long time = Long.parseLong(value);
// 转成日期 Date
Date date = new Date(time);
// 创建一个显示的日期格式
// 参数就是你想要的日期格式
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
// 格式化时间
String lastTime = dateFormat.format(date);
// 响应回浏览器显示
response.getWriter().write("上次的访问时间:" + lastTime);
}
}
}

// 创建一个cookie 记录当前的时间
Cookie cookie = new Cookie("lastTime", System.currentTimeMillis() + "");
// 设置一下cookie的保存路径 工程名 + 配置的网址路径
// 读取cookie的时候 是按请求的地址寻找cookie的
// 如果配置请求路径没有一级目录
// 这样全网站 所有的网址请求 都能找到你这个cookie
// cookie.setPath("/");
cookie.setPath("/SH-web-servlet-03/servlet");
// 设置cookie存活时间 以秒为单位
// 负值 表示 浏览器关闭 cookie消失
// 正值 表示存活的时间
// 0 表示 删除cookie
cookie.setMaxAge(5 * 60);
// 把cookie添加进响应当中
response.addCookie(cookie);

}

public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doGet(request, response);
}

}


cookie

public class Demo05 extends HttpServlet {

public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
response.setContentType("text/html;charset=UTF-8");
request.setCharacterEncoding("UTF-8");

// 读取cookie
Cookie[] cookies = request.getCookies();
if (cookies != null) {
// 遍历数组
for (Cookie cookie : cookies) {
if (cookie.getName().equals("lastTime")) {
// 取出cookie的值
String value = cookie.getValue();
// 字符串转Long
long time = Long.parseLong(value);
// 转成日期 Date
Date date = new Date(time);
// 创建一个显示的日期格式
// 参数就是你想要的日期格式
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
// 格式化时间
String lastTime = dateFormat.format(date);
// 响应回浏览器显示
response.getWriter().write("上次的访问时间:" + lastTime);
}
}
}

}

public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doGet(request, response);
}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  servlet cookie java xml 请求