JavaEE _创建动态项目【servlet】

1. 课程前言

搭建环境:JDK–(检查环境:java、javac、javac -version)

开发工具:eclipse–

更改编码:全部:【Window–Perferences–General–WorkSpcae】

​ JSP文件:【Window–Perferences–Java–Jsp File】

jre设置:【Window–Perferences–Java–Installed JREs】

Tomcat:Server窗体

​ 双击打开:Servers Location:选择Use Tomcat installation,将Deploy path更改为webapps。

​ 【其他问题参考Tomcat入坑指南】

布局混乱,恢复原始布局设置:【Window–perspacetive–reset】

2. 创建第一个动态项目【同五、4.1】

新建Dynamic web project,在项目下新建main.jsp

<%@page import="java.text.SimpleDateFormat"%>
<%@page import="java.util.Date"%>
<%@page import="java.net.Inet4Address"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
	pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
	获取远程IP地址:<%=request.getRemoteAddr()%><br>
	获取自身IP地址:<%=Inet4Address.getLocalHost().getHostAddress() %><br>
	获取当前时间:<%=new Date()%>
</body>
</html>

创建项目过程中可能会出现的问题:

​ jsp的第一行报红XXX

​ 项目上有红色感叹号

问题出现原因:环境出现问题【JDK版本、JRE缺失、第三方jar包缺失】

解决:右击项目–Build Path–Configure Build Path–Libraries–此处出现报错的包,一般项目就会报红XXX。

​ 删掉报错的包,重新引入即可解决。

备注:添加的工具是已经关联的–可以直接添加【Add Library–EAR Library/JRE System Library/Server Runtime/Web App Library】。

补充知识点:

HTTP的请求方法

序号方法描述
1GET发送请求来获得服务器上的资源,请求体中不会包含请求数据,请求数据放在协议头中。另外get支持快取、缓存、可保留书签等。幂等
2POST和get一样很常见,向服务器提交资源让服务器处理,比如提交表单、上传文件等,可能导致建立新的资源或者对原有资源的修改。提交的资源放在请求体中。不支持快取。非幂等
3HEAD本质和get一样,但是响应中没有呈现数据,而是http的头信息,主要用来检查资源或超链接的有效性或是否可以可达、检查网页是否被串改或更新,获取头信息等,特别适用在有限的速度和带宽下。
4PUT和post类似,html表单不支持,发送资源与服务器,并存储在服务器指定位置,要求客户端事先知道该位置;比如post是在一个集合上(/province),而put是具体某一个资源上(/province/123)。所以put是安全的,无论请求多少次,都是在123上更改,而post可能请求几次创建了几次资源。幂等
5DELETE请求服务器删除某资源。和put都具有破坏性,可能被防火墙拦截。如果是https协议,则无需担心。幂等
6CONNECTHTTP/1.1协议中预留给能够将连接改为管道方式的代理服务器。就是把服务器作为跳板,去访问其他网页然后把数据返回回来,连接成功后,就可以正常的get、post了。
7OPTIONS获取http服务器支持的http请求方法,允许客户端查看服务器的性能,比如ajax跨域时的预检等。
8TRACE回显服务器收到的请求,主要用于测试或诊断。一般禁用,防止被恶意攻击或盗取信息。

以上方法用法都是一致的!那为什么还有这么多方法?

通过名字来区分功能业务。后来,将不同的方进行个性化处理;再后来,post get。

GET 和 POST 比较:

GETPOST
点击返回/刷新按钮没有影响数据会重新提交
缓存/添加书签可以不可以
历史记录没有
编码类型application/x-www-form-urlencodedapplication/x-www-form-urlencoded 或 multipart/form-data。为二进制数据使用多重编码
是否幂等幂等非幂等
长度限制http协议没有限制,但是实际浏览器或服务器有(最大2048)理论上没有,可能会收到服务器配置或内存限制
数据类型限制只能ASCII,非ascii都要编码传输没有限制,允许二进制数据
安全性数据全部展示在url中,不安全相比get,通过request body传递数据,比较安全
可见效可见不可见
3.1 JavaEE技术概述

是一门综合性技术,包含13个组件:jsp、servlet、EJB等等。

主要学习两个技术【组件】:Servlet和Jsp

3.2 学习javaEE组件之Servlet

Servlet入门:概念、使用、作用、继承关系、生命周期。

Servlet高级:四大作用域、监听器和过滤器。

3.2.1 servlet的概念

是javaEE的组件 必须在容器中运行【服务器,此时使用的服务器是Tomcat】。

Servlet本质上就是一个java类,必须遵守规范,继承HTTPServlet。【HTTPServlet中定义了一些规范,适应http请求协议】

3.2.2 servlet的使用

创建第一个Servlet。

HttpServlet:

Provides an abstract class to be subclassed to createan HTTP servlet suitable for a Web site. A subclass of HttpServlet must override at leastone method, usually one of these:
//提供了一个抽象类来创建适合网站的HTTP servlet。HttpServlet的一个子类必须至少覆盖一个方法,通常其中之一:
•doGet, if the servlet supports HTTP GET requests
//doGet,如果servlet支持HTTP-GET请求
•doPost, for HTTP POST requests
//doPost,用于HTTP POST请求
•doPut, for HTTP PUT requests
//doPut,用于HTTP PUT请求
•doDelete, for HTTP DELETE requests
//doDelete,用于HTTP DELETE 请求
•init and destroy,to manage resources that are held for the life of the servlet
//启动和销毁,以管理servlet生命周期中保存的资源
•getServletInfo, which the servlet uses toprovide information about itself
//getServletInfo,servlet使用它来提供有关自身的信息

