- 四.Servlet
- 1. 创建一个Servlet :star:
- 2.ServletContext
- 1)共享数据
- 2)获取初始化参数
- 3)转发请求
- 4)读取资源文件
- 3.响应-Response
- 4.请求-Request
- 5.cookie 和 session
- 1)区别
- 2)cookie
- 3)session
- 五.JSP
- 0.准备工作
- 1.基础语法
- 2.标签库 JSTL
- 六.MVC
- 七、过滤器-Filter
- 八.Junit单元测试
servlet 就是开发动态 web 的一门技术 —— 是实现了 Servlet 接口的 java 程序
- 编写一个类,实现 servlet 接口
- 把开发好的 java 类部署到 web 服务器中
IDEA:用maven创建servlet例子1(详细)
IDEA:用maven创建servlet例子2(mapping)
-
创建项目
-
添加依赖
javax.servlet javax.servlet-api 4.0.1 javax.servlet.jsp javax.servlet.jsp-api 2.3.3 -
在 java 包下创建测试类
重写 HttpServlet 方法。接收并处理请求,给出响应信息
-
编写 servlet 映射
web.xml添加servlet信息
hello com.zheng.servlet.HelloServlet hello /hello -
启动 Tomcat 服务
web容器在登录的时候,它会为每个web程序都创建一个对应的 ServletContext 对象,它代表了当前的 web 应用
ServletContext slContext = this.getServletContext();
1)共享数据//【A类】为set类用于存放数据
ServletContext slContext = this.getServletContext();
String uname = "我的名字";
slContext.setAttribute("username",uname);
//【B类】为get类用于获取数据
ServletContext slContext = this.getServletContext();
String username = (String) slContext.getAttribute("username");
//用于设置返回格式及编码
resp.setContentType("text/html");
resp.setCharacterEncoding("utf-8");
resp.getWriter().print(username);
输出结果:
注:两个类所定义的 this.getServletContext() 指向的是同一个对象,因为ServletContext是全局唯一的存在
2)获取初始化参数url jdbc:mysql://locahost:3306/stuDB
ServletContext slContext = this.getServletContext();
String url = slContext.getInitParameter("url");
resp.getWriter().print(url);
3)转发请求
使用 forward (req,resp) 方法转发
ServletContext slContext = this.getServletContext();
slContext.getRequestDispatcher("/demo3").forward(req,resp);
4)读取资源文件
// resources 下有一个资源 db.properties,打包后会去到"/WEB-INF/classes"目录下
InputStream resource = this.getServletContext().getResourceAsStream("/WEB-INF/classes/db.properties");
Properties prop = new Properties();
prop.load(resource);
String name = prop.getProperty("name");
String pass = prop.getProperty("pass");
resp.getWriter().print("name="+name);
resp.getWriter().print("pass="+pass);
3.响应-Response
向浏览器发送数据的方法
//发送其他信息 ServletOutputStream getOutputStream() throws IOException; //发送文本 PrintWriter getWriter() throws IOException;
向浏览器发送响应头的方法
//响应编码 例:resp.setCharacterEncoding("utf-8");
void setCharacterEncoding(String var1);
//响应字符串长度
void setContentLength(int var1);
//响应类型 例:resp.setContentType("text/html");
void setContentType(String var1);
重定向
resp.sendRedirect("/img"); //url地址栏会改变
4.请求-Request
获取传递参数
//获取某个参数值 uname = req.getParameter("uname");
String getParameter(String var1);
5.cookie 和 session
1)区别
- cookie
- 客户端技术 - 把用户的数据写给用户浏览器,浏览器保存
- 是服务端将资源放在 cookie对象中 返回给客户端
- cookie 大小限制为 4kb
- session
- 服务端技术 - 把用户数据写到用户独占 session 中,服务器保存
- 是用户拿着sessionID去获取对应服务器中对应的资源
- 创建一个cookie,并添加到 resp
cookie coo = new cookie("names", "zhengs");//参数分别为键和值
coo.setMaxAge(30); //【可选项】设置有效期为30秒,不设置情况下关闭浏览器既删除
resp.addcookie(coo);
- 从请求中获取 cookie
cookie[] cookies = req.getcookies();//返回的是数组
for(cookie cookie : cookies){
out.write(cookie.getName()+" ");
out.write(cookie.getValue());
}
- 删除 cookie
coo.setMaxAge(0); //有效期设置为03)session
- 获取 session
HttpSession session = req.getSession();
- session 属性
//设置属性
session.setAttribute("name",new persion("小郑同学",21));
//获取属性
persion name = (persion)session.getAttribute("name");
//获取id
String id = session.getId();
//判断 session 是不是刚新建的
if (session.isNew()){
resp.getWriter().write("创建了session ID:"+id);
}else {
resp.getWriter().write("获得了session ID:"+id);
}
- 注销
HttpSession session = req.getSession();
session.removeAttribute("name");
session.invalidate();
- 可在 xml 配置文件中设置 session 的过期时间
五.JSP10
Java Server Pages:Java服务器页面
0.准备工作1.基础语法javax.servlet.jsp javax.servlet.jsp-api 2.3.3 javax.servlet.jsp.jstl jstl-api 1.2 taglibs standard 1.1.2
<%--页面配置--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%--表达式--%>
时间:<%= new java.util.Date()%>
<%--脚本片段 跟java一样的--%>
<%
out.println("输出h1到h5标签");
for (int i = 1; i < 6; i++) {
out.println("标题 "+i+" ");
}
%>
2.标签库 JSTL
弥补HTML标签的不足
核心标签
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
注:tomcat的lib目录下可能没有 jst-api 包和 standard 包,将会报错
| 标签 | 描述 |
|---|---|
| 用于在JSP中显示数据,就像<%= … > | |
| 用于保存数据 | |
| 用于删除数据 | |
| 与一般程序中用的if一样 | |
| 基础迭代标签,接受多种集合类型 | |
| 使用可选的查询参数来创造一个URL |
-
Filter :过滤器-过滤网站的数据
编写过滤器,导包 > 重写
import javax.servlet.*; import java.io.IOException; public class file implements Filter { public void init(FilterConfig filterConfig) throws ServletException { System.out.println("过滤器-初始化"); } //过滤内容 public void doFilter(ServletRequest req, ServletResponse resp, FilterChain Chain) throws IOException, ServletException { req.setCharacterEncoding("utf-8"); resp.setCharacterEncoding("gbk"); Chain.doFilter(req,resp);//放行,如果不写程序会被拦截 } public void destroy() { System.out.println("过滤器-销毁"); } }在 web.xml中配置filter
filterEncoding com.zheng.filter.file filterEncoding /file/*
test目录下 > texts类 (只要添加 Test 注解,即可直接运行该类)
import org.junit.Test; //导包
public class texts {
@Test
public void text(){
System.out.println("Hello");
}
}


![java4.1 javaWeb[ servlet ] java4.1 javaWeb[ servlet ]](http://www.mshxw.com/aiimages/31/490097.png)
