1、设置字体大小:登录界面的Configure【配置】—— Settings——Editor——Font
2、设置背景颜色:登录界面的Configure【配置】—— Settings——Editor——Color Scheme——General——Default【默认】
3、设置打开IDEA时的默认操作:登录界面的Configure【配置】—— Settings——Appearance&Behavior——System Settings
2、给工程命名,注意选择路径时最好直接创建在盘根目录下;
3、配置Tomcat服务器
运行下拉框——> Edit Configuration【编辑配置】 ——>先点击右上角的绿色加号——> 在左侧选择Tomcat Sever——> Local
redeploy【重新部署】
4、添加第三方依赖
1)先在WEB-INF文件夹下创建“lib”的文件夹(选择Directory),将自己需要的jar包添加到这个文件夹中(形成工程内部lib,而不用external);
2)再打开 Project Structure,部署这些包:
3)首先是点击左侧的Libraries,点击+,选择JAVA将之前加入“lib"的包导入,再将一些需要的external包导入,APPLY;
4)再选择左侧的Module, 在Dependencies勾选之前导入的jar包,APPLY;(还可以直接在Dependencies页面中点击右侧的绿色加号,选下拉框的第一个选项,手动添加jar包或者文件进入module)。
5、#配置输出文件夹“classes”
在idea中如果不修改class文件的输出路径的话,会默认在工程下创建一个“out文件夹”用来装编译的class文件[或者说是用来存放src目录下的文件(包括配置文件,只要在src目录下就会被加载到out里面)]。修不修改默认输出路径都可以,但修改编译文件的输出路径为WEB-INF下的classes似乎更规范?
下面提供修改方法的链接:
idea架构简述及输出文件配置.
5、#检查工程结构左侧的 Artifacts和Facets
Artifacts【人工品;artifact是一个项目资源的组合体。例如,一个已编译的java类的集合,一个已打包的java应用。】
和Facets【面;Facets表述了在Module中使用的各种各样的框架、技术和语言,这些Facets让IDEA知道怎么对待module内容,并保证与相应的框架和语言保持一致。】
下面提供 有关IDEA里Facets和Artifacts的讲解 的链接:
IDEA里Facets和Artifacts的讲解.
【注:能力有限,#号部分为不知是否必要的操作】
1、概念:
接口与类属于同一层次,实际上,接口是一种特殊的抽象类。
2、属性:
(1)一个接口中,所有方法为公开、抽象方法;所有的属性都是公开、静态、常量。
(2)一个类实现一个接口的格式: class IM implements IA{ }; 一个类实现接口,相当于它继承一个抽象类。
(3) 类必须实现接口中的方法,否则其为一抽象类。 实现中接口和类相同。
3、基础使用方法:
(1)接口中可不写public,但在子类中实现接口的过程中public不可省。
(2)一个类只能继承另外一个类,但是它可以继承多个接口,中间用“,”隔开。
(3)接口和接口之间可以定义继承关系,并且接口之间允许实现多继承。
(4)一个接口也可以“接”多个实现类,中间依旧是用“,”隔开
4、作用:
通过接口可以实现不同层次、不同体系对象的共同属性; 通过接口实现write once as anywhere.。( 以JAVA数据库连接为例子:JDBC制定标准;数据厂商实现标准;用户使用标准。)接口通常用来屏蔽底层的差异。 接口也因为上述原因被用来保持架构的稳定性。
接口详解.
接口类示例:
public interface Userdao {
/***
* 用户登陆的方法声明
* @param user
* @return
*/
public User login(User user);
/***
* 用户注册的方法声明
* @param user
* @return
*/
public boolean register(User user);
}
在java中implement是为了实现某个接口。
例如:
public class impleuser implements Userdao{
@Override
public User login(User user) {
return null;
}
PreparedStatement pst = (PreparedStatement) conn.prepareStatement
("insert into register values(?,?,?,?,?);");//?为占位符
pst.setString(1, user.getUsername());//占位符索引从1开始!
pst.setString(2, user.getSex());
pst.setString(3, user.getPassword());
pst.setString(4, user.getEmail());
pst.setString(5, user.getTel());
pst.executeUpdate();
bool = pst.executeUpdate();
conn.close();
} catch (Exception e) {
// TODO 自动生成的 catch 块
e.printStackTrace();
}
if (bool == 0) {
return false;
}
else return true;
}
}
extends是继承父类,只要那个类不是声明为final或者那个类定义为abstract的就能继承,JAVA中不支持多重继承,但是可以用接口来实现,这样就要用到implements,继承只能继承一个类,但implements可以实现多个接口,用逗号分开就行了
比如:
class A extends B implements C,D,E
0、".idea"
1、out文件(或是WEB-INF下的“classes”)
存放编译时后的文件;实际运行的内容;内含src问价目录下的所有文件;不可编写
笔者好多次工程不能正常运行,且查找代码并无错误,报错与当前编写不符,就是因为out文件没有更新!
【希望有大佬留言帮忙解决这个问题】
2、src
后端文件
3、web
前端文件
4、External Libraries
src标准架构示例
【注:在工程量较小时,将接口类和对应的实现类放在同一个层次的包目录下也无妨。示例中servlet包实际上也可以写成controller包(层)】
在软件体系架构设计中,分层式结构是最常见和重要的。微软推荐的分层式结构一般分为三层,从下至上分别为:数据访问层、业务逻辑层(又或称为领域层)、表示层。这也是Java Web中重要的三层架构中的三个层次。区分层次的目的即为了“高内聚低耦合”的思想。
所谓三层体系结构,是在客户端与数据库之间加入了一个“中间层”,也叫组件层。
第一、数据访问层 即DAO【Data Access Object】层,主要是对非原始数据(数据库或者文本文件等存放数据的形式)的操作层,而不是指原始数据,也就是说,是对数据库的操作,而不是数据,具体为业务逻辑层或表示层提供数据服务。
第二、业务逻辑层 即service层 主要是针对具体的问题的操作,也可以理解成对数据层的操作,对数据业务逻辑处理,如果说数据层是积木,那逻辑层就是对这些积木的搭建。
第三、界面层 即controller层或action层,主要表示WEB方式。如果逻辑层相当强大和完善,无论表现层如何定义和更改,逻辑层都能完善地提供服务。当逻辑层和数据处理层高度分离出servlet时,servlet可以看作是该controller层中用来接收请求和返回响应的中间层。
【注意将“三层架构”区分于传统的MVC架构,区别主要在于业务逻辑和controller上】
Model-View-Controller
相关链接: 浅谈JavaWeb项目代码如何分层.
【笔者认为Java-web入门时只需要有适当水平的代码分层意识即可(不要把整个后端都写在一个servlet里),工程量较小时疲于分层不仅没有实用价值还会浪费时间,况且日新月异中代码架构也是在不断发展和演变的,我们要就事论事、实事求是。】
JavaBean是一个遵循特定写法的Java类,它通常具有如下特点:
- 这个Java类必须具有一个无参的构造函数
- 属性必须私有化。
- 私有化的属性必须通过public类型的方法暴露给其它程序,并且方法的命名也必须遵守一定的命名规范(set、get)。
入门的Java bean类为我们具体操作对象的实体化提供了一个类的模板;模板中含有私有数据成员本身,以及它们各自的读取、设置的公用方法。
代码示例:
public class User { private int id;
private String username;
private String password;
private String sex;
private String email;
private String tel;
public User(){
super();
}
// public User(String tel, String name, String password, String sex , String email){
// this.tel = tel;
// this.username = name;
// this.password = password;
// this.sex = sex;
// this.email= email;
// }
//1
public String getSex()
{
return sex;
}
public void setSex(String sex1)
{
this.sex = sex1;
}
//2
public String getUsername()
{
return username;
}
public void setUsername(String userName)
{
this.username = userName;
}
//3
public String getPassword()
{
return password;
}
public void setPassword(String password)
{
this.password = password;
}
//4
public String getEmail()
{
return email;
}
public void setEmail(String email) { this.email = email; }
//5
public String getTel()
{
return tel;
}
public void setTel( String tel1)
{
this.tel=tel1;
}
}
释义见第一部分讲解,具体示例代码参见接口类与实现类部分的代码示例。
Util是utiliy的缩写,是一个多功能、基于工具的包。
该工具类基于数据库类型的不同也会不同。
以mysql为例,贴出相关实现办法。
Connection conn;
//驱动
String driver = "com.mysql.jdbc.Driver";
//地址
String addr = "jdbc:mysql://localhost:3366/test?useUnicode=true&characterEncoding=utf8";
//用户名
String username = "root";
//密码
String password = "";
try {
//加载驱动
Class.forName(driver);
//建立连接
conn = (Connection) DriverManager.getConnection(addr, username, password);
//判断是否连接
if (!conn.isClosed()) {
System.out.println("连接成功");
}
该层属于业务逻辑处理层,在本次的“用户注册”案例中的“userservice”类主要是一个服务于user-bean的类,在该类的register外层函数中创建了一个user的bean实体对象,并调用了该对象的所有设置数据的函数,这些“set”函数被嵌套在一个含有参数的外层函数中,外层函数负责向内层的set函数传递参数。
代码示例:
import bean.User;
public class serviceuser {
public User register(String username, String sex, String password, String email, String tel){
User user=new User();
user.setUsername(username);
user.setPassword(password);
user.setSex(sex);
user.setEmail(email);
user.setTel(tel);
return user; //※注意返回的是一个user的实体对象
}
}
当然,更加规范的做法是向dao层那样用一个接口类和一个实现类的组合来完成上述处理。
这里的service逻辑处理只是入门的冰山一角,还不能明显体现出“逻辑”的处理,暂且只将它作为user的一个服务类即可。
由于实例简单,在该工程的controller层中只有一个servlet类。
在前面已经说过,dao层将底层数据操作从servlet中分离出去,jdbcutil将数据库连接操作从servlet中分离出去,userbean和userservice的组合实现了实体类的定义和服务,
所以servlet应该更纯粹地专注于与前端的交互,充当界面层底端或是控制层顶端的角色,在其中运用doGet和doPost方法,实现:
- 客户端发送请求至服务器端;
- 服务器将请求信息发送至 Servlet;
- Servlet 生成响应内容并将其传给服务器。响应内容动态生成,通常取决于客户端的请求;
- 服务器将响应返回给客户端。
Servlet 是在服务器(如Tomcat)上运行的小服务程序。
package controller;
import bean.User;
import dao.Userdao;
import dao.impleuser;
import service.serviceuser;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
@WebServlet(name = "register", urlPatterns = "/register")//类似于web.xml的功能
public class register extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response) {
}
protected void doGet(HttpServletRequest request, HttpServletResponse response)
{
String username = request.getParameter("username");
String password = request.getParameter("password");
String email=request.getParameter("email");
String tel=request.getParameter("tel");
String sex = request.getParameter("sex");
serviceuser servicer= new serviceuser();//创建实体服务类的对象
User newuser=servicer.register(username,sex,password,email,tel);//调用该对象中的函数创建一个bean的实体对象
System.out.println("1"+username);
System.out.println("2"+password);
System.out.println("3"+sex);
System.out.println("4"+email);
System.out.println("5"+tel);//测试用
Userdao dao=new impleuser();//创建dao的对象
dao.register(newuser);//实现对数据库的操作
try {
response.getWriter().print("后台接受成功");
} catch (IOException e) {
e.printStackTrace();
}
}
}
servlet在这里似乎体现了后端集成的功能
相关链接: doGet和doPost的区别.
2019年4月28日