>  기사  >  Java  >  Javaweb은 어떻게 완전한 개인 블로그 시스템을 구축합니까?

Javaweb은 어떻게 완전한 개인 블로그 시스템을 구축합니까?

WBOY
WBOY앞으로
2023-04-21 21:55:071193검색

프로젝트의 기본 프로세스

1. 준비

데이터 무결성을 보장하기 위한 변환에 종속성 패키지가 도입되었습니다.

Jackson은 JSON 형식의 데이터를 처리하는 데 사용되는 Java 클래스 라이브러리입니다. JSON 직렬화(객체를 JSON 문자열로 변환) 및 역직렬화(JSON 문자열을 지정된 데이터 유형으로 변환)

직렬화 및 역직렬화 작업:

<dependencies>
    <dependency>
        <groupId>org.thymeleaf</groupId>
        <artifactId>thymeleaf</artifactId>
        <version>3.0.12.RELEASE</version>
    </dependency>

    <!-- Servlet依赖包:官方提供的servlet标准 -->
    <dependency>
        <groupId>javax.servlet</groupId>
        <artifactId>javax.servlet-api</artifactId>
        <version>3.1.0</version>
        <!-- 开发编译时需要这个依赖包,运行时不需要 -->
        <scope>provided</scope>
    </dependency>

    <dependency>
        <groupId>mysql</groupId>
        <artifactId>mysql-connector-java</artifactId>
        <version>5.1.49</version>
    </dependency>
    
	<!-- 数据绑定包,提供JAva对象与JSON数据格式进行序列化 -->
    <dependency>
        <groupId>com.fasterxml.jackson.core</groupId>
        <artifactId>jackson-databind</artifactId>
        <version>2.12.3</version>
    </dependency>
    
    <!--    引入单元测试框架,方便我们做测试    -->
    <dependency>
        <groupId>junit</groupId>
        <artifactId>junit</artifactId>
        <version>4.13.1</version>
    </dependency>
</dependencies>

2. 데이터베이스 설계

1 필수 테이블 생성:

user(사용자 테이블)
  • acticle( Article table)
  • 2. 해당 데이터베이스 엔터티 클래스 설계:

3. 데이터베이스 연결 도구: Javaweb은 어떻게 완전한 개인 블로그 시스템을 구축합니까?

public class WebUtil {

    //判断是否登录,通过请求对象获取session,如果session存在且登录时
    // 保存的键为user,值是用户对象,这个数据存在,就表示已登录
    //返回user:已登录就返回session中保存的用户,未登录返回null
    public static User checkLogin(HttpServletRequest req){
        User user = null;
        //如果从tomcat保存的session的map数据结构中,获取session,false表示获取不到,返回null
        HttpSession session = req.getSession(false);
        if(session!=null){
            user = (User)session.getAttribute("user");
        }
        return user;
    }

    //这个对象可以使用单例
    private static ObjectMapper M = new ObjectMapper();

    //反序列化:转换一个输入流中包含的json字符串为一个java对象
    //使用泛型:传一个什么类型给我,就返回一个该类型的对象
    public static <T> T read(InputStream is,Class<T> clazz){
        try {
            return M.readValue(is,clazz);
        } catch (IOException e) {
            throw new RuntimeException("json反序列化出错",e);
        }
    }

