2.14 Java基础39

1.有关Tomcat的配置

1.1 安装

Tomcat官网:https://tomcat.apache.org/

目前Tomcat最高版本为10.0,Documentation为说明文档。

官网上有各种Tomcat安装包/压缩文件,对应不同的操作系统。

tar文件是对应的是Linux系统

文件名里有src说明这是带源码的安装包

这个文件对应的是windows系统

安装Tomcat很简单,找个非中文路径解压即可,下图为安装后可看到的文件。

bin目录中的startup和shutdown两个批处理文件尤为重要,打开startup.bat文件可启动服务(Ps:如果打开后一闪而逝大概率意味着没有配置好java_home路径)。

打开后,我们可以发现Tomcat的端口号默认为8080,有时可能会和一些应用的端口号冲突(比如极域),可以在config文件夹里的server.xml里更改。

在浏览器输入localhost:端口号/  然后回车,默认进入的是webapps/root/index.jsp(但是如果同文件夹存在index.html,优先跳转到index.html页面)。

1.2.在eclipse中配置Tomcat

打开eclipse-window-preferences-输入server搜索,点击Runtime Environments,选择9.0版本

下一步

点击finish,可以看到新建的服务是停止状态。

双击该服务,进行下一步配置。

在右侧也可改端口号(更简单)。

2.建dynamic web project

我们之前用得都是java project,但是那类项目无法做到和服务器交互,因此我们要用dynamic web project。

选择动态网页模块版本可以选3.0-4.0,其中4.0版本可以有更多配置可选择。

下一步,要记得勾选生成web.xml部署描述

创建完dynamic web project后,视图会变成javaEE视图。

如果看不惯,可以在右上角换回java视图

两者看起来是不一样,但是其中的内容是一样的。

之后我们要创建一个servlet文件,它的后缀其实也是.java。

servlet放在controller包里,继承于HttpServlet。

下一步,可以在URL mappings(统一资源定位符映射)里设置映射,之后可以通过这些命名在浏览器访问该servlet页面。

下一步,这些方法都是默认继承于HttpServlet的方法。

为了能够运行该项目,需要右击服务add and remove,部署项目。

 

代码案例:

package com.etc.controller;

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

/**
 * Servlet implementation class HelloServlet
 */
@WebServlet({ "/HelloServlet", "/hs" })
public class HelloServlet extends HttpServlet {
	private static final long serialVersionUID = 1L;
       
    /**
     * @see 构造方法
     */
    public HelloServlet() {
        super();
        // TODO Auto-generated constructor stub
    }

	/**
	 * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// 在页面上打印内容:Served at 要输入ip地址
		response.getWriter().append("From IP:").append(request.getRemoteAddr());
	}

	/**
	 * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// 调用上面的doGet
		doGet(request, response);
	}
}

效果图:

3.servlet的生命周期

package com.users.controller;

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

/**
 * Servlet implementation class HelloServlet
 */
@WebServlet({ "/HelloServlet", "/hs" })
public class HelloServlet extends HttpServlet {
	private static final long serialVersionUID = 1L;
       
    /**
     * @see HttpServlet#HttpServlet()
     */
    public HelloServlet() {
        super();
        // TODO Auto-generated constructor stub
        System.out.println("HelloServlet的无参数构造方法 最先1次");
    }

	/**
	 * @see Servlet#init(ServletConfig)
	 */
	public void init(ServletConfig config) throws ServletException {
		// TODO Auto-generated method stub
        System.out.println("HelloServlet的初始化方法 后于构造1次");
	}

	/**
	 * @see Servlet#destroy()
	 */
	public void destroy() {
		System.out.println("HelloServlet的destroy方法 web容器Tomcat重启,就会销毁");
	}

	/**
	 * @see HttpServlet#service(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		System.out.println("HelloServlet的service方法");
	}

	/**
	 * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// TODO Auto-generated method stub
        System.out.println("HelloServlet的doGet方法");
		response.getWriter().append("Served at: ").append(request.getContextPath());
	}

	/**
	 * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// TODO Auto-generated method stub
        System.out.println("HelloServlet的doPost方法");
		doGet(request, response);
	}
}

广泛认为servlet的生命周期:先是类被加载到JVM(java虚拟机),无参构造执行一次,初始化方法执行一次,然后service方法执行n次(每请求一次,就执行一次,如果service方法被注释掉,那么就调用doGet方法,也是每请求一次,就执行一次),最后当web容器Tomcat重启,就会销毁。 

(Ps:service源自Servlet,层次很高,因此应用优先级也比doGet高。)

4.继续上周的后端代码改造

上周代码写到service层和它的测试类,今天学了servlet可以把查到的内容显示在浏览器页面上。

步骤:

首先,项目不能是之前的java project ,变成了dynamic web project。

其次,要把之前大5个jar文件添加到构建路径,注意: xxx.jar文件直接复制粘贴放到web-inf/lib目录中即可。

一旦jar包添加到lib里,Web App Libraries里会自动生成对应的jar文件,不用我们特意添加。

package com.users.controller;

import java.io.IOException;
import java.util.List;

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

import com.google.gson.Gson;
import com.users.entity.User;
import com.users.service.UserService;
import com.users.service.impl.UserServiceImpl;
import com.users.util.ResponseData;

/**
 * 如何通过创建一个class写出servlet的效果
 * 1. 继承 HttpServlet 2. 重写doPost doGet 3. 在doPst或者doGet中添加文字: 4.
 * 在类前 @WebServlet("url")
 * 
 * @author Administrator
 *
 */

@WebServlet({ "/UserServlet", "/us" })
public class UserServlet extends HttpServlet {

