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) 收藏 举报
浙公网安备 33010602011771号