精华内容
下载资源
问答
  • 本篇文章主要介绍了Android后端服务器的搭建方法,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
  • NoEnemyLG_Android 使用 GAE 的 Android 后端客户端
  • Android后端服务器的搭建

    万次阅读 2018-06-23 01:11:13
    Android后端服务器的搭建 一直做Android前端,今天突然心血来潮想搭建一个后台玩玩。平时都是需要什么样的接口直接出个接口文档扔给后台的兄弟,自己从来不操心他们内部的实现问题。今天怀着好奇的心理去搭建了一个...

    Android后端服务器的搭建

      一直做Android前端,今天突然心血来潮想搭建一个后台玩玩。平时都是需要什么样的接口直接出个接口文档扔给后台的兄弟,自己从来不操心他们内部的实现问题。今天怀着好奇的心理去搭建了一个JAVA编译环境下的后台服务器。听说用PHP搭建服务器的居多,但是我们做大Android的最熟悉的还是Java了,所以下面我就开始搭建这个服务器。很简单。。。

      首先我下载了一个myelipse应为我们开发android的eclipse不能创建web project 要不然你去下载个插件也行,下载好以后创建web project会生成一个目录,然后右键你的这个项目选择myeclipse  -> add structs capabilities... 选择2.1 finish  OK这样就创建成功这个项目了,下面我贴出来我的项目树供大家参考(感谢yayun0516 ,他的博文给了我很大的帮助,但是其中有些不足我已经在下面改正了)

    下面配置structs.xml

    复制代码
    <?xml version="1.0" encoding="UTF-8" ?>
    <!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.1//EN" "http://struts.apache.org/dtds/struts-2.1.dtd">
    <struts>
        <package name="struts2" extends="struts-default" namespace="/">
            <action name="getjson" class="com.shao.action.JSONAction"
                method="json">
                <result name="success">index.jsp</result>
            </action>
        </package>
    </struts>    
    复制代码

    只有这一个需要配置,其他的在你添加struct的时候就会自动生成。下面创建类型文件

    复制代码
    package com.shao.domain;
    
    public class Music {    
        
        private Integer id;      
        private String name;      
        private String time;    
        private String  author;    
        public Integer getId() {    
            return id;    
        }    
        public void setId(Integer id) {    
            this.id = id;    
        }    
        public String getName() {    
            return name;    
        }    
        public void setName(String name) {    
            this.name = name;    
        }    
        public String getTime() {    
            return time;    
        }    
        public void setTime(String time) {    
            this.time = time;    
        }    
        public String getAuthor() {    
            return author;    
        }    
        public void setAuthor(String author) {    
            this.author = author;    
        }     
    }   
    复制代码

    然后再创建转json的方法JSONAction:

    复制代码
    package com.shao.action;
    
    import java.io.IOException;
    import java.io.UnsupportedEncodingException;
    import java.net.URLDecoder;
    import java.util.ArrayList;
    import java.util.List;
    
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    
    import org.apache.struts2.interceptor.ServletRequestAware;
    import org.apache.struts2.interceptor.ServletResponseAware;
    
    import com.google.gson.Gson;
    import com.opensymphony.xwork2.ActionSupport;
    import com.shao.domain.Music;
    
    public class JSONAction extends ActionSupport implements ServletRequestAware,
            ServletResponseAware {
    
        /**  
         *   
         */
        private static final long serialVersionUID = -3604892179657815531L;
        private HttpServletRequest request;
        private HttpServletResponse response;
        private String format;
    
        public String getFormat() {
            return format;
        }
    
        public void setFormat(String format) {
            this.format = format;
        }
    
        @Override
        public void setServletRequest(HttpServletRequest request) {
            this.request = request;
        }
    
        @Override
        public void setServletResponse(HttpServletResponse response) {
            this.response = response;
        }
    
        public void json() {
            List<Music> list = new ArrayList<Music>();
            Gson gson = new Gson();
            Music m1 = new Music();
            m1.setId(1);
            m1.setAuthor("周");
            m1.setName("外婆");
            m1.setTime("04:04");
            list.add(m1);
            Music m2 = new Music();
            m2.setId(2);
            m2.setAuthor("周杰伦");
            m2.setName("半兽人");
            m2.setTime("04:05");
            list.add(m2);
            Music m3 = new Music();
            m3.setId(3);
            m3.setAuthor("周杰伦");
            m3.setName("乌克丽丽");
            m3.setTime("02:55");
            list.add(m3);
            java.lang.reflect.Type type = new com.google.gson.reflect.TypeToken<List<Music>>() {
            }.getType(); // 指定type
            String beanListToJson = gson.toJson(list, type); // list转换成json字符串
            System.out.println("GSON-->" + beanListToJson);
            try {
                response.setContentType("application/json; charset=GBK");
                response.setCharacterEncoding("UTF-8");
                this.response.getWriter().write(beanListToJson);
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }
    复制代码
     response.setContentType("application/json; charset=GBK");一定要注意,如果不加这句会在你请求服务器数据的时候,中文出现乱码现象,同时在index.jsp中加入了contentType="text/html; charset=GBK"
    还有不要忘了导入Gson包。
    完了,就这样服务器就完成了,下面运行一下 run as -> myeclipse service application 成功后会弹出一个框,上面写着This is my JSP page.这就说明你已经成功创建了服务器。
    下面打开http://localhost:8080/Test2/getjson.action 下面就是服务器返回的内容了。


    基本就是这样了,又不懂的可以问我。下面说android端的,更简单了。
    创建我们的项目然后加入xutils和gson包。

    这是一个新建的项目,在activity_main.xml中我给那个TextView添加了一个id
    然后在MainActivity中实现如下:
    复制代码
    package com.example.test2;
    
    import com.lidroid.xutils.HttpUtils;
    import com.lidroid.xutils.exception.HttpException;
    import com.lidroid.xutils.http.ResponseInfo;
    import com.lidroid.xutils.http.callback.RequestCallBack;
    import com.lidroid.xutils.http.client.HttpRequest.HttpMethod;
    
    import android.support.v7.app.ActionBarActivity;
    import android.os.Bundle;
    import android.util.Log;
    import android.view.Menu;
    import android.view.MenuItem;
    import android.view.View;
    import android.widget.TextView;
    
    
    public class MainActivity extends ActionBarActivity {
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
            final TextView text = (TextView) findViewById(R.id.text);
            HttpUtils httpUtils = new HttpUtils();
            httpUtils.send(HttpMethod.POST, "http://192.168.199.171:8080/Test2/getjson.action", new RequestCallBack<String>() {
    
                public void onFailure(HttpException arg0, String arg1) {
                    Log.d("=====================onFailure", arg1+";"+arg0.toString());
                    
                }
    
                public void onSuccess(ResponseInfo<String> arg0) {
                    Log.d("=====================onSuccess", arg0.result);
                    text.setText(arg0.result);
                }
            
                
            });
        }
    
    
        @Override
        public boolean onCreateOptionsMenu(Menu menu) {
            // Inflate the menu; this adds items to the action bar if it is present.
            getMenuInflater().inflate(R.menu.main, menu);
            return true;
        }
    
        @Override
        public boolean onOptionsItemSelected(MenuItem item) {
            // Handle action bar item clicks here. The action bar will
            // automatically handle clicks on the Home/Up button, so long
            // as you specify a parent activity in AndroidManifest.xml.
            int id = item.getItemId();
            if (id == R.id.action_settings) {
                return true;
            }
            return super.onOptionsItemSelected(item);
        }
    }
    复制代码

    整个android端就是这样了,下面我们运行一下刚才的数据已经显示在了该TextView上。

     

    其实整个代码内容是很简单的,主要难的地方就是在环境搭建上,大家多练练吧,整个代码是我跑下来的,所以代码没有问题,如果你跑不成功就多去研究研究环境搭建。

    分享至此,以后可以往这方面多了解一下,就算不做后台开发,也要多了解了解,减少沟通成本。

     

    展开全文
  • 我做安卓前端的,现在要自己实现登录注册,我知道要用到MySQL ,但是后端还要用什么软件来设置开发环境啊!
  • SpringBoot开发安卓后端(一)

    千次阅读 2020-06-30 14:52:35
    安卓开发学了一段时间,但一直自己没有写过后端,参加比赛自己也没负责过后端,自己缺乏独立开发app的全部能力,一直心里不爽,虽然现在复习比较紧张,因为某些因素自己还是想搞一下后端,了却心中未竟之事。...

    • 先总体介绍下本篇博客,涉及到spring boot配置,验证是否配置正确,以及对spring boot 的简单介绍 ,适合想快速开发的小白,共同记录从零学习过程,特点详细。长久更新。
    • 简介:
      • 安卓开发学了一段时间,但一直自己没有写过后端,参加比赛自己也没负责过后端,自己缺乏独立开发app的全部能力,一直心里不爽,虽然现在复习比较紧张,因为某些因素自己还是想搞一下后端,了却心中未竟之事。
    • 首先,自己打算先大致看下成型项目,学一个完整的简单功能,比如登录,涉及前后端,主要后端学习,了解一下后端的开发流程。(对应自己demo1项目)
    • 此处,参考一个简单登录项目博客,含有spring boot配置
    • 由于自己在配置时依然踩了很多坑,所以此篇先介绍配置问题。

    spring Boot 配置

    • 创建一个工程项目
      在这里插入图片描述
      在这里插入图片描述
      在这里插入图片描述
    • 注意将springboot 版本降低,默认太高会报错。
    • 后面就next就好了
    • 右键pom.xml,修改镜像源否否则导包巨慢在这里插入图片描述
    • setting.xml配置文件 (直接粘贴)
    <?xml version="1.0" encoding="UTF-8"?>
    <settings xmlns="http://maven.apache.org/SETTINGS/1.0.0"
              xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
              xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0 http://maven.apache.org/xsd/settings-1.0.0.xsd">
        <mirrors>
    
    
            <mirror>
                <id>alimaven</id>
                <name>aliyun maven</name>
                <url>http://maven.aliyun.com/nexus/content/groups/public/</url>
                <mirrorOf>central</mirrorOf>
            </mirror>
    
            <mirror>
                <id>uk</id>
                <mirrorOf>central</mirrorOf>
                <name>Human Readable Name for this Mirror.</name>
                <url>http://uk.maven.org/maven2/</url>
            </mirror>
    
            <mirror>
                <id>CN</id>
                <name>OSChina Central</name>
                <url>http://maven.oschina.net/content/groups/public/</url>
                <mirrorOf>central</mirrorOf>
            </mirror>
    
            <mirror>
                <id>nexus</id>
                <name>internal nexus repository</name>
                <url>http://repo.maven.apache.org/maven2</url>
                <mirrorOf>central</mirrorOf>
            </mirror>
    
        </mirrors>
    </settings>
    
    • 恭喜配置完成

    接下来写个测试项目验证环境

    • 创建controller包,新建conteroller类,注意目录结构,路径别错了
      在这里插入图片描述
    • 测试类代码编写
      package com.example.demo1.Controller;
      
      import org.springframework.web.bind.annotation.GetMapping;
      import org.springframework.web.bind.annotation.RequestMapping;
      import org.springframework.web.bind.annotation.RestController;
      
      @RestController
      @RequestMapping("/demo1")
      public class Controler {
          @GetMapping("/test")
         public String test(){
             return  "test";
        }
      }
      
    • 运行,根据上图代码路径 (访问 http://localhost:8080/demo1/test)
    • 运行成功效果图在这里插入图片描述

    简述一下Spring Boot的目录结构

    • pom.xml
      • 指定了一个父工程,指定当前工程为Spring Boot,帮助我们声明了starter的依赖版本。
    • src目录
      -src
      	-main
      		-java
      		......
      			-- 启动类.java
      		- resources
      			- static    	 #存放静态资源
      			- templates		 #存放模板页面
      			-application.properties #Spring Boot提供的配置文件
      

    Spring Boot 常用注解

    • @SpringBootApplication
      • spring boot的启动类。
    • @RestController
      • 此注解下所有函数返回的都是json字符串,不会进行跳转,所以没有办法进行跳转并传输数据到另一个页面。
    • @GetMapping
      • 是@RequestMapping(method = RequestMethod.get)的一个小部分的功能缩写。
    • @PostMapping
      • 是@RequestMapping(method = RequestMethod.post)的一个小部分的功能缩写。
    • @PutMapping
      • 是@RequestMapping(method = RequestMethod.put)的一个小部分的功能缩写。

    下一篇实现一些简单的整合sevlet…

    Spring boot 学习之路二

    展开全文
  • 简单的servlet后端实现前端Android调用传参到后台连接数据库实现查询
  • Tomcat + Servlet 实现Android后端开发 这只是一个简单的测试项目,具体实现还需要自己学习,为创建Android后端项目提供一个思路,目前网上大多教程的开发环境都是Eclipse EE 或者过时很久,这是基于其他的教程所...

    Tomcat + Servlet 实现Android后端开发,实现一个简单的注册功能
    这只是一个简单的测试项目,具体实现还需要自己学习,为创建Android后端项目提供一个思路,目前网上大多教程的开发环境都是Eclipse EE 或者过时很久,这是基于其他的教程所编写的一个开发流程,留作记录。

    1.准备工作

    开发工具:Android Studio + IDEA 2020
    JDK版本: jdk11
    数据库:MySQL 8.0.22
    数据库可视化软件:Navicat Premium 15
    服务器:Tomcat 10

    (1)App写出基础框架
    用异步任务发送Http请求,用get和post方法
    (2)配置上述软件的环境变量

    2.创建项目

    1. 新建一个IDEA项目
    选择Maven,从原型创建,选择webapp,然后Next创建(A simple Java web application)
    在这里插入图片描述
    2.自动生成的项目结构如下
    在这里插入图片描述
    右键main新建文件夹,同时创建两个文件夹,java文件夹用来放项目代码,resource文件夹用来放资源文件
    在这里插入图片描述

    3.修改pom.xml中的项目依赖
    将Maven的jdk版本改为自己安装的jdk版本

      <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <maven.compiler.source>11</maven.compiler.source>
        <maven.compiler.target>11</maven.compiler.target>
      </properties>
    

    在 dependencies中添加依赖mysql-connector-java,根据自己的mysql版本选择对应的版本

      <dependencies>
        <dependency>
          <groupId>junit</groupId>
          <artifactId>junit</artifactId>
          <version>4.11</version>
          <scope>test</scope>
        </dependency>
        <dependency>
          <groupId>mysql</groupId>
          <artifactId>mysql-connector-java</artifactId>
          <version>8.0.22</version>
        </dependency>
      </dependencies>
    

    点击右上角按钮,加载 Maven变更
    在这里插入图片描述
    4.添加项目依赖
    打开项目结构,选择Tomcat项目依赖
    在这里插入图片描述

    3.编写Servlet代码

    1.在main/java文件夹下创建一个Servlet包,新建一个.class文件继承于HttpServlet并重写doGet和doPost方法
    resp.setContentType(“text/html;charset=utf-8”); // 设置响应报文的编码格式,避免出现中文乱码的情况

    package Servlet;
    
    import jakarta.servlet.ServletException;
    import jakarta.servlet.http.HttpServlet;
    import jakarta.servlet.http.HttpServletRequest;
    import jakarta.servlet.http.HttpServletResponse;
    
    import java.io.IOException;
    
    public class TestServlet extends HttpServlet {
        @Override
        protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
            String account = req.getParameter("account"); // 从 request 中获取名为 account 的参数的值
            String password = req.getParameter("password"); // 从 request 中获取名为 password 的参数的值
            System.out.println("account:" + account + "\npassword:" + password); // 打印出来看一看
    
            String result = "";
            if("abc".equals(account)
                    && "123".equals(password)){ // 模拟登陆账号、密码验证
                result = "Login Success! 成功了";
            }else {
                result = "Sorry! Account or password error.";
            }
            /* 这里我们只是模拟了一个最简单的业务逻辑,当然,你的实际业务可以相当复杂 */
    
            resp.setContentType("text/html;charset=utf-8"); // 设置响应报文的编码格式
            PrintWriter pw = resp.getWriter(); // 获取 response 的输出流
            pw.println(result); // 通过输出流把业务逻辑的结果输出
            pw.flush();
        }
    
        @Override
        protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
            super.doPost(req, resp);
        }
    }
    

    2.在web.xml中添加Servlet
    在url-pattern中一定注意加“/”,这是访问Servlet的路径

    <web-app>
      <display-name>Archetype Created Web Application</display-name>
      <servlet>
        <servlet-name>test</servlet-name>
        <servlet-class>Servlet.TestServlet</servlet-class>
      </servlet>
      <servlet-mapping>
        <servlet-name>test</servlet-name>
        <url-pattern>/test</url-pattern>
      </servlet-mapping>
    </web-app>
    

    3.编辑配置
    点击左上角+号,选择Tomcat本地服务器,点击部署,选择添加工件,点击确定保存
    在这里插入图片描述
    在这里插入图片描述

    在这里插入图片描述
    4.运行项目

    如果Tomcat的log出现中文乱码,就打开tomcat安装目录的conf文件夹,打开logging.properties文件,将里面的编码格式改为GBK
    在这里插入图片描述

    服务器启动成功,会自动弹出初始网页,就是项目中的web.jsp,在地址栏输入:

    http://localhost:8080/ss_war_exploded/test?account=abc&password=123
    

    http://localhost:8080/ss_war_exploded/就是初始网页,后面跟/test就是访问上文所写的TestServlet,问号后面跟的是request参数

    出现下面的文字表示访问成功
    在这里插入图片描述
    至此,Tomcat服务器的访问就没有问题了,接下来是数据库的连接

    4.编写数据库代码

    1.用Navicat连接MySQL数据库,写连接名,输入mysql的密码,测试连接,连接成功就确定保存
    在这里插入图片描述

    2.新建一个数据库fistmysql两个用户表user_login和user_info
    在这里插入图片描述
    user_info表
    在这里插入图片描述
    user_login表

    在这里插入图片描述

    3.在java文件夹下新建一个db包,新建一个DBUtil类,用来连接数据库

    根据自己的mysql版本选择对应的Driver
    可以参考菜鸟教程的连接方法:https://www.runoob.com/java/java-mysql-connect.html

    package db;
    
    import java.sql.Connection;
    import java.sql.DriverManager;
    import java.sql.SQLException;
    
    public class DBUtil {
        // table
        public static final String TABLE_PASSWORD = "user_login";
        public static final String TABLE_USERINFO = "user_info";
    
        public static Connection getConnect() {
            String url="jdbc:mysql://localhost:3306/fistmysql?&useSSL=false&serverTimezone=UTC"; // 数据库的Url
            Connection connecter = null;
            try {
                Class.forName("com.mysql.cj.jdbc.Driver"); // java反射,固定写法
                connecter = DriverManager.getConnection(url, "root", "1997");
            } catch (ClassNotFoundException e) {
                e.printStackTrace();
            } catch (SQLException e) {
                System.out.println("SQLException: " + e.getMessage());
                System.out.println("SQLState: " + e.getSQLState());
                System.out.println("VendorError: " + e.getErrorCode());
            }
            return connecter;
        }
    }
    
    

    4.新建一个注册Servlet来测试数据库

    package Servlet;
    
    import db.DBUtil;
    import jakarta.servlet.ServletException;
    import jakarta.servlet.http.HttpServlet;
    import jakarta.servlet.http.HttpServletRequest;
    import jakarta.servlet.http.HttpServletResponse;
    
    import java.io.IOException;
    import java.io.PrintWriter;
    import java.sql.Connection;
    import java.sql.ResultSet;
    import java.sql.SQLException;
    import java.sql.Statement;
    import java.util.HashMap;
    
    public class RegisterServlet extends HttpServlet {
    
    
        public RegisterServlet() {
            super();
        }
    
    
        protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
            String account = request.getParameter("account"); // 从 request 中获取名为 account 的参数的值
            String password = request.getParameter("password"); // 从 request 中获取名为 password 的参数的值
            System.out.println("account:" + account + "\npassword:" + password); // 打印出来看一看
    
            String resCode = "";
            String resMsg = "";
            String userId = "";
    
    
            /* 这里我们做一个最简单的注册逻辑,当然,你的实际业务可以相当复杂 */
            try {
                Connection connect = DBUtil.getConnect();
                Statement statement = connect.createStatement(); // Statement可以理解为数据库操作实例,对数据库的所有操作都通过它来实现
                ResultSet result;
    
                String sqlQuery = "select * from " + DBUtil.TABLE_PASSWORD + " where account='" + account + "'";
    
                // 查询类操作返回一个ResultSet集合,没有查到结果时ResultSet的长度为0
                result = statement.executeQuery(sqlQuery); // 先查询同样的账号(比如手机号)是否存在
                if(result.next()){ // 已存在
                    resCode = "201";
                    resMsg = "该账号已注册,请使用此账号直接登录或使用其他账号注册";
                    userId = "";
                } else { // 不存在
                    String sqlInsertPass = "insert into " + DBUtil.TABLE_PASSWORD + "(account,password) values('"+account+"','"+password+"')";
                    // 更新类操作返回一个int类型的值,代表该操作影响到的行数
                    int row1 = statement.executeUpdate(sqlInsertPass); // 插入帐号密码
                    if(row1 == 1){
                        String sqlQueryId = "select userId from " + DBUtil.TABLE_PASSWORD + " where account='" + account + "'";
                        ResultSet result2 = statement.executeQuery(sqlQueryId); // 查询新增记录的userId
                        if(result2.next()){
                            userId = result2.getInt("userId") + "";
                        }
                        String sqlInsertInfo = "insert into " + DBUtil.TABLE_USERINFO + "(userId) values('" + userId + "')";
                        int row2 = statement.executeUpdate(sqlInsertInfo); // 在用户信息表中插入刚注册的Id
                        if(row2 == 1){ // 两个表中都插入成功,从业务角度认定为注册成功
                            resCode = "100";
                            resMsg = "注册成功";
                        }
                    } else {
                        resCode = "202";
                        resMsg = "用户信息表插入错误";
                        userId = "";
                    }
                }
    
            } catch (SQLException e) {
                e.printStackTrace();
            }
    
            HashMap<String, String> map = new HashMap<>();
            map.put("resCode", resCode);
            map.put("resMsg", resMsg);
            map.put("userId", userId);
    
            response.setContentType("text/html;charset=utf-8"); // 设置响应报文的编码格式
            PrintWriter pw = response.getWriter(); // 获取 response 的输出流
            pw.println(map.toString()); // 通过输出流把业务逻辑的结果输出
            pw.flush();
        }
    
        protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
            doGet(request, response);
        }
    
    }
    
    

    5.同样的,在web.xml中添加这个Servlet

    <web-app>
      <display-name>Archetype Created Web Application</display-name>
      <servlet>
        <servlet-name>test</servlet-name>
        <servlet-class>Servlet.TestServlet</servlet-class>
      </servlet>
      <servlet>
        <servlet-name>register</servlet-name>
        <servlet-class>Servlet.RegisterServlet</servlet-class>
      </servlet>
      <servlet-mapping>
        <servlet-name>register</servlet-name>
        <url-pattern>/reg</url-pattern>
      </servlet-mapping>
      <servlet-mapping>
        <servlet-name>test</servlet-name>
        <url-pattern>/test</url-pattern>
      </servlet-mapping>
    </web-app>
    
    

    6.运行项目,在浏览器输入

    http://localhost:8080/ss_war_exploded/reg?account=root&password=123
    

    在这里插入图片描述
    注册成功,刷新一下Navicat中的数据,可以看到数据已经被添加到数据库中
    在这里插入图片描述
    再一次刷新浏览器,相当于再一次提交GET请求,对于同一个账号,就会注册失败
    在这里插入图片描述
    至此,mysql数据库也就连接成功

    展开全文
  • Spring Boot 开发安卓后端(二)

    千次阅读 2020-07-02 16:36:08
    Spring Boot 开发安卓后端(二) Spring Boot 整合Servlet Spring Boot整合Filter Spring Boot 访问静态资源 Spring boot 上传文件(基于spring mvc 方法) Spring Boot 整合Servlet 方式:这里只介绍最常用的方法 ...

    Spring Boot 整合Servlet

    • 方式:这里只介绍最常用的方法
      • 创建Servlet 包,创建Servlet类
      • 该类继承自HttpServlet 类,加入注解@WebServlet
        package com.example.demo1.Servelet;
        
        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 java.io.IOException;
        
        /**
         * 整合Servelet方式一
         */
        @WebServlet(name = "FirstServelet",urlPatterns = "/first")
        public class FirstServelet extends HttpServlet {
            @Override
            protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
                System.out.println("First Servelet");
            }
        }
        
      • 然后在启动类处加入注解@ServletComponentScan
        package com.example.demo1;
        
        import org.springframework.boot.SpringApplication;
        import org.springframework.boot.autoconfigure.SpringBootApplication;
        import org.springframework.boot.web.servlet.ServletComponentScan;
        
        @SpringBootApplication
        @ServletComponentScan //在Spring Boot启动时会扫描 @WebServlet 注解,并将该类实例化。
        public class Demo1Application {
        
            public static void main(String[] args) {
                SpringApplication.run(Demo1Application.class, args);
            }
        
        }
        

    Spring Boot整合Filter

    • 通过注解扫描方式添加Filter
      • 创建Filter
        • 创建Filter包
        • 创建Filter的一个类
        package com.example.demo1.filter;
        
        import javax.servlet.*;
        import javax.servlet.annotation.WebFilter;
        import java.io.IOException;
        
        /**
         * 整合Filter方式一
         */
        //@WebFilter (filterName = "FirstFilter",urlPatterns = {"*.do","*.jsp"}) //以后缀方式拦截,拦截所有do.jsp结尾
        @WebFilter (filterName = "FirstFilter",urlPatterns = "/fisrt") //拦截fisrt
        public class FirstFilter implements Filter {
        
            @Override
            public void init(FilterConfig filterConfig) throws ServletException {
        
            }
        
            @Override
            public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
        
                System.out.println("进入 First Filter");
                filterChain.doFilter(servletRequest,servletResponse);
                System.out.println("离开First Filter");
            }
        
            @Override
            public void destroy() {
        
            }
        }
        
      • 修改启动类
        • 和修改servlet一样,因为Filer是servlet一部分,所以也是通过@ServletComponentScan来扫描@WebFilter注解的。
        • 运行结果
        • 拦截成功在这里插入图片描述
    • 上述整合Servlet 和Filter 都只用了扫描注解方式,还有配置类方式,此处先不写了,以后再学。

    Spring Boot 访问静态资源

    • Spring Boot 默认在static文件夹下存放静态资源,在templates文件下存放动态资源
      • static 目录
        通过 classpath\static 目录访问静态资源,注意存放静态资源的目录
        必须是static
      • templates 目录
        1:Spring Boot不推荐使用jsp作为视图层技术,而是默认使用thymeleaf来
        做动态页面。
        
    • 直接访问 static 包下的静态页面
      static目录下直接创建html文件,浏览器输入地址访问即可。
      
    • 通过Controller层访问 template 的静态页面
      1:创建pageController类来做跳转页面的管理类
      2:通过给类添加@Controller注解
      3:通过@RequestMapping 注解调用函数,访问静态页面,
      注意函数返回url的格式,不需要输入template,因为默认在template目录下
      
      • 代码
      package com.example.demo1.Controller;
      
      import org.springframework.stereotype.Controller;
      import org.springframework.web.bind.annotation.RequestMapping;
      
      @Controller
      public class pageController {
          @RequestMapping("/page")
          public String showPage(){
              return  "index.html";
          }
      }
      
      
    • 通过Controller 层访问 static下的html
      • 注意返回字符串的重定向,默认会在template 目录,所以需要重定向
      package com.example.demo1.Controller;
      
      import org.springframework.stereotype.Controller;
      import org.springframework.web.bind.annotation.RequestMapping;
      
      /**
       * 通过Controller访问static下的html,需要在返回的字符串中进
       * 行重定向
       */
      @Controller
      public class pageController {
          @RequestMapping("/page")
          public String showPage(){
              return  "redirect:index.html";
          }
      }
      
      
    • 自定义静态资源位置方法此处不写了。

    Spring boot 上传文件(基于spring mvc 方法)

    • 编写一个简单得文件上传界面
      <!DOCTYPE html>
      <html lang="en">
      <head>
          <meta charset="UTF-8">
          <title>Title</title>
      </head>
      <body>
      <form  action="/fileUploadController" method="post" enctype="multipart/form-data">
          <input type="file" name="file"/>
          <input type="submit" value="okok"/>
      </form>
      </body>
      </html>
      
    • 编写响应Controller 文件
      • 此处只是为了写spring boot 操作,所以文件上传函数就实现了个移动盘符操作。

      • 代码

        package com.example.demo1.Controller;
        
        import org.springframework.web.bind.annotation.PostMapping;
        import org.springframework.web.bind.annotation.RestController;
        import org.springframework.web.multipart.MultipartFile;
        
        import java.io.File;
        import java.io.IOException;
        
        /**
        * 文件上传Controller
        */
        @RestController
        public class FileUploadController {
           @PostMapping("/fileUploadController")
           public String fileUpload(MultipartFile file) throws IOException {
               System.out.println(file.getOriginalFilename());
               file.transferTo(new File("D:/"+file.getOriginalFilename()));
               return "ok";
        
           }
        }
        
        
        注意代码:
        1@RestController 此处上传成功后,返回一个字符串,所以使用
        此注解。
        2@PostMapping 因为对应html文件中得 post方法,所以 使用此
        注解。
        3/fileUploadController  对应html中的 form中的action值
        4:MultipartFile  后面定义的参数 ,需要与html中的name相对应。
        
    • 此时基本的上传写完了,但此时的上传文件 有大小限制, 默认1M,所以需要修改可以上传的文件大小。
      -修改application.properties 配置文件
      #配置单个上传文件的大小
      spring.servlet.multipart.max-file-size=10MB
      #配置在一次请求中上传文件的容量的总限制
      spring.servlet.multipart.max-request-size=20MB
      
      
    • 下一讲介绍themeleaf
    展开全文
  • 前期准备后端(语言java,框架ssm (springmvc+mybatis),开发工具 intellij IDEA)后端(javaee)打开intellij IDEA点击create New project 选项按照步骤点击next继续点下一步这两部基本都默认,最后点击finish默认进来...
  • 我在学安卓前端开发,现在已经学完了,但是对后端没有任何了解,百度也搜不到教程,不知从何入手。请大神们指点该如何做和如何学,就算去搜索也得有个突破口吧!
  • Xwt手机 Xwt 的 android-backend,一个跨平台的 UI 工具包 ( ) 我只会实现它的图形部分(Xwt.Drawing)。
  • 我练手写了个大学家教APP,因为对后台服务器不熟悉,准备用bmob提供的云服务,但是现在刚接触bmob也很蛋疼。有用过bmob的吗,想问问bmob的数据库管理只能通过app代码来增删改查或者用MySQL做好了上传?...
  • 前后端一般用什么调用http post,webservice?还是其它的? 后端用什么开发
  • 方法有很多,你可以自己拿responseBody里的json,一个个字段自己解析;也可以给okhttp添加拦截器来处理response内容。...如果后端返回格式不规矩或者会变化的时候,将bean里定义的是Any或*即可比如有时返回的是这...
  • 后端工程师”的意思是负责数据提供,熟悉后端流程,熟练掌握一种后端工具的使用,学会如何使用工具...(3)独立负责Android/ios系统后台服务器端应用程序开发与维护,并提供接口文档。(4)根据产品需求完成模块设计...
  • Android后端服务之Bmob

    2015-06-24 10:05:03
    .relpost{clear:both};
  • 对于很多Android/ios/wp个人移动开发者来说,开发一个具有网络功能的应用不是一件容易的事,不仅需要购买/租赁服务器,还必须掌握一门诸如Java/.net/php这类的服务器开发语言,每开发一款移动应用程序,就必须开发...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 60,442
精华内容 24,176
关键字:

安卓后端