	/**
	 * 
	 */
	private static final long serialVersionUID = 1176571509038752870L;
	//创建service对象
		UserService service=new UserServiceImpl();
	public UserServlet() {
		// TODO Auto-generated constructor stub
	}
	
	@Override
	public void init() throws ServletException {
		// TODO Auto-generated method stub
		super.init();
	}
	
	@Override
	protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
		// TODO Auto-generated method stub
		super.doGet(req, resp);
	}
	
	@Override
	protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
		// TODO Auto-generated method stub
		super.doPost(req, resp);
	}
	
	@Override
	protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
		// 设置响应的内容的类型和文字类型
		resp.setContentType("application/json;charset=utf-8");
		// 调用方法
		List<User>list=service.queryAllUsers();
		// 构造一个ResponseData
		ResponseData<User>rd=new ResponseData<User>();
		// 将拿到list赋值给ResponseData中的data
		rd.setData(list);
		// 重点来了: 要用Gson去将rd转换为json格式的字符串
		Gson gson=new Gson();
		// toJson方法,将java对象转换为json字符串
		String str=gson.toJson(rd);
		
		resp.getWriter().print(str);
		
	}
}

 

样例代码:

package com.users.controller;

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

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

import com.google.gson.Gson;
import com.users.entity.User;
import com.users.service.UserService;
import com.users.service.impl.UserServiceImpl;
import com.users.util.ResponseData;

/**
 * 1. 继承 HttpServlet 2. 重写doPost doGet 3. 在doPst或者doGet中添加文字: 4.
 * 在类前 @WebServlet("url")
 * 
 * @author Administrator
 *
 */

@WebServlet({ "/UserServlet", "/us" })
public class UserServlet extends HttpServlet {

	/**
	 * 
	 */
	private static final long serialVersionUID = 1176571509038752870L;
	//创建service对象
		UserService service=new UserServiceImpl();
	public UserServlet() {
		// TODO Auto-generated constructor stub
	}
	
	@Override
	public void init() throws ServletException {
		// TODO Auto-generated method stub
		super.init();
	}
	
	@Override
	protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
		
		resp.setContentType("application/json;charset=utf-8");
		req.setCharacterEncoding("utf-8");

		//接收表单传递过来的数据 用HttpServletRequest的getParameter()方法获取参数
		String username=req.getParameter("username");
		System.out.println("username:"+username);
		String userpass=req.getParameter("userpass");
		System.out.println("userpass:"+userpass);
		
		String usertel=req.getParameter("usertel");
		String usersex=req.getParameter("usersex");
		String usermail=req.getParameter("usermail");
		String uerregdate=req.getParameter("uerregdate");
		String userstate=req.getParameter("userstate");
		
		User user=new User(username, userpass, usertel, usersex, usermail);
		//调用service层的方法
		int result=service.addUsers(user);
		
		if(result==1) {
			//提示在Eclipse(tomcat)控制台输出
			System.out.println("增加成功");
			//跳转到增加成功的提示页面 重定向
			resp.sendRedirect("success.html");
		}else {
			System.out.println("增加失败");
			resp.sendRedirect("fail.html");
		}
	}
	
	@Override
	protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
		//设置请求的编码
		req.setCharacterEncoding("utf-8");
		// 1 此时我们直接将提示信息已json的形式返回即可.
		resp.setContentType("application/json;charset=utf-8");
		
		PrintWriter pw = resp.getWriter();
		
		//接收表单传递过来的数据 用HttpServletRequest的getParameter()方法获取参数
		String username=req.getParameter("username");
		System.out.println("username:"+username);
		String userpass=req.getParameter("userpass");
		System.out.println("userpass:"+userpass);
		String usertel=req.getParameter("usertel");
		String usersex=req.getParameter("usersex");
		String usermail=req.getParameter("usermail");
		String uerregdate=req.getParameter("uerregdate");
		String userstate=req.getParameter("userstate");
		
		User user=new User(username, userpass, usertel, usersex, usermail);
		
		//3 调用service层的方法
		int result=service.addUsers(user);
		
		//ResponseData
		ResponseData rdata=new ResponseData();
		
		if(result==0) {
			rdata.setMsg("增加失败");
		}else {
			rdata.setMsg("增加成功");
		}
		//使用Gson
		Gson gson=new Gson();
		String jsonresult = gson.toJson(rdata);
		
		//以json形式打印
		pw.write(jsonresult);
	}
	
//	@Override
//	protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//		// 设置响应的内容的类型和文字类型
//		resp.setContentType("application/json;charset=utf-8");
//		// 调用方法
//		List<User>list=service.queryAllUsers();
//		// 构造一个ResponseData
//		ResponseData<User>rd=new ResponseData<User>();
//		// 将拿到list赋值给ResponseData中的data
//		rd.setData(list);
//		// 重点来了: 要用Gson去将rd转换为json格式的字符串
//		Gson gson=new Gson();
//		// toJson方法,将java对象转换为json字符串
//		String str=gson.toJson(rd);
//		
//		resp.getWriter().print(str);
//		
//	}
}

 

posted on 2022-02-14 19:49  heyiyang1312  阅读(4)  评论(0)    收藏  举报

导航