    //序列化:将一个任意类型的java对象,转换为一个json字符串
    public static String write(Object o){
        try {
            return M.writeValueAsString(o);
        } catch (JsonProcessingException e) {
            throw new RuntimeException("json序列化出错",e);
        }
    }

4. user 테이블 및 기사 테이블:

3. 프런트 엔드 페이지 준비 Javaweb은 어떻게 완전한 개인 블로그 시스템을 구축합니까?

1. 이전에 작성한 프런트 엔드 정적 페이지를 webapp 디렉토리에 배포

2. 프런트 엔드에서 백엔드 상호작용, 데이터 상호작용을 위해 ajax를 사용해야 합니다.

이전 캡슐화 좋은 ajax 함수를 복사하고 후속 사용을 위해 별도의 js 파일에 넣습니다.

//数据库工具类:提供获取数据库连接,释放资源的统一代码
public class DBUtil {
    //静态变量,是类加载的时候初始化,只执行一次
    private static MysqlDataSource ds;
    //一个程序,连接一个数据库,只需要一个连接池,其中保存了多个数据库连接对象
    //1.获取连接池,内部使用,不开放
    private static DataSource getDataSource(){
        //ds类加载的时候,初始化为null,方法使用的时候,每次都判断一下
        if(ds==null){//判断为空,就创建及初始化属性
            ds=new MysqlDataSource();
            ds.setURL("jdbc:mysql://127.0.0.1:3306/blog");
            ds.setUser("root");
            ds.setPassword("010124");
            ds.setUseSSL(false);//不安全连接,如果不设置,也不影响,只是有警告
            ds.setCharacterEncoding("UTF-8");
        }
        return ds;
    }

    //2.获取数据库连接对象:开放给外部的jdbc代码使用
    public static Connection getConnection(){
        try {
            return getDataSource().getConnection();
        } catch (SQLException e) {
            throw new RuntimeException("获取数据库连接出错,可能是url,账号密码写错了",e);
        }
    }
    
    //3.释放资源
    //查询操作需要释放三个资源,更新操作(插入,修改,删除)只需要释放前两个资源
    public static void close(Connection c, Statement s, ResultSet r){
        try {
            if(r!=null) r.close();
            if(s!=null) s.close();
            if(c!=null) c.close();
        } catch (SQLException e) {
            throw new RuntimeException("释放数据库资源出错",e);
        }
    }

    //提供更新操作方便的释放资源功能
    public static void close(Connection c, Statement s){
        close(c,s,null);
    }

    public static void main(String[] args) {
        System.out.println(getConnection());
    }
}

3 클래스 디자인: 프런트로 돌아갈 때 사용- end ajax callback

function ajax(args){//var ajax = function(){}
    let xhr = new XMLHttpRequest();
    // 设置回调函数
    xhr.onreadystatechange = function(){
        // 4: 客户端接收到响应后回调
        if(xhr.readyState == 4){
            // 回调函数可能需要使用响应的内容,作为传入参数
            args.callback(xhr.status, xhr.responseText);
        }
    }
    xhr.open(args.method, args.url);
    //如果args中,contentType属性有内容,就设置Content-Type请求头
    if(args.contentType){//js中,if判断,除了判断boolean值,还可以判断字符串,对象等,有值就为true
        xhr.setRequestHeader("Content-Type", args.contentType);
    }
    //如果args中,设置了body请求正文,调用send(body)
    if(args.body){
        xhr.send(args.body);
    }else{//如果没有设置,调用send()
        xhr.send();
    }
}

4. 프론트엔드 매칭 서블릿에 필요한 기능을 구현합니다

5. 프로젝트의 어려움

Javaweb은 어떻게 완전한 개인 블로그 시스템을 구축합니까?

사용자가 홈페이지 콘텐츠에 접근할 수 없도록 하고 리다이렉트하도록 구현합니다. 로그인 없이 로그인 페이지. 둘째, 사용자가 로그인하지 않고 인터페이스에 접근하는 것은 불법이며, 로그인 페이지로 리디렉션되어야 합니다

  • 글이 게시된 후, 새 글을 데이터베이스 전체 텍스트를 보려면 마크다운 형식의 데이터를 HTML로 변환해야 합니다

  • 로그인에 성공하면 세션을 만들고 나중에 사용할 수 있도록 사용자 정보도 저장해야 합니다

위 내용은 Javaweb은 어떻게 완전한 개인 블로그 시스템을 구축합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
이 기사는 yisu.com에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제