重写HttpServlet中的方法。

例(FirstServlet.class):
package pers.wcs.firstwork.servlet;

import java.io.IOException;
import java.io.PrintWriter;
import java.util.Date;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

/**
 * 
 * @author WCS
 * @version V.1.0.1
 * @date 2021-12-09 02:28 
 * 需求:自定义一个Servlet 
 * 思路分析: 
 * 问题汇总:
 */
public class FirstServlet extends HttpServlet {

	/**
	 * 
	 * 需求: 
	 * 问题汇总:
	 * 
	 * @author WCS
	 * @version V.1.0.1
	 * @date 2021-12-09 02:53
	 * @param req
	 * @param resp
	 * @throws ServletException
	 * @throws IOException
	 */
	@Override
	protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
		// 创建内容
		resp.setContentType("text/html;charset=UTF-8");
		// 获取响应流
		PrintWriter out = resp.getWriter();
		// 编写业务代码
		out.println("<html>");
		out.println("<head><title>第一个servlet返回数据</title></head>");
		out.println("<body>");
		out.println(new Date());
		out.println("今天天气不错!");
		out.println("</body>");
		out.println("</html>");
	}
}
3.2.3 web.xml
  • 将创建好的servlet交给服务管理器【容器】
  • 在web.xml文件中进行配置【web.xml是服务开放处理数据的接口】

web.xml的简介:

​ 是一个xml文件

​ welcome-file—访问项目默认加载的页面-主页

<!-- 配置servlet 将我们的servlet类交给服务器管理 -->
<servlet>
	<servlet-name>起一个别名【便于映射】</servlet-name>
	<servlet-class>我们的servlet类的全类名</servlet-class>
</servlet>
<servlet-mapping>
	<servlet-name>和上面的别名一样</servlet-name>
	<url-pattern>/请求地址</url-pattern>
</servlet-mapping>
3.2.4 servlet的执行流程分析

①浏览器输入网址发送请求:

​ 例如:http://localhost:8080/MyFirstWork/mservlet

②服务器接收请求拆解地址:

  • http–协议
  • localhost:8080–访问Tomcat服务器
  • /MyFirstWork–访问对应的项目
  • /mservlet–表示访问的资源地址
    • webcontnt/webapp下找
    • web.xml找url

如果在web.xml中找到了url–获取对应名字,通过名字找servlet,加载servlet类–执行返回结果。

③快速创建servlet【–new–servlet】

3.2.5 servlet的作用

初心:最开始servlet是用于编写动态网页【使用响应中的printWriter流进行响应给客户端浏览器】;

中间:发现问题,如果使用servlet去做动态页面非常复杂;

后来:就创建了jsp组件,将动态页面的功能分割出去,让jsp专门做,servlet就不做动态页面了;

当前:servlet的功能转变,它的作用变成:中间商,主要功能:接收请求、处理请求、响应结果、跳转页面。

3.2.6 如何接收请求

对于servlet来说,提供接收前台提交请求的接口[HttpServletRequest]

3.2.7 完成登录案例

目的:探索servlet如何接收请求

项目结构:登录界面、接收提交请求、主页面

登录界面(login.jsp):
<%@ page language="java" contentType="text/html; charset=UTF-8"
	pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>登录</title>
<style>
#content {
	width: 300px;
	height: 360px;
	text-align: center;
	margin: auto;
	margin-top: 100px;
	border: 10px solid green;
	border-radius: 20px;
}

img {
	width: 100px;
	height: 100px;
	border-radius: 20%;
}
</style>
</head>
<body>
	<div id="">
		<div id="content">
			<form action="LoginServlet" method="get">
				<h1>登录界面</h1>
				<img alt="" src="img/01.jpg"><br><br> 
				账号:<input type="text" name="uname"><br><br> 
				密码:<input type="text" name="password"><br><br> 
				<input type="submit" name="提交登录">
			</form>
		</div>
	</div>
</body>
</html>
主页面(index.jsp):
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<h1 color="red">我是主页面</h1>
</body>
</html>
业务代码(LoginServlet):
package pers.wcs.loginwork.servlet;

import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

/**
 * Servlet implementation class LoginServlet
 */
public class LoginServlet extends HttpServlet {
	private static final long serialVersionUID = 1L;
       
    /**
     * @see HttpServlet#HttpServlet()
     */
    public LoginServlet() {
        super();
        // TODO Auto-generated constructor stub
    }

	/**
	 * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		System.out.println("我是servlet的get方法");
		//通过请求获取提交的数据
		String uname=request.getParameter("uname");
		String password = request.getParameter("password");
		
		//输出
		System.out.println("账号:"+uname);
		System.out.println("密码:"+password);
	}

	/**
	 * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// TODO Auto-generated method stub
		doGet(request, response);
	}
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值