Java Web开发快速入门

下载并配置Tomcat服务器

下载地址:https://mirrors.tuna.tsinghua.edu.cn/apache/tomcat/tomcat-9/v9.0.44/bin/apache-tomcat-9.0.44-windows-x64.zip

然后解压放在一个目录下,再集成到idea中:

Run->Edit Configurations->Templates->Tomcat Server->Local

然后点击Configure:
在这里插入图片描述
选择Tomcat Home的路径:
在这里插入图片描述
修改路径:

这个路径是默认的url前缀,例如你的接口是/demo,映射就会自动变成context+/demo
在这里插入图片描述

创建Java EE项目

New->Project->Java Enterprise

然后勾选Web Application
在这里插入图片描述
文件说明:

  • src是我们写业务逻辑的地方
  • web文件夹下是我们写页面的地方

在这里插入图片描述

页面是jsp格式文件,但jsp语法很容易上手,大体与HTML没啥区别
在这里插入图片描述

首次运行:

点击右上角的Run
在这里插入图片描述
系统会自动打开浏览器

页面效果如下:
在这里插入图片描述

项目开发流程

  • 创建JavaEE项目
  • 定义一个类,实现Servlet接口,实现接口中的抽象方法,业务逻辑写在service方法中
  • 或者是继承HttpServlet类,重写doGetdoPost等方法
  • 使用注解,使得url和类映射(或者是web.xml中配置Servlet,但是不推荐)
@WebServlet(urlPatterns = "/demo")
public class Test implements Servlet {
    @Override
    public void init(ServletConfig servletConfig) throws ServletException {
    }
    //something
}
<?xml version="1.0" encoding="UTF-8"?>
<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">

<!--    配置servlet,起别名为demo-->
    <servlet>
        <servlet-name>demo</servlet-name>
        <servlet-class>controller.Test</servlet-class>
    </servlet>
<!--    进行url关系映射,当访问/demo时,demo这个类反馈-->
    <servlet-mapping>
        <servlet-name>demo</servlet-name>
        <url-pattern>/demo</url-pattern>
    </servlet-mapping>

</web-app>

Servlet获取请求信息

获取参数通用方式(get、post都可用)

  • String getParameter(String name):根据参数名称获取参数值
  • String[] getParameterValuers(String name):根据参数名称获取数组
  • Enumeration<String> getParameterNames():获取所有请求参数的名称
  • Map<String ,String[]> getParameterMap():获取所有参数的map集合
@WebServlet(urlPatterns = "/demo")
public class Test extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        String username = req.getParameter("username");
        System.out.println(username);
    }
}

post请求会遇到中文乱码问题,方法第一行加上这句话就好了:

req.setCharacterEncoding("utf-8");

请求转发

浏览器的地址没发生变化,是服务器内部资源跳转的方式,而不能跳转到外部请求

req.getRequestDispatcher("/path").forward(req,resp);

共享数据

  • req.setAttribute(String name, Object obj):存储数据
  • Object req.getAttribute(String name):获取数据
  • req.removeAttribute(String name):删除数据

获取ServletContext对象

后面再说

BeanUtils工具类

BeanUtils工具常用工具类有两个:BeanUtils、ConvertUtils。BeanUtils用于封装数据,ConvertUtils用于处理类型转换

<dependency>
  <groupId>commons-beanutils</groupId>
  <artifactId>commons-beanutils</artifactId>
  <version>1.9.3</version>
</dependency>
  • BeanUtils.copyProperties(p,d); 把q的值拷贝给p
  • populate(Object bean, Map<String,String[]>properties) :将map封装到bean中

Servlet传数据给jsp

Response对象

重定向

  • 页面的url会发生改变
  • 可以访问其他站点(非本项目)的服务资源
  • 是两次请求,不可用request共享数据
resp.sendRedirect("/path");
//或者是使用这两句
//resp.setStatus(302);
//resp.setHeader("location","/path");

字符流传到页面

//设置Tomcat编码形式
resp.setCharacterEncoding("utf-8");
//设置页面解码形式
resp.setContentType("charset=utf-8");
//写内容到页面
PrintWriter writer = resp.getWriter();
writer.write("<h1>你好呀</h1>");

字节流到页面(画验证码)

可以在页面创建一个img标签,src写这个接口地址

int width = 100;
int height = 50;
//创建对象,内存中的图片
BufferedImage image = new BufferedImage(width,height,BufferedImage.TYPE_3BYTE_BGR);
//美化图片
//2.1填充背景色
Graphics g = image.getGraphics();
g.setColor(Color.PINK);
g.fillRect(0,0,width,height);
//2.2画边框
g.setColor(Color.BLUE);
g.drawRect(0,0,width-1,height-1);
String str = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghigklmnopqrstuvwxyz0123456789";
//随机角标
Random random = new Random();
for (int i = 0; i < 4; i++) {
    int index = random.nextInt(str.length());
    //写验证码
    g.drawString(String.valueOf(str.charAt(index)),width/5*i,height/2);
}
//画干扰线
g.setColor(Color.GREEN);
for (int i = 0; i < 6; i++) {
    int x1 = random.nextInt(width);
    int x2 = random.nextInt(width);
    int y1 = random.nextInt(height);
    int y2 = random.nextInt(height);
    g.drawLine(x1,y1,x2,y2);
}
//输出到页面
ImageIO.write(image,"jpg",resp.getOutputStream());

ServletContext对象

代表整个web程序

获取ServletContext对象

  • 使用requests.getServletContext()获取
  • 如果继承了HttpServlet可以使用this.getServletContext()获取

获取类型

context.getMimeType()

域对象

用的很少,因为范围很大,共享所有用户的信息

  • setAttribute(String name, Object obj):存储数据
  • getAttribute(String name):获取数据
  • removeAttribute(String name):删除数据

获取文件路径

context.getRealPath()

  • WEB-INF下的文件可以写成context.getRealPath(/WEB-INF/xxx)
  • src目录的文件会被放在WEB-INF/classes

文件下载

public class Test extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //1.获取请求参数,文件名称
        String filename = req.getParameter("filename");
        //字节输入流加载文件进内存
        //2.1找到文件服务器路径
        ServletContext servletContext = this.getServletContext();
        String realPath = servletContext.getRealPath("/img/" + filename);
        //2.2用字节流关联
        FileInputStream fis = new FileInputStream(realPath);
        //3.设置response的响应头
        //3.1设置响应头类型
        String mimeType = servletContext.getMimeType(filename);
        resp.setHeader("content-type",mimeType);
        //3.2设置响应头打开方式
        resp.setHeader("content-disposition","attachment;filename="+filename);
        //4.将输入流的数据写出到输入流中
        ServletOutputStream sos = resp.getOutputStream();
        byte[] bytes = new byte[1024 * 8];
        int len = 0;
        while ((len = fis.read(bytes)) != -1) {
            sos.write(bytes,0,len);
        }
        fis.close();
    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        super.doPost(req, resp);
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

笼中小夜莺

嘿嘿嘿,请用金钱尽情地蹂躏我吧

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值