C/S和B/S是软件发展过程中出现的两种软件架构方式。
服务器分为两大类:一类是硬件服务器,就是一台比普通计算机更强的主机服务器;一类就是软件服务器,就是一个软件,安装在硬件电脑中
java 2 platomform enterprise : java企业版
在1.0到1.4时,称为j2ee,从5.0开始,称为javaee
进行服务器技术开发的技术规范,总共有13个:jsp/servlet、jdbc、jndi、jni等等
静态资源:指Web页面中供人们浏览的数据始终是不变的。(HTML、CSS)
动态资源:指Web页面中供人们浏览的数据是由程序产生的,不同时间点,甚至不同设备访问Web页面看到的内容各不相同。(JSP/Servlet)
在Java中,动态Web资源开发技术我们统称为Java Web。
Web服务器是运行及发布Web应用的容器,只有将开发的Web项目放置到该容器中,才能使网络中的所有用户通过浏览器进行访问。
服务器的简单作用:共享资源,任何人都可以通过浏览器进行访问
什么是服务器?
1.就是一台电脑(大型计算机)
2.是在电脑中安装一个服务器软件
Tomcat是Apache 软件基金会(Apache Software Foundation)的Jakarta 项目中的一个核心项目,免费开源、并支持Servlet 和JSP 规范。目前Tomcat最新版本为10.0。
Tomcat 技术先进、性能稳定,深受Java 爱好者喜爱并得到了部分软件开发商的认可,成为目前比较流行的Web 应用服务器。本身其实就是一个服务器软件
文件夹 | 说明 | 备注 |
---|---|---|
bin | 该目录下存放的是二进制可执行文件 | startup.bat启动Tomcat、shutdown.bat停止Tomcat |
conf | 该目录下存放的是一些配置文件,这是一个非常重要的目录,这个目录下有两个最为重要的文件server.xml和web.xml | server.xml:配置整个服务器信息。例如修改端口号,编码格式等。 web.xml:项目部署描述符文件,这个文件中注册了很多MIME类型,即文档类型。 |
lib | Tomcat的类库,里面存放Tomcat运行所需要的jar文件。 | |
logs | 存放日志文件,记录了Tomcat启动和关闭的信息,如果启动Tomcat时有错误,异常也会记录在日志文件中。 | |
temp | Tomcat的临时文件,这个目录下的东西在停止Tomcat后删除。 | |
webapps | 存放web项目的目录,其中每个文件夹都是一个项目;其中ROOT是一个特殊的项目,在地址栏中没有给出项目目录时,对应的就是ROOT项目。 | |
work | 运行时生成的文件,最终运行的文件都在这里。 | 当客户端用户访问一个JSP文件时,Tomcat会通过JSP生成Java文件,然后再编译Java文件生成class文件,生成的java和class文件都会存放到这个目录下。 |
Tomcat默认端口号为8080,可以通过conf/server.xml文件修改
<Connector port="8080" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443" />
注意:修改端口号需要重新启动Tomcat才能生效
可以用于存放web静态资源、web动态资源的项目,可以部署到tomcat服务器中,供外部设备访问
项目结构
web.xml文件
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
version="4.0">
web-app>
http://主机地址:端口号/项目名称/资源名称
webapps
虚拟目录基础版
虚拟目录优化版
在tomcat/conf/Catalina新建一个fuck.xml文件,内容如下;
<Context docBase="C:\Users\Desktop\mywebproject"/>
浏览器地址中输入URL:http://localhost:8080/服务器名称/index.html
闪退问题是由于JAVA_HOME配置导致的,检查JAVA_HOME配置是否正确
一般是访问资源不存在,才会出现404错误。请检查访问的路径是否输入错误
<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" version="3.1">
<servlet>
<servlet-name>MyServletservlet-name> --别名
<servlet-class>com.qf.servlet.MyServletservlet-class> --指明对应servlet类
servlet>
<servlet-mapping>
<servlet-name>MyServletservlet-name> -- 别名
<url-pattern>/myservleturl-pattern> ---路径名
servlet-mapping>
web-app>
支持客户端(浏览器)/服务器模式。
简单快速:客户端只向服务器发送请求方法和路径,服务器即可响应数据,因而通信速度很快。请求方法常用的有GET、POST等。
灵活:HTTP允许传输任意类型的数据,传输的数据类型由Content-Type标识。
无连接:无连接指的是每次TCP连接只处理一个或多个请求,服务器处理完客户的请求后,即断开连接。采用这种方式可以节省传输时间。
在Servlet API中最重要的是Servlet接口,所有Servlet都会直接或间接的与该接口发生联系,或是直接实现该接口,或间接继承自实现了该接口的类。
该接口包括以下五个方法:
/**
* Servlet创建的第一种方式:实现接口Servlet
* */
public class HelloServlet2 implements Servlet{
@Override
public void destroy() {
}
@Override
public ServletConfig getServletConfig() {
return null;
}
@Override
public String getServletInfo() {
return null;
}
@Override
public void init(ServletConfig arg0) throws ServletException {
}
@Override
public void service(ServletRequest request, ServletResponse response) throws ServletException, IOException {
System.out.println("OK");
//响应
response.getWriter().println("welcome use servlet");
}
}
/**
* Servlet implementation class HelloServlet
* Servlet的第二种创建方式,继承HttpServlet.也是开发中推荐的
*
*/
public class HelloServlet extends HttpServlet {
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
response.getWriter().print("welcome use servlet");
}
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doGet(request, response);
}
}
<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" version="3.1">
<display-name>Web_Day11display-name>
<servlet>
<servlet-name>hello2servlet-name>
<servlet-class>com.qf.web.servlet.HelloServletservlet-class>
<load-on-startup>1load-on-startup>
servlet>
<servlet-mapping>
<servlet-name>hello2servlet-name>
<url-pattern>/hello2url-pattern>
servlet-mapping>
<welcome-file-list>
<welcome-file>login.htmlwelcome-file>
welcome-file-list>
web-app>
/**
* Servlet implementation class HelloServlet
* 演示Servlet注解式配置
*/
@WebServlet("/hello")
public class HelloServlet extends HttpServlet {
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
response.getWriter().print("OK");
}
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doGet(request, response);
}
}
public class MyDefaultServlet extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
System.out.println("MyDefaultServlet");
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doPost(request, response);
}
}
<servlet>
<servlet-name>MyDefaultServletservlet-name>
<servlet-class>com.qfedu.servlet.MyDefaultServletservlet-class>
servlet>
<servlet-mapping>
<servlet-name>MyDefaultServletservlet-name>
<url-pattern>/url-pattern>
servlet-mapping>
get请求
post请求
getParameter : 获取指定参数的值
getParameterValues :获取指定参数的一组值
getParameterNames : 获取所有参数名称
getParameterMap : 获取所有参数名称及对应的一组值,将它们封装到map
在Tomcat7及以下版本,客户端以UTF-8的编码传输数据到服务器端,而服务器端的request对象使用的是ISO8859-1这个字符编码来接收数据,服务器和客户端沟通的编码不一致因此才会产生中文乱码的。
解决办法:在接收到数据后,先获取request对象以ISO8859-1字符编码接收到的原始数据的字节数组,然后通过字节数组以指定的编码构建字符串,解决乱码问题。
Tomcat8的版本中get方式不会出现乱码了,因为服务器对url的编码格式可以进行自动转换。
代码演示
/**
* Servlet implementation class HelloServlet
* 演示Servlet的GET请求,中文乱码的问题
*
*/
@WebServlet("/GETServlet")
public class GetServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//获取表单提交的姓名
String name=request.getParameter("name");
name=new String(name.getBytes("ISO8859-1"),"UTF-8");
//获取年龄
String age=request.getParameter("age");
//服务端输出打印
System.out.println(request.getRemoteAddr()+"发来信息:姓名:"+name+"---->年龄:"+age);
}
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doGet(request, response);
}
}
由于客户端是以UTF-8字符编码将表单数据传输到服务器端的,因此服务器也需要设置以UTF-8字符编码进行接收。
解决方案:使用从ServletRequest接口继承而来的setCharacterEncoding(charset)方法进行统一的编码设置。
代码演示
/**
* Servlet implementation class HelloServlet
* 演示Servlet的GET请求,中文乱码的问题
*
*/
@WebServlet("/GETServlet")
public class GetServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
}
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//设置请求参数的编码格式--对GET无效
request.setCharacterEncoding("UTF-8");
//获取表单提交的信息
String name=request.getParameter("msg");
//服务端输出打印
System.out.println(request.getRemoteAddr()+"发来信息:"+msg);
}
}
域对象
生命周期
注意事项
@WebServlet("/demo12")
public class Demo12Servlet extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//服务器编码(iso8859-1): login成功 -> 字节
//浏览器解码(utf-8?): 字节 -> login??
//解决请求参数中文乱码 : 告诉服务器以utf-8对请求正文进行解码
request.setCharacterEncoding("utf-8");
//解决响应中文乱码:告诉服务器以utf-8对响应正文进行编码 , 且告诉浏览器以utf-8对响应正文进行解码
// response.setCharacterEncoding("utf-8");
// response.setHeader("Content-Type","text/html;charset=utf-8");
response.setContentType("text/html;charset=utf-8");
PrintWriter writer = response.getWriter();
String username = request.getParameter("username");
String password = request.getParameter("password");
if ("root".equals(username) && "root".equals(password)) {
//登录成功
writer.write("login成功");
} else {
//登录失败
writer.write("login失败");
}
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doPost(request, response);
}
}
response对象之自制图片验证码
代码实现
public class ImageCodeUtil {
private static String codeNum;//验证码
/**
* 获取验证码图片
*
* @return
*/
public static BufferedImage getBufferedImage() {
int charNum = 4;
int width = 30 * 4;
int height = 30;
//1,创建内存对象
BufferedImage bufferedImage = new BufferedImage(width, height,
BufferedImage.TYPE_INT_RGB);
//2,获取绘图对象
Graphics graphics = bufferedImage.getGraphics();
//3,绘制背景颜色
graphics.setColor(Color.LIGHT_GRAY);
graphics.fillRect(0, 0, width, height);
//绘制边框
graphics.setColor(Color.BLUE);
graphics.drawRect(0, 0, width - 1, height - 1);
//设置验证码文字样式
graphics.setColor(Color.BLACK);
graphics.setFont(new Font("宋体", Font.BOLD, 23));
//设置验证码文字内容
Graphics2D graphics2d = (Graphics2D) graphics;
String s = "ABCDEFGHIGKLMNOPQRSTUVWXYZ";
Random random = new Random();
String msg = "";
int x = 5;
for (int i = 0; i < 4; i++) {
int index = random.nextInt(26);//0-25
String content = String.valueOf(s.charAt(index));
msg += content;
double theta = random.nextInt(45) * Math.PI / 180;
graphics2d.rotate(theta, x, 18);
graphics2d.drawString(content, x, 18);
graphics2d.rotate(-theta, x, 18);
x += 30;
}
codeNum = msg;
//释放资源
graphics.dispose();
// ImageIO.write(bufferedImage, "jpg", response.getOutputStream());
return bufferedImage;
}
/**
* 返回验证码
*
* @return
*/
public static String getCodeNum() {
return codeNum;
}
}
@WebServlet("/demo13")
public class Demo13Servlet extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
BufferedImage bufferedImage = ImageCodeUtil.getBufferedImage();
ImageIO.write(bufferedImage,"jpg",response.getOutputStream());
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doPost(request, response);
}
}
response对象之控制缓存
代码实现
@WebServlet("/demo14")
public class Demo14Servlet extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
System.out.println("Demo14Servlet");
response.setDateHeader("Expires",System.currentTimeMillis() + 1 * 60 * 60 * 1000);
response.setContentType("text/html;charset=utf-8");
response.getWriter().write("你好世界");
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doPost(request,response);
}
}
响应对象之定时刷新
代码实现
@WebServlet("/demo15")
public class Demo15Servlet extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//解决请求参数中文乱码 : 告诉服务器以utf-8对请求正文进行解码
request.setCharacterEncoding("utf-8");
response.setContentType("text/html;charset=utf-8");
PrintWriter writer = response.getWriter();
String username = request.getParameter("username");
String password = request.getParameter("password");
if ("root".equals(username) && "root".equals(password)) {
//登录成功
writer.write("login成功");
} else {
//登录失败,过3秒后,跳转到login.html
response.getWriter().write("login失败,3秒后跳转到登录页面");
response.setHeader("Refresh","3;URL=/day32/login.html");
}
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doPost(request, response);
}
}
在调用业务逻辑的Servlet中,编写以下代码
request.getRequestDispatcher("/目标URL-pattern").forward(request, response);
forward表示一次请求,是在服务器内部跳转,可以共享同一次request作用域中的数据
在调用业务逻辑的Servlet中,编写以下代码
response.sendRedirect(“目标URI”);
URI:统一资源标识符(Uniform Resource Identifier),用来表示服务器中定位一个资源,资源在web项目中的路径(/project/source)
sendRedirect跳转时,地址栏改变,代表客户端重新发送的请求。属于两次请求
在初始化阶段,init()方法会被调用。这个方法在javax.servlet.Servlet接口中定义。其中,方法以一个ServletConfig类型的对象作为参数。
注意:init方法只被执行一次
当客户端有一个请求时,容器就会将请求ServletRequest与响应ServletResponse对象转给Servlet,以参数的形式传给service方法。
此方法会执行多次
当Servlet容器停止或者重新启动都会引起销毁Servlet对象并调用destroy方法。
destroy方法执行一次
/**
* Servlet implementation class LifeServlet
* 演示Servlet的生命周期:
* 1、实例化
* 2、init:初始化
* 3、service:服务
* 4、destory:销毁
*/
@WebServlet("/lifeservlet")
public class LifeServlet extends HttpServlet {
public LifeServlet() {
super();
System.out.println("1、完成了实例化");
}
@Override
public void init() throws ServletException {
super.init();
System.out.println("2、完成了初始化");
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
System.out.println("3、就绪中");
response.getWriter().append("Served at: ").append(request.getContextPath());
}
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doGet(request, response);
}
@Override
public void destroy() {
super.destroy();
System.out.println("4、销毁了");
}
}
Cookie是在浏览器访问Web服务器的某个资源时,由Web服务器在HTTP响应消息头中附带传送给浏览器的一小段数据。
一旦我们的Web浏览器保存了某个Cookie,那么它在以后每次访问该Web服务器时,都应在HTTP请求头中将这个Cookie回传给Web服务器。
一个Cookie主要由标识该信息的名称(name)和值(value)组成。
每个web应用最多支持20个cookie,每个浏览器最多支持300个cookie,每个cookie最大为4KB
计算机 cookie 的目的是帮助网站跟踪您的访问和活动。这并不总是坏事。例如,许多在线零售商在浏览网站时使用 cookie 来跟踪用户购物车中的商品。如果没有 Cookie,每次点击网站上的新链接时,您的购物车都会重置为零。这将使在线购买任何东西变得困难!
网站也可能使用 cookie 来记录您最近的访问记录或记录您的登录信息。许多人发现这很有用,因此他们可以在常用网站上存储账户和密码
//创建Cookie
Cookie ck=new Cookie("code", code);
ck.setMaxAge(-1);//内存存储,取值有三种:>0有效期,单位秒;=0浏览器关闭;<0内存存储,默认-1
response.addCookie(ck);//添加到response对象中,响应时发送给客户端
//获取所有的Cookie
Cookie[] cks=request.getCookies();
//遍历Cookie
for(Cookie ck:cks){
//检索出自己的Cookie
if(ck.getName().equals("code"))
{
}
}
案例:模拟用户登录成功后,把账户密码保存在cookie中30秒。30秒内进行访问地址可以直接从客户端的cookie中获取到账号密码。30s后则获取不好
login.html
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Titletitle>
head>
<body>
<form action="login" method="post">
用户名:<input type="text" name="username" /><br/>
密码:<input type="password" name="password"><br/>
<input type="submit" value="登录" />
form>
body>
html>
@WebServlet("/login")
public class MyLoginServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//获取账户密码
String username = req.getParameter("username");
String password = req.getParameter("password");
//判断登录正确时把账号和密码保存在浏览器的cookie中
if (username.equals("zs")&&password.equals("123")){
Cookie a = new Cookie("username", username);
Cookie b = new Cookie("password", username);
a.setMaxAge(30);//设置时间
b.setMaxAge(30);
resp.addCookie(a);//保存在浏览器中
resp.addCookie(b);
resp.getWriter().println("ok!");
}else{
resp.getWriter().println("no!");
}
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
doGet(req, resp);
}
}
MyCookieServlet
在登录成功后30秒可以直接通过访问denglu路径从客户端浏览器中获取到账号和密码,(利用此特点以后我们可以做记住密码功能)
@WebServlet("/denglu")
public class MyCookieServlet extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
Cookie[] cookies = request.getCookies();
String username=null;
String password=null;
for(Cookie co:cookies){
if (co.getName().equals("username")){
username=co.getName();
}
if (co.getName().equals("password")){
password=co.getName();
}
}
System.out.println(username+"===="+password);
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doPost(request, response);
}
}
服务器会为每一次会话分配一个Session对象
同一个浏览器发起的多次请求,同属于一次会话(Session)
注意:session是由服务端创建的。
获取Session
//获取Session对象
HttpSession session=request.getSession();
System.out.println("Id:"+session.getId());//唯一标记,
Session保存数据
//setAttribute(属性名,Object)保存数据到session中
session.setAttribute("key",value);//以键值对形式存储在session作用域中。
Session获取数据
//getAttribute(属性名);获取session中数据
session.getAttribute("key");//通过String类型的key访问Object类型的value
Session移除数据
//removeAttribute(属性名);从session中删除数据
session.removeAttribute("key");//通过键移除session作用域中的值
Session销毁
session.invalidate();
获取当前项目在服务器发布的真实路径
String realpath=servletContext.getRealPath("/");
获取当前项目上下文路径(应用程序名称)
System.out.println(servletContext.getContextPath());//上下文路径(应用程序名称)
System.out.println(request.getContextPath());
代码演示:
/**
* Servlet implementation class Servlet3
*/
@WebServlet("/servlet3")
public class Servlet3 extends HttpServlet {
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
request.setCharacterEncoding("utf-8");
response.setContentType("text/html;charset=utf-8");
ServletContext application = request.getServletContext();
Integer count=(Integer) application.getAttribute("count");
if(count==null) {
count=1;
application.setAttribute("count", count);
}else {
count++;
application.setAttribute("count", count);
}
PrintWriter out=response.getWriter();
out.write("servlet共访问次数:"+count);
}
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doGet(request, response);
}
}
概述
Servlet API中提供了一个Filter接口,开发人员编写一个Java类实现了这个接口即可,这个Java类称之为过滤器(Filter)
@WebFilter("/MyFilter1")//过滤路径
public class MyFilter1 implements Filter {
//初始化过滤器
@Override
public void init(FilterConfig filterConfig) throws ServletException {
System.out.println("过滤器初始化了........init... "+filterConfig);
}
//执行过滤
@Override
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
System.out.println("过滤前........doFilter ");
//放行
chain.doFilter(request, response);
System.out.println("过滤后.......doFilter");
}
//销毁
@Override
public void destroy() {
System.out.println("销毁了.....destroy");
}
}
<filter>
<filter-name>sffilter-name>
<filter-class>com.qf.web.filter.SecondFilterfilter-class>
filter>
<filter-mapping>
<filter-name>sffilter-name>
<url-pattern>/*url-pattern>
filter-mapping>
过滤器的过滤路径通常有三种形式:
精确过滤匹配 ,比如/index.jsp /myservlet1
后缀过滤匹配,比如*.jsp、.html、.jpg
通配符过滤匹配/*,表示拦截所有。
客户端对服务器请求之后,服务器调用Servlet之前会执行一组过滤器(多个过滤器),那么这组过滤器就称为一条过滤器链。
每个过滤器实现某个特定的功能,当第一个Filter的doFilter方法被调用时,Web服务器会创建一个代表Filter链的FilterChain对象传递给该方法。在doFilter方法中,开发人员如果调用了FilterChain对象的doFilter方法,则Web服务器会检查FilterChain对象中是否还有filter,如果有,则调用第2个filter,如果没有,则调用目标资源。
优先级:
import javax.servlet.*;
import javax.servlet.annotation.WebFilter;
import java.io.IOException;
@WebFilter(value = "/*")
public class EncodingFilter implements Filter {
@Override
public void init(FilterConfig filterConfig) throws ServletException {
}
@Override
public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
//统一处理请求和响应的乱码
servletRequest.setCharacterEncoding("UTF-8");
servletResponse.setContentType("text/html;charset=utf-8");
filterChain.doFilter(servletRequest,servletResponse);
}
@Override
public void destroy() {
}
}
@WebServlet(value = "/showallcontroller")
public class ShowAllAdminController extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
AdminService adminService = new AdminServiceImpl();
List<Admin> adminList = adminService.showAllAdmin();
//request作用域存储数据
req.setAttribute("admins",adminList);
//通过转发 跳转到显示结果servlet
req.getRequestDispatcher("/showalljsp").forward(req,resp);
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
doGet(req,resp);
}
}
@WebFilter(value = "/showallcontroller")
public class CheckFilter implements Filter {
@Override
public void init(FilterConfig filterConfig) throws ServletException {
}
@Override
public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
//权限验证 验证管理员是否登录!
//向下转型 拆箱
HttpServletRequest request = (HttpServletRequest)servletRequest;
HttpServletResponse response = (HttpServletResponse)servletResponse;
HttpSession session =request.getSession();
Manager mgr = (Manager) session.getAttribute("mgr");
if(mgr!=null){//登录过!
filterChain.doFilter(request,response);
}else{
response.sendRedirect(request.getContextPath()+"/loginMgr.html");
}
}
@Override
public void destroy() {
